Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ejecutar varios insert a la ves (https://www.clubdelphi.com/foros/showthread.php?t=51107)

jzginez 05-12-2007 20:13:18

ejecutar varios insert a la ves
 
Hola amigos estoy usando Delphi 7, FireBird 2 y las FIBPlus. Estoy haciendo un programa para migrar de una base a otra, tabla por tabla y campo por campo por si no se llaman igual siempre que sean del mismo tipo (aun esta en pañales el sistema :p ).
en la parte básica que llevo genero varias lineas insert p/e:
Código SQL [-]
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (0, 'inicial', Null, 'inicial', 'inicial', Null, Null, Null, Null, Null); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (1, 'BRAVO AUTOMOTRIZ S.A. DE C.V.', 'BAU -831123-T86', 'BLVD. MIGUEL ALEMAN Y MONTES DE OCA', 'BLVD. MIGUEL ALEMAN Y MONTES DE OCA', 'COSAMALOAPAN, VER.', 'SRA. ESTELA BRAVO ACOSTA', '288-20142', '288-21718', '288-22199'); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (2, 'CIA. AGRICOLA GANADERA DE TABASCO, S.A. DE C.V.', 'AGT -921219-5W5', 'AVENIDA H. COLEGIO MILITAR Nø 108, COLONIA  ATASTA', 'AVENIDA H. COLEGIO MILITAR Nø 108, COLONIA  ATASTA', 'VILLAHERMOSA, TABASCO', 'SRITA. RITA', Null, Null, Null); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (3, 'CIA. AZUCARERA INDEPENDENCIA, S.A. DE C.V.', ' AIN-960314-960', 'BLVD. MANUEL AVILA CAMACHO S/N', 'BLVD. MANUEL AVILA CAMACHO S/N', 'VILLA INDEPENDENCIA, VER.', Null, Null, Null, Null); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (4, 'ASOC. LOCAL DE CA¥EROS CNPR INGENIO LA GLORIA', '    -      -', 'DOMICILIO CONOCIDO: "INGENIO LA GLORIA"', 'DOMICILIO CONOCIDO: "INGENIO LA GLORIA"', 'MPIO. DE URSULO GALVAN, VER.', Null, Null, Null, Null); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (5, 'SOC. VENUSTIANO CARRANZA, S.A. DE C.V.', '    -      -', 'DOM. CONOCIDO POBLADO C23, PLAN CHONTALPA', 'DOM. CONOCIDO POBLADO C23, PLAN CHONTALPA', 'CARDENAS, TAB.', Null, Null, Null, Null); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (6, 'AUTOTRACTORES DE MORELOS, S.A. DE C.V.', ' ATM-730612-7P4', 'AV. REFORMA NO. 205 COL. EMILIANO ZAPATA', 'AV. REFORMA NO. 205 COL. EMILIANO ZAPATA', 'CUAUTLA, MOR.', Null, Null, Null, Null); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (7, 'TRACTORMAYA, S. A. DE C.V.', ' TRA-880107-HW4', 'AV. RUIZ CORTINES ESQ. DO¥A FIDENCIA', 'AV. RUIZ CORTINES ESQ. DO¥A FIDENCIA', 'VILLAHERMOSA, TABASCO', 'SR. MIGUEL ANGEL CORTES', '93 - 12013', '142670', Null); 
Insert into CLIENTES (ID, NOMBRE, RFC, DIRECCION, COLONIA, LOCALIDAD, REPRESENTANTE, TELEFONO_1, TELEFONO_2, FAX) values (8, 'ING. EDUARDO GALVAN CARPINTERO', '    -      -', 'AV. BENITO JUAREZ Nø 19,  MPIO. DE EMILIANO ZAPATA', 'AV. BENITO JUAREZ Nø 19,  MPIO. DE EMILIANO ZAPATA', 'MORELOS', Null, Null, Null, Null); 
commit;
.......

este código lo asigno ya sea a un pFIBQuery, pFIBStoredproc o a un pFIBUpdateObject y en todos estos al intentar ejecutar las sentencias me marca error de sintaxis en la linea 2 columna 1 la sentencia INSERT, si copio todas estas sentencias a ibexpert y las ejecuto funciona de forma correcta.

Alguien me pude decir como hacer que delphi ejecute todas las lineas seguidas y no tener que ejecutar linea por linea.

Gracias

p.d. encontré este tema en el foro pero esa estructura del insert no funciona en firebird

Lepe 05-12-2007 20:31:48

Echa un visual al FTp del club, hay una herramienta para migrar de paradox a firebird, quizás te sirva.

PD: Necesitas usar un FIBScript (debe llamarse así) que si permitirá varias instrucciones.

Saludos

AzidRain 05-12-2007 22:20:35

Yo hice alguna vez una aplicación similar pero de DBF a MySQL. Yo lo hice utilizando las caracteristicas de importacion de MySQL (Insert from local) pasandole un archivo de texto plano delimitado por comas y la velocidad que se adquiere es muy superior a hacer un insert por cada registro. No se si FB tenga algo similar, espero que si.. Con este enfoque pasaba 20 000 a 30000 registros en 1 minuto a lo mucho.

jhonny 05-12-2007 22:31:58

En estos casos siempre uso el DataPump, ya que hay casos en los que hay que respetar las llaves foreneas de la base de datos y estos programas ya tienen en cuenta ese tipo de cosas.

jachguate 06-12-2007 03:35:29

Si queres hacerlo por código, te comento que los componentes Query solamente envían una instrucción al servidor.

Lo que te tocaría es enviar al servidor sentencia por sentencia, suponiendo que todas las instrucciones generadas están en una sola línea, es sencillo:

Código Delphi [-]
var
  Insrucciones: TStringList;
begin
  Instrucciones := TStringList.Create();
  try
    Instrucciones.Read
    for I:= 0 to Instrucciones.Count - 1 do
    begin
      Query1.SQL.Text := Instrucciones[i];
      Query1.ExecSQL;
    end;
  finally
    Instrucciones.Free;
  end;

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 01:42:47.

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