Ir al contenido



Foto

Isersion masiva de datos


  • Por favor identifícate para responder
8 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 15 mayo 2009 - 08:06

Hola
Estoy haciendo una prueba y me quede con una duda:
Lo que estoy haciendo:
1-Tengo varias BD Access, todas iguales (contienen los mismos campos) y una general.
2-Las conecto y llamo en un solo programa y muestro los datos.
Lo que pretendo es que al presionar un boton, los datos que NO están actualizados en la BD general se actualicen, sacándolos de las otras BD.
He intentado hacer un update, pero me manda un error de sintaxis.
Esto es lo que tengo:


delphi
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3.   ADOTable1.Open;// abre la BD1
  4.   ADOTable2.Open;// abre la BD2
  5.   ADOTable3.Open;// abre la BD general
  6. end;
  7.  
  8. procedure TForm1.Button1Click(Sender: TObject);
  9. begin
  10.   ADOQuery1.SQL.Text := 'Update Articulos set Descripcion = '+ADOTable1.Fields[1].AsString+
  11.                         ' Where Descripcion <> '+ADOTable3.Fields[1].AsString;
  12.  
  13.   ADOQuery1.ExecSQL;
  14. end;


Alguna idea en esta locura?.
Saludos
  • 0

#2 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 15 mayo 2009 - 08:14

Hola
Me voy respondiendo:
Caral: El update no sirve en este caso, prueba tal vez el Insert.
Saludos
Si, ya lo hice y no sirve, probare el insert. :D

  • 0

#3 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 15 mayo 2009 - 08:26

Hola
Me sigo respondiendo, se nota que no tengo nada que hacer. :D
Usando insert tampoco me sale:


delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3.     ADOQuery1.SQL.Text := 'Insert Into Articulos (CodProducto, Descripcion, Costo, PrecioVenta, Disponoble, Notas) '+
  4.                           'Values (' +ADOTable1.Fields[0].AsString+', '+ADOTable1.Fields[1].AsString+', '+ADOTable1.Fields[2].AsString+', '+
  5.                             ADOTable1.Fields[3].AsString+', '+ADOTable1.Fields[4].AsString+', '+ADOTable1.Fields[5].AsString+')';
  6.     ADOQuery1.ExecSQL;
  7. end;


Estoy tratando de actualizar en este momento solo una y no me sale.
Saludos
PD: Por supuesto que estoy haciendo algo mal, pero no se que es...... :( :
  • 0

#4 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 731 mensajes
  • LocationPinar del Río, Cuba

Escrito 16 mayo 2009 - 08:15

Prueba creando la instruccion SQL de esta forma



delphi
  1. With ADOQuery1.SQL do
  2. begin
  3.   Clear;
  4.   Add('Insert Into Articulos (CodProducto, Descripcion, Costo, PrecioVenta, Disponoble, Notas)');
  5.   Add('SELECT ('+ Fields[0].AsString+','+ Fields[1].AsString+', '+ Fields[2].AsString+', '+ Fields[3].AsString+', '+ Fields[4].AsString+', '+ Fields[5].AsString+') ');
  6.   Add('FROM ADOTable1');
  7. //  Add('WHERE Condicion'); //Si necesitas filtrar
  8. end;
  9. ADOQuery1.ExecSQL;



Asi es como me funciona a mi el crear una Inst SQL

  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 16 mayo 2009 - 08:33

A ver, mejor usa parámetros y en los WHERE usa NOT IN, así­ insertar los datos que no están en una tabla u otra.

Saludos.
  • 0

#6 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 16 mayo 2009 - 08:45

Hola
Amigo, un ejemplo???.
El asunto es:
Adquirir los datos de una tabla que esta en una BD
Pasar los datos a otra BD, pero solo los que no se repitan.
Pero todos, no linea por linea.
Amigo, un ejemplo???. ;)
Saludos
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 16 mayo 2009 - 08:55



delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3.     ADOQuery1.SQL.Text := 'Insert Into Articulos (CodProducto, Descripcion, Costo, PrecioVenta, Disponoble, Notas) '+
  4.                           'Values (:campo1, :campo2, :campo3,:campo4, :campo5, :campo6) WHERE CodProducto NOT IN (SELECT CodProducto FROM TABLA)';
  5. ADOQuery1.Params.Parameter('campo1').value := ADOQuery.Fields[0].AsString;
  6. //asi sucesivamente...
  7.     ADOQuery1.ExecSQL;
  8. end;



Como son Varias BD esa consulta se deberí­a introducir dentro de un ciclo FOR o WHILE, así­ ir recorriendo por las distintas BDs que tienes, digo, es una idea no tengo Delphi a mano.

Saludos.
  • 0

#8 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 16 mayo 2009 - 09:04

Hola
Si es lo que pienso, es necesario un ciclo while para que recorra la tabla completa.
También pensé en la posibilidad de un campo clave (como el código de la bd).
Saludos
PD: Esto lo estoy haciendo para un pequeño tuto que publicare (que también necesito :D) de como manejar varias bd a la vez y sincronizar los datos en un solo programa, algo sencillo, pero aveces con access es util.
Ya tengo prácticamente todo, pero quiero mejorar algunos detalles. :D
Gracias por la ayuda amigo. (y)
  • 0

#9 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 731 mensajes
  • LocationPinar del Río, Cuba

Escrito 18 mayo 2009 - 06:55

Que coincidencia, yo tambien estoy en busca de una solucion para esto mismo, la de sincronizar los datos de varias BD en una sola central, solo los registros nuevos, para evitar repetidos.
Espero que cuando tengas el pequeño tuto listo, lo compartas para aplicar la solucion que encontraste  ;)

  • 0