Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   problemas con el insert y el update (https://www.clubdelphi.com/foros/showthread.php?t=18552)

tiagor64 16-02-2005 09:12:05

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;


Investment 16-02-2005 16:10:46

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;


tiagor64 16-02-2005 16:20:18

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 :(

Investment 16-02-2005 17:01:40

Lo unico que se me ocurre es que la tabla modelo_articuloxasis
tenga mas de un campo ¿Puede ser?

roman 16-02-2005 17:03:41

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

tiagor64 16-02-2005 17:46:09

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 := '';



La franja horaria es GMT +2. Ahora son las 09:35:25.

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