Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2005
tiagor64 tiagor64 is offline
Miembro
 
Registrado: ene 2005
Posts: 48
Poder: 0
tiagor64 Va por buen camino
problemas con el insert y el update

Hola:

El programa me da un error al insertar unos registros en una tabla, primero os explicare que es lo q pretendo con este codigo, asi tambien me podeis aconsejar si hay alguna manera mas simple de conseguirlo.

En mi base de datos tengo una tabla q se llama articulos y otra q se llama modelos, como su nombre indica una contiene los articulos y la otra los modelos.
Luego tengo otra tabla llamada articulos_modelos en la que relacionamos los codigos de los articulos con la de los modelos asi conozco los articulos que lleva cada modelo.
Lo que necesito hacer es dar un nuevo modelo de alta pero basandome en uno anterior por lo q he pensado mediante sql primero crear el cod del nuevo modelo. luego insertar en la tabla de union los articulos que tiene el modelo original y finalmente a esos articulos q hay q no tienen anun el codigo de modelo asignado asignarles el nuevo codigo.
Pero me da un error: El numero de valores de consulta y el numero de campos de destino son diferentes.
Os pongo aquie el codigo y aver si podeis ayudarme. Muchas gracias.

Código:
  
 if edit1.text = '' then
   showmessage ('Introduzca el codigo del modelo')
   else if edit2.Text = '' then
	 showmessage ('Introduzca el nombre del modelo')
	 else
	 begin
	 principalpedidos.modelosquery.sql.text := 'insert into modeloxasis (codmodelo, nombre) values ('+quotedstr(edit1.text)+', '+quotedstr(edit2.text)+')';
	 principalpedidos.modelosquery.ExecSQL;
	 edit1.text := '';
	 edit2.Text := '';
	 configmodelo.adoquery1.SQL.text := 'insert into modelo_articuloxasis select codarticulo from modelo_articuloxasis where codmodelo = '+quotedstr(configmodelo.label4.caption);
	 configmodelo.adoquery1.ExecSQL;
	 configmodelo.adoquery1.SQL.Text := 'update modelo_articuloxasis set codmodelo = '+quotedstr(edit1.text)+' WHERE (codmodelo Is Null)';
	 configmodelo.adoquery1.ExecSQL;
Responder Con Cita
  #2  
Antiguo 16-02-2005
Avatar de Investment
Investment Investment is offline
Miembro
 
Registrado: may 2003
Posts: 378
Poder: 21
Investment Va por buen camino
He modificado un poco tu codigo, limpiando las querys antes de añadir una nueva sql y mostrando mensajes para saber en que lugar falla excatamente.

Espero que te sirva.

Código:
  if edit1.text = '' then
    showmessage ('Introduzca el codigo del modelo')
  else
    if edit2.Text = '' then
 	 showmessage ('Introduzca el nombre del modelo')
    else
    begin
 	 principalpedidos.modelosquery.sql.Clear; //limpio antes de añadir
 	 principalpedidos.modelosquery.sql.text :=
 		' insert into modeloxasis (codmodelo, nombre) '+
 		' values ('+quotedstr(edit1.text)+', '+quotedstr(edit2.text)+')';
 	 try
 	   principalpedidos.modelosquery.ExecSQL;
 	 except
 	   //CONTROL DE POSIBLES EXCEPCIONES
 	   ShowMessage('Fallo en primera query');
 	 end;
 	 edit1.text := '';
 	 edit2.Text := '';
 	 configmodelo.adoquery1.SQL.Clear; //limpio antes de añadir
 	 configmodelo.adoquery1.SQL.text :=
 		  ' insert into modelo_articuloxasis select codarticulo '+
 		  ' from modelo_articuloxasis where codmodelo = '+
 		  quotedstr(configmodelo.label4.caption);
 	 try
 	   configmodelo.adoquery1.ExecSQL;
 	 except
 	   //CONTROL DE POSIBLES EXCEPCIONES
 	   ShowMessage('Fallo en segunda query');
 	 end;
 	 configmodelo.adoquery1.SQL.Clear; //limpio antes de añadir
 	 configmodelo.adoquery1.SQL.Text :=
 		 'update modelo_articuloxasis set codmodelo = '+
 		  quotedstr(edit1.text)+' WHERE (codmodelo Is Null)';
 	 try
 	   configmodelo.adoquery1.ExecSQL;
 	 except
 	   //CONTROL DE POSIBLES EXCEPCIONES
 	   ShowMessage('Fallo en tercera query');
 	 end;
    end;
__________________
Saludos,
Peter Investment
Responder Con Cita
  #3  
Antiguo 16-02-2005
tiagor64 tiagor64 is offline
Miembro
 
Registrado: ene 2005
Posts: 48
Poder: 0
tiagor64 Va por buen camino
hola:


muchas gracias por la ayuda prestada, pero aun falla en la segunda query y me da el siguiente mensage:


El numero de valores de consulta y el numero de campos destino son diferentes

si se te ocurre algo...

hoy llevo el dia torcido

Última edición por tiagor64 fecha: 16-02-2005 a las 17:23:58.
Responder Con Cita
  #4  
Antiguo 16-02-2005
Avatar de Investment
Investment Investment is offline
Miembro
 
Registrado: may 2003
Posts: 378
Poder: 21
Investment Va por buen camino
Question

Lo unico que se me ocurre es que la tabla modelo_articuloxasis
tenga mas de un campo ¿Puede ser?
__________________
Saludos,
Peter Investment
Responder Con Cita
  #5  
Antiguo 16-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por tiagor64
me da el siguiente mensage:


El numero de valores de consulta y el numero de campos destino son diferentes
En esta consulta, la parte del SELECT selecciona un sólo campo mientras que la parte del INSERT no especifica campos así que espera que se le proporcionen todos.

// Saludos
Responder Con Cita
  #6  
Antiguo 16-02-2005
tiagor64 tiagor64 is offline
Miembro
 
Registrado: ene 2005
Posts: 48
Poder: 0
tiagor64 Va por buen camino
Muchisimas gracias.

Pues si q es lo q me decis, no tenia especificado en q campo insertar. siento molestar por una tonteria asi, pero juro q lo havia repasado y no lo veia.

muchas gracias de nuevo.

y os muestro como qeda el codigo.

Código:
 if edit1.text = '' then
   showmessage ('Introduzca el codigo del modelo')
   else if edit2.Text = '' then
	 showmessage ('Introduzca el nombre del modelo')
	 else
	 begin
	 principalpedidos.modelosquery.sql.text := 'insert into modeloxasis (codmodelo, nombre) values ('+quotedstr(edit1.text)+', '+quotedstr(edit2.text)+')';
	 principalpedidos.modelosquery.ExecSQL;
	 configmodelo.adoquery1.SQL.text := 'insert into modelo_articuloxasis (codarticulo) select codarticulo from modelo_articuloxasis where codmodelo = '+quotedstr(configmodelo.label4.caption);
	 configmodelo.adoquery1.ExecSQL;
	 configmodelo.adoquery1.SQL.Text := 'update modelo_articuloxasis set codmodelo = '+quotedstr(edit1.text)+' WHERE (codmodelo Is Null)';
	 configmodelo.adoquery1.ExecSQL;
	 edit1.text := '';
	 edit2.Text := '';
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:35:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi