Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Como subir datos a travé de una sentencia SQL. (https://www.clubdelphi.com/foros/showthread.php?t=95068)

Ariqueño 13-02-2021 15:17:48

Como subir datos a travé de una sentencia SQL.
 
buenos días ..
hace mucho tiempo que no volvía al club por estar alejado a la programación (no pude ingresar a mi antigua cuenta).. Estoy realizando una pequeña aplicación que necesito de su ayuda. Utilizo delphi 10.2, Zeoslib 7.2.4-stable y mysql 5.5.24, el problema es el sgte:
cargo desde un archivo CSV a la tabla correspondiente:
Código Delphi [-]
  DM.miSQL.Close;
  DM.miSQL.SQL.Clear;
  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.ParamByName('P1').Value := edit1.Text; // esto contiene edit1 "C:/DSM/DSMprecio/libros/STOCK05-01-2021.csv"
  DM.miSQL.ExecSQL;

y me arroja el sgte error:
SQL Error: File 'C:/DSM/DSMprecio/libros/STOCK05-01-2021.csv
' not found (Errcode:22)

Ahora si esta sentencia SQL lo cargo en tiempo de diseño en la Zquery:

Código SQL [-]
 LOAD DATA INFILE 'C:/DSM/DSMprecio/libros/STOCK05-01-2021.csv'
 INTO TABLE temporal_stock
 FIELDS TERMINATED BY ";"
 LINES TERMINATED BY "\r\n"

corre sin problemas..
he hecho de todo para ver cual es mi problema y nada...
desde ya gracias.

Casimiro Notevi 13-02-2021 18:08:51

Pregunto: ¿no serán las barras al revés, al ser windows?
Cita:

C:\DSM\DSMprecio\libros\STOCK05-01-2021.csv

Ariqueño 13-02-2021 18:57:33

Cita:

Empezado por Casimiro Notevi (Mensaje 540025)
Pregunto: ¿no serán las barras al revés, al ser windows?

lo cargo tal cual en el componente zquery.. y corre bien..
ahora lo cambio como dices
C:\DSM\DSMprecio\libros\STOCK05-01-2021.csv
y envía el sgte error:

SQL Error File:
'c:\wamp\bin\mysql5.5.24\data\DSMDSMpreciolibrosStock05-01-2021.csv' not found (ErrCode:2)


no se por donde encontrar la solución.
y gracias por ayudar.

inclusive envio por consola de mysql

mysql> LOAD DATA INFILE 'C:\DSM\DSMprecio\libros\STOCK05-01-2021.csv'
-> INTO TABLE temporal_stock
-> FIELDS TERMINATED BY ";"
-> LINES TERMINATED BY "\r\n";
ERROR 29 (HY000): File 'c:\wamp\bin\mysql\mysql5.5.24\data\DSMDSMpreciolibrosSTOCK05-01-2021.csv' not found (Errcode: 2)

Casimiro Notevi 13-02-2021 19:05:55

Si en ambos casos dice que no encuentra el .CSV es que no existe ahí o que no tiene permisos para leerlo ahí.

mamcx 13-02-2021 20:12:29

Yo no uso mysql, pero a mi me parece que es porque usas un parámetro en vez de directamente la ruta del archivo (no me sorprende que de la casualidad que esto no se pueda en este caso concreto en mysql).

Al usar el parámetros NO están haciendo idéntico a como lo haces en la GUI de la bd.

Ariqueño 13-02-2021 20:45:43

Cita:

Empezado por mamcx (Mensaje 540030)
Yo no uso mysql, pero a mi me parece que es porque usas un parámetro en vez de directamente la ruta del archivo (no me sorprende que de la casualidad que esto no se pueda en este caso concreto en mysql).

Al usar el parámetros NO están haciendo idéntico a como lo haces en la GUI de la bd.

y por donde va la mano...digo para orientarme...pensé que era una cosa de permisos veo que no es asi..

mamcx 13-02-2021 21:19:47

Pasa la ruta concatenando directo, sin usar parámetros.

Ariqueño 20-02-2021 18:36:21

hola...
ya encontré el problema pero no se como solucionarlo..
utilizo un OpenDialog para ubicar el archivo en cuestión.. y vacío la ruta completa a un tedit y al vaciar la instrucción SQL al Zquery se produce un salto de línea, eso lo veo en un showMessage:
Código SQL [-]
  LOAD DATA INFILE
  "C:/DSM/DSMprecio/libros/PRECIO18-02-2021.CSV
  "
  INTO TABLE temporal_stock
  FIELDS TERMINATED BY ";"
  LINES TERMINATED BY "\r\n"
y se produce el error que no se encuentra el archivo. pero si antes de dar ok la ejecución de este código me posiciono al final del Tedit y le doy 1 vez con la tecla backSpace no elimina el ultimo caracter y si le doy por segunda vez si lo hace, reintegro ese caracter eliminado y ejecuto la instruccion y funciona de maravilla....

parece una historia de brujas y duendes... pero asi es....que me hecha un cable..porfavor.

mamcx 20-02-2021 19:10:47

Solo hay que darle trim al string antes de pasarlo al mysql:

http://www.delphibasics.co.uk/RTL.asp?Name=Trim

Ariqueño 20-02-2021 20:25:26

[quote=mamcx;540121]Solo hay que darle trim al string antes de pasarlo al mysql:



lo había hecho pero mágicamente funciono.... gracias por todo..


La franja horaria es GMT +2. Ahora son las 23:13:20.

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