Ver Mensaje Individual
  #4  
Antiguo 14-10-2021
Ariqueño Ariqueño is offline
Registrado
 
Registrado: feb 2021
Posts: 8
Reputación: 0
Ariqueño Va por buen camino
Cita:
Empezado por bucanero Ver Mensaje
hola!!

Una forma de solucionar este problema es almacenar el valor en una variable temporal y establecer el valor correcto del campo en la sección SET del comando LOAD DATA aplicando una sustitución del separador decimal.

Aquí te dejo un ejemplo de como poder hacerlo:

Código SQL [-]
LOAD DATA INFILE 'C://xampp//tmp//tabla.csv'
INTO TABLE `tablacsv`
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
-- los valores correspondientes a los campos num1, num2, en vez de guardarlos
-- directamente en la BBDD se almacenan en las varibles temporales @num1, @num2
(`id`, `asunto`, @num1, @num2)
-- y en la seccion SET puedes establecer los valores de los campos aplicando los cambios que se deseen
-- en este caso se sustituye la coma decimal por punto
SET `num1`=CONVERT(replace(@num1, ',', '.'), decimal(10,3)),
    `num2`=CONVERT(replace(@num1, ',', '.'), decimal(10,3))
buen dia bucabero.

Código Delphi [-]
    DM.miSQL.SQL.Add('LOAD DATA INFILE :P1');
    DM.miSQL.SQL.Add('INTO TABLE temporal_stock');
    DM.miSQL.SQL.Add('FIELDS TERMINATED BY ";"');
    DM.miSQL.SQL.Add('LINES TERMINATED BY "\r\n"');
    DM.miSQL.SQL.Add('IGNORE 1 LINES');
    DM.miSQL.SQL.Add('(id_prod,nombre,@num1)');
    DM.miSQL.SQL.Add('set final_sala=CONVERT(REPLACE(@num1,",","."),decimal(12,3) '); // problema
    DM.miSQL.ParamByName('P1').Value := edit2.Text;
    DM.miSQL.ExecSQL;

tengo un error de sentencia SQL no puedo usar cremillas simple por ser caracteres reservados del delphi.
como puedo pasar ese error? gracias ..
Responder Con Cita