Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como inserto valores de varias tuplas en un Query??? (https://www.clubdelphi.com/foros/showthread.php?t=38460)

Saltamontes 15-12-2006 03:45:53

Como inserto valores de varias tuplas en un Query???
 
Uso Delphi 7 y Zeos Access 6.5.1 Apha y MySQL Server5, Query Browser 1.1.20.

Estoy tratando de guardar de un solo golpe valores de varios capos de una forma a una tabla de SQL, son datos para 6 tupas quiero hacer algo asi:
INSERT INTO table2 VALUES('id1','text','text'),
('id2','text','text'),
('id2','text','text');

y le intente de esta manera:
DM.ZQ_Materias.Close;
DM.ZQ_Materias.SQL.Clear;
DM.ZQ_Materias.SQL.Add('insert into materias');
DM.ZQ_Materias.SQL.Add('VALUES(' " ' + clave1.Text + ',' + DBLCBox_Especialidad.KeyValue + ',' + materia1.Text + ',' + StrToInt(c1.Text) + ' " '),
(' + clave2.Text + ',' + DBLCBox_Especialidad.KeyValue + ',' + materia2.Text + ',' + StrToInt(c2.Text) + '),
(' + clave3.Text + ',' + DBLCBox_Especialidad.KeyValue + ',' + materia3.Text + ',' + StrToInt(c3.Text) + '),
(' + clave4.Text + ',' + DBLCBox_Especialidad.KeyValue + ',' + materia4.Text + ',' + StrToInt(c4.Text) + '),
(' + clave5.Text + ',' + DBLCBox_Especialidad.KeyValue + ',' + materia5.Text + ',' + StrToInt(c5.Text) + '),
(' + clave6.Text + ',' + DBLCBox_Especialidad.KeyValue + ',' + materia6.Text + ',' + StrToInt(c6.Text) + ')
');
DM.ZQ_Materias.ExecSQL;
DM.ZQ_Materias.Open;

Es la primera vez que intento hacer esto, siempre habia insertado datos a una tupla, y ya busque ayuda pero me quede igual,
incluso baje el manual de SQL y he checado paginas de internet.

Les agradezco su ayuda de antemano.
Sales pues:)

roman 15-12-2006 03:56:17

Pero olvidaste mencionar cuál es el problema. Visto por encima, me parece que ni siquiera compila

Código Delphi [-]
DM.ZQ_Materias.SQL.Add('VALUES(' " ' + clave1.Text + ',' + DBLCBox_Especialidad.KeyValue + ',' + materia1.Text + ',' + StrToInt(c1.Text) + ' " '),

El mismo resaltado desintaxis te lo indica.

// Saludos

Saltamontes 15-12-2006 04:39:28

Pos de hecho asi es, no le encuetro el error y me dice que o falta cerrar la cadena, o los " " no estan colocados adecuadamente o se esperaba (END) y se encontro ,.

Ya le estuve probando como dos horas seguidas y no encuentro que me falla, por eso copie el codigo de lo que habia probado.
Es lo que me marca:
[Hint] Value assigned to 'no_cuatrim' never used
[Error] Illegal character in input file: '"' ($22)
[Error] Too many actual parameters
[Error] Too many actual parameters
[Error] Too many actual parameters
[Error] Illegal character in input file: '"' ($22)
[Error] Missing operator or semicolon
[Error] Too many actual parameters
[Error] ')' expected but ',' found
[Error] Too many actual parameters
[Error] Too many actual parameters
[Error] 'END' expected but ',' found
[Error] Unterminated string
[Error] '.' expected but ';' found
[Fatal Error] CURTV.dpr Could not compile used unit 'FRM_AgreMat.pas'

Les agradeceria si me ayudan con un ejemplo del orden en que deben ir los " " y ' ' para delimitar bien las ordenes, ya que solo habia usado algo como SQL.Add(' where id_especialidad = " ' + txt_clave_esp.Text + ' " ');

Y otra vez, gracias :D

roman 15-12-2006 04:59:02

Pues lo primero es usar ' para las cadenas en Delphi y " para las cadenas en SQL. Pero es incluso mejor usar la función QuotedStr, que si bien alarga el código, lo aclara bastante. Por ejemplo, en lugar de poner

Código Delphi [-]
'where id_especialidad = "' + txt_clave_esp.Text + '"'

poner

Código Delphi [-]
'where id_especialidad = ' + QuotedStr(txt_clave_esp.Text)

La función QuotedStr se encargará de colocar las " alrededor del texto.

Mejor aún sería usar parámetros:

Código Delphi [-]
'where id_especialidad = :EspecialidadId'

y sustituirlos al momento de lanzar la consulta:

Código Delphi [-]
ZQ_Materias.ParamByName('EspecialidadId').AsString := txt_clave_esp.Text;

Si no puedes usar parámetros, por ejemplo porque no sepas de antemano cuantas líneas vasa insertar, podrías, por lo menos usar Format:

Código Delphi [-]
Format('where id_especialidad = %s', [QuotedStr(txt_clave_esp.Text)]);

En fin, que hay varias opciones, pero lo esencial es no intentar construir la cadena de un sólo golpe porque puede uno volverse loco.

// Saludos


La franja horaria es GMT +2. Ahora son las 16:45:36.

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