Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   pasarle valores de stringGrid a una senetencia sql. (https://www.clubdelphi.com/foros/showthread.php?t=36425)

Arturo 11-10-2006 15:59:59

pasarle valores de stringGrid a una senetencia sql.
 
Buenos dias, como puedo pasarle los valores de stringGrid que ya esten almacenados a una sentenecia sql (Insert....), y ya le estableci nombres a las columnas, el error me dice:
El nombre id no es valido en este contexto, solo se permiten constantes, expresiones o variables. No se permiten nombre de columna.

Código PHP:

tengo un procedimiento de guardar:
for 
i:= 0 to StringGrid1.RowCount do begin
   SQL
.Add('INSERT INTO equipocomputo(COMP_ID, COMP_DESCRIP, COMP_ESPECIFICACIONES,  COMP_CON_IVA) values(');
   
SQL.Add(StringGrid1.Cells[0,i] + ',');
   
SQL.Add(StringGrid1.Cells[1,i] + ',');
   
SQL.Add(StringGrid1.Cells[2,i] + ',');
   
SQL.Add(StringGrid1.Cells[3,i] + ')');
   
ExecSQL;
   
next:
   
end

gracias

Neftali [Germán.Estévez] 11-10-2006 16:08:01

Utiliza parámetros mejor que utilizar el Add.
Se me ocurre que te puede estar fallando por:
(1) Algunos campos (de tipo string) posiblemente les falte la comilla.
(2) En la segunda pasada debes hacer un Clear del SQL.

NOTA: Para código Delphi, utiliza la etiqueta DELPHI en lugar de la de PHP.

Lepe 11-10-2006 17:31:49

useasé:
Código Delphi [-]
   SQL.Clear;
   SQL.Add('INSERT INTO equipocomputo(COMP_ID, COMP_DESCRIP, COMP_ESPECIFICACIONES,  COMP_CON_IVA) values(');
   SQL.Add(':prComp_id, :prcomp_descrip, :prcomp_especificaciones, :prcomp_con_iva');
  if not Prepared then Prepare; // agilizar la cosa ya que es un bucle;
for i:= 0 to StringGrid1.RowCount - 1 do begin
   Parambyname('prComp_id').Asxx := Stringgrid1.cells[0,i]);
  // dar los demás parámetros
   ExecSQL;
   next: // este no sé de donde viene
   end;

Saludos

Arturo 12-10-2006 15:57:50

ok, gracias y hice unos cambio y ya me quedo de la siguiente forma por si alguien le interesa:
Código PHP:

var i:integer;
begin
  with ADOQuery1 
do begin
  Close
;
  
SQL.Clear;
  if 
not Prepared then Prepared;
  for 
i:= 1 to StringGrid1.RowCount do begin
   SQL
.text:='INSERT INTO equipocomputo(COMP_ID, COMP_DESCRIP, COMP_ESPECIFICACIONES,  COMP_CON_IVA)';
   
SQL.text:=SQL.text 'values(:prComp_id, :prcomp_descrip, :prcomp_especificaciones, :prcomp_con_iva)';
   
Parameters.ParamByName('prComp_id').Value:=StringGrid1.Cells[0,i];
   
Parameters.ParamByName('prcomp_descrip').Value:=StringGrid1.Cells[1,i];
   
Parameters.ParamByName('prcomp_especificaciones').Value:=StringGrid1.Cells[2,i];
   
Parameters.ParamByName('prcomp_con_iva').Value:=StringGrid1.Cells[3,i];
   
ExecSQLend;
 
end

y listo los ingreso primero al stringGrid1 y luego con un boton de guardar los recorre y recorre el stringrid y los ingresa. bye

Lepe 12-10-2006 16:13:56

Vale, pero si usas SQL.TEXT no tienes que hacer un SQL.Clear, ya lo hace internamente el componente, si lo piensas es lógico, al modificar la propiedad Text que contiene todas las líneas, es normal que primero se borre todo lo que haya.

Sin embargo, al usar SQL.Add estamos accediendo a una línea independiente, entonces, no se borra el contenido de las otras líneas.

Saludos ahorrativos (1 línea menos jejeje)

Otra cosa.... ¿el sql se modifica dentro del bucle para algo?... pues no, por eso lo saqué fuera. Dentro del bucle solamente se le da valores a los parámetros y se ejecuta. Mira la ayuda de Prepare ;).


La franja horaria es GMT +2. Ahora son las 00:20: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