Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Insertar datos a un campo al momento de hacer un LOAD DATA (https://www.clubdelphi.com/foros/showthread.php?t=84777)

vicvil 04-12-2013 15:27:15

Insertar datos a un campo al momento de hacer un LOAD DATA
 
Tengo el siguiente dilema:

Tengo un archivo "datos.txt" que contiene lo siguiente:

Juan,1978,M,C,2
Maria,1982,F,C,1
Oscar,1980,M,S,0

y la tabla a la cual se debe insertar tiene los siguientes campos:

Nombre, ano_nacimiento, genero, est_civil, hijos, seccion

el campo seccion fue agregado ahora ultimo, por lo que antes solo hacia lo siguiente para leer el archivo:

Código SQL [-]
if OpDg.Execute then
  begin
    sql:= 'load data local infile ' + '''' + OpDg.FileName + '''';
    sql:= StrTran(sql,'\','/'); (esta funcion cambia el '\' por el '/')
    qry.sql.clear;
    qry.sql.add(sql + ' Replace into table Tabla1 fields terminated by '','' lines  terminated by ''\r\n''');
   Replace into table formfact fields terminated by '','' lines terminated by ''\r\n''');
    qry.ExecSQL;
    qry.close;
  end;

Lo que necesito ahora es que al momento de realizar este proceso asignarle directamente al campo "seccion" un número dado por el usuario, que sería el mismo para todos, es decir la tabla debe quedar asi:

Nombre ano_nacimiento genero est_civil hijos seccion
Juan 1978 M C 2 1
Maria 1982 F C 1 1
Oscar 1980 M S 0 1

¿Hay alguna forma de hacer esto en el Replace?

vicvil 05-12-2013 16:09:34

Bueno me respondo a mi mismo...

Despues de investigar un rato logré dar con la solución, que consiste en indicar los campos en que iría cada dato del archivo y con un SET llenar el último campo.
la sintaxis entonces quedaría asi:

Código SQL [-]
  if OpDg.Execute then
  begin
    sql:= 'load data local infile ' + '''' + OpDg.FileName + '''';
    sql:= StrTran(sql,'\','/'); (esta funcion cambia el '\' por el '/')
    qry.sql.clear;
    qry.sql.add(sql + ' Replace into table Tabla1 fields terminated by '','' lines  terminated by ''\r\n''');
    Replace into table formfact fields terminated by '','' lines terminated by ''\r\n''');
sql:='(nombre,ano_nacimiento,genero,est_civil,hijos,@seccion) SET seccion=('''+codseccion+''')';{codseccion es una variable ingresada por el usuario}
  qry.sql.add(sql);
    qry.ExecSQL;
    qry.close;
  end;

Lo probé y funcionó bien, asi que esto puede ayudar a alguien que pueda tener el mismo problema alguna vez.


La franja horaria es GMT +2. Ahora son las 17:43:06.

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