Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   grabar stringgrid en mysql (https://www.clubdelphi.com/foros/showthread.php?t=79420)

edgar_prospero 03-07-2012 20:29:09

grabar stringgrid en mysql
 
que hay amigos a ver quien puede ayudarme tengo un stringgrid al cual inserto valores por medio de edits pero lo que quiero lograr es esa informacion que tengo en el stringrid guardarla en mysql no se si esto sea posible lo intente de la siguiente manera pero no me funciono


Código Delphi [-]
procedure TForm4.Button3Click(Sender: TObject);
begin

  StringGrid1.Cells[3, StringGrid1.Row] := precio.Text;

             
tabla.SQL.Clear;
tabla.Close;

tabla.SQL.Add('insert into cobro(folio, cantidad, codigo, descripcion, unitario)values(: pfolio, : pcantidad, : pcodigo, : pdescripcion, : punitario) ');

tabla.ParamByName('folio').AsString:=StringGrid1.Cells[0, StringGrid1.Row];
tabla.ParamByName('cantidad').AsString:=StringGrid1.Cells[0, StringGrid1.Row];
tabla.ParamByName('codigo').AsString:=StringGrid1.Cells[0, StringGrid1.Row];
tabla.ParamByName('descripcion').AsString:=StringGrid1.Cells[0, StringGrid1.Row];
tabla.ParamByName('unitario').AsString:=StringGrid1.Cells[0, StringGrid1.Row];


tabla.ParamByName('pfolio').AsString:=folio.Text;

//StringGrid1.Cells[0, StringGrid1.Row]:= query.FieldByName('cantidad').asString;
//StringGrid1.Cells[0, StringGrid1.Row]:= query.FieldByName('folio').asString;

tabla.Execute;

kapcomx 03-07-2012 23:10:23

veo caritas
 
no se que este pasando pero en mi pantalla veo caritas justo antes de los nombres de campos, lo copie a bloc de notas y no me muestra nada.

como sea creo que tienes que poner : antes del nombre del campo en la parte de values(:campo, :campo2).....

intentalo asi


Saludos....

edgar_prospero 04-07-2012 00:20:45

justamente eso de las caritas es : pcantidad pero me lo detecto como carita pero aun asi con los : no me funciona todavia

Casimiro Notevi 04-07-2012 00:42:35

Es que el :P (la 'p' minúscula) es la carita de burla :)
He puesto un espacio entre el "dos puntos" y la "p" en tu código.

Neftali [Germán.Estévez] 04-07-2012 10:41:00

Cuando dices que note funcionó, ¿A qué te refieres?
¿Que no pasó lo que esperabas? ¿Que dió error?

Deberías realizar un recorrido por las filas del StringGrid (cada fila 1 registro) y para cada fila utilizar un código similar al que has puesto para que cada celda se grabe en un campo de la tabla.

edgar_prospero 04-07-2012 16:43:04

me marca un error que dice #21S0 column count doesn´t match value count at row1 el codigo que estoy usando es el siguiente

Código Delphi [-]
var i:integer;
begin

for i := 1 to StringGrid1.RowCount do
    Query.SQL.Clear;
    Query.SQL.Add('insert into cobro( cantidad, codigo, descripcion, unitario) values(:folio, :cantidad, :codigo, :descripcion, :unitario) ');

    Query.ParamByName('cantidad').AsString := stringGrid1.Cells[1, i] ;
    Query.ParamByName('codigo').AsString :=  stringGrid1.Cells[2, i];
    Query.ParamByName('descripcion').AsString :=  stringGrid1.Cells[3, i];
    Query.ParamByName('unitario').AsString :=  stringGrid1.Cells[4, i];

    Query.ExecSQL;

edgar_prospero 04-07-2012 16:53:21

ya logre quitar el error pero sigue sin guardarme nada no me marca ningun error pero no guarda alguien que pueda ayudarme para ver que estoy haciendo mal

Neftali [Germán.Estévez] 04-07-2012 17:47:11

Intenta capturar el error con un Try..Except.

Código Delphi [-]

  try
    ...
    Query.ParamByName('descripcion').AsString :=  stringGrid1.Cells[3, i];
    Query.ParamByName('unitario').AsString :=  stringGrid1.Cells[4, i];


    Query.ExecSQL;
  except
    on E:Exception do begin
      MessageDlg(Format('Error: %s  Clase: %s',[E.Message, E.ClassName]), mtError, [mbOK], 0);
    end;
  end;

Eso te dará si hay algún error al ejecutar.
Por otro lado puedes ejecutar paso a paso y ver si hace todo el recorrido.

edgar_prospero 04-07-2012 17:50:10

pues no me marca error y es que el folio que esta en un edit ese si me lo guarda el problema esta con el stringgrid que me aparecen ceros en la base de datos

Neftali [Germán.Estévez] 04-07-2012 18:35:46

Puedes hacer otra cosa, generar la sentencias sin parámetros y visualizara antes de insertar, al menos para ver qué está generando:
Por cierto, ahora que veo tienes 4 campos y 5 parámetros en la SQL.

Código Delphi [-]

for i := 1 to StringGrid1.RowCount do
    Query.SQL.Clear;
    Str := 'insert into cobro( cantidad, codigo, descripcion, unitario) values(%s, %s, %s %s) ';
 

    // NOTA: A los que sean tipo String hay que añadirles la función QuotedStr
    Str := Format (Str, [stringGrid1.Cells[1, i],
                                stringGrid1.Cells[2, i]. 
                                QuotedStr(stringGrid1.Cells[3, i]), 
                                stringGrid1.Cells[4, i]  ]);

    MessageDlg(Format('SQL: %s  ',[Str]), mtInformation, [mbOK], 0);   

    Query.SQL.Text := Str;
    // ejecutarla
    Query.ExecSQL;
end;


La franja horaria es GMT +2. Ahora son las 12:44:27.

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