Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como llenar un stringGrid a partir de un Query? (https://www.clubdelphi.com/foros/showthread.php?t=47600)

enecumene 01-09-2007 21:04:49

Como llenar un stringGrid a partir de un Query?
 
Hola compañeros del foro, ahora estoy empezando a trabajar con StringGrids, he intentando llenar datos a partir de un query, ese es el codigo que he estado tratando de hacer:

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then begin
 with QArticulo do begin
  if active then Close; //Agregué aquí
  sql.Clear; // y aquí
  SQL.Add(' SELECT ref, articulo, cantidad FROM articulos ');
  SQL.Add('WHERE ref = '+Edit1.Text+'');
  Open;
  if not IsEmpty then begin
  StringGrid1.Cells[1,1]:=fieldbyname('ref').AsString;
  StringGrid1.Cells[2,1]:=fieldbyname('aticulo').AsString;
  end else begin
    ShowMessage('Articulo no existe');
  end;
 end; 
end;
end;

pues como ven no me funciona me aparece ese error:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleException with message 'Parameter Q2612A has no default value'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Estoy trabajando con ADO, nota es la primera vez que trabajo con stringGrids y no he documentacion suficiente acerca de ello a menos que este buscando mal, espero que me puedan echar una mano con eso.

saludos...

pcicom 01-09-2007 22:14:59

Re:
 
Cita:

Empezado por enecumene (Mensaje 227644)
Hola compañeros del foro, ahora estoy empezando a trabajar con StringGrids, he intentando llenar datos a partir de un query, ese es el codigo que he estado tratando de hacer:

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then begin
 with QArticulo do begin
  if active then Close; //Agregué aquí
  sql.Clear; // y aquí
  SQL.Add(' SELECT ref, articulo, cantidad FROM articulos ');
  SQL.Add('WHERE ref = '+Edit1.Text+'');
  Open;
  if not IsEmpty then begin
  StringGrid1.Cells[1,1]:=fieldbyname('ref').AsString;
  StringGrid1.Cells[2,1]:=fieldbyname('aticulo').AsString;
  end else begin
    ShowMessage('Articulo no existe');
  end;
 end; 
end;
end;

pues como ven no me funciona me aparece ese error:



Estoy trabajando con ADO, nota es la primera vez que trabajo con stringGrids y no he documentacion suficiente acerca de ello a menos que este buscando mal, espero que me puedan echar una mano con eso.

saludos...



Prueba ESTO:


Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then begin
 with QArticulo do begin
  if active then Close; //Agregué aquí
  sql.Clear; // y aquí
  SQL.Add(' SELECT ref, articulo, cantidad FROM articulos ');
  SQL.Add('WHERE ref = '+QuotedStr(Edit1.Text) );
  Open;
  if not IsEmpty then begin
  StringGrid1.Cells[1,1]:=fieldbyname('ref').AsString;
  StringGrid1.Cells[2,1]:=fieldbyname('aticulo').AsString;
  end else begin
    ShowMessage('Articulo no existe');
  end;
 end; 
end;
end;

enecumene 01-09-2007 22:27:16

gracias pcicom me funciono perfecto, ahora tengo otra consulta, luego de agregar los datos como enfoco a una celda específica y recorrer cada columna mediante tab o enter y que en la ultima columna vuelva el edit y agregar otra linea??...

enecumene 02-09-2007 01:18:25

bueno termine optando por usar un dbgrid, y he podido hacer lo que queria hacer, tengo:

1-DataSetProvider
1-ClientDataSet
2-ADOQuery1 y 2
1-Dataccess
1-Edit
1-DBGrid

hice la siguiente configuración:

->DataSetProvider->DataSet->ADOQuery
->ClientDataSet->ProviderName->DataSetProvider
->DataAccess->DataSet->ClientDataSet

supongo que esa configuración esta correcta, en el evento OnKeyDown del DBGrid puse este codigo:

Código Delphi [-]
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_TAB then
begin
CLientDataset1.Append;
Edit1.Clear;
Edit1.SetFocus;
end;
end;

en el evento OnKeyPress del Edit puse este codigo:

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then begin
 with QArticulo do begin
  if active then Close;
  sql.Clear; // y aquí
  SQL.Add(' SELECT ref, articulo, cantidad FROM articulos ');
  SQL.Add('WHERE ref = '+QuotedStr(Edit1.Text) );
  ClientDataSet1.Open;
  ClientDataSet1.Edit;
  Open;
  if not IsEmpty then begin
   DBGrid1.fields[0].Value:=QArticuloref.AsString;
   DBGrid1.Fields[1].Value:=QArticuloarticulo.AsString;
   DBGrid1.DataSource.DataSet.FieldByName('cantidad').FocusControl;
  end else begin
    ShowMessage('Articulo no existe');
  end; 
 end; 
end;
end;

hasta todo bien se agregan los datos al dbgrid mediante un edit, ahora tengo este problema y es cuando intento grabar los datos, puse un boton con este codigo:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
registrar.SQL.Clear;
registrar.SQL.Text:=' insert into entrada (articulo, cantidad, ref, suplidor, costo, itbis, monto, fecha, hora, usuario, fechauser)'+
                    ' values ("'+DBGrid1.fields[1].Value+'", "'+DBGrid1.Fields[2].Value+'", "'+DBGrid1.Fields[0].Value+'", "", "+double(0.00)", "+double(0.00)", "+double(0.00)", "", "", "", "")';
ShowMessage(registrar.SQL.Text);
registrar.ExecSQL;
end;

y me tira este error:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project inventario.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (String) into type (Double)'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
he intentado de todo, use Quotedstr, FloatToInt, double, strToInt, etc. todo igual... cual sera la causa? estoy haciendo algo malo?

adjunto codigo:

Archivo Adjunto 955

dec 02-09-2007 03:09:17

Hola,

Mientras estaba leyendo tu mensaje e iba por aquí...

Código:

... values ("'+DBGrid1.fields[1].Value+'", "'+DBGrid1.Fields[2].Value+'", ...
He pensado que acaso, en lugar de "Value", tenías que utilizar algo como "AsString"... por ejemplo. Pero, luego he echado la barra de scroll a la izquierda y he podido leer:

Código:

... "+double(0.00)", "+double(0.00)", "+double(0.00)", "", "", "", "") ...
Y entonces ya me he echado para atrás. No sé si lo que apunto al principio sirva de algo, si en esto último tenemos el problema,... en definitiva, me he quedao planchao. :)

enecumene 02-09-2007 03:24:59

en realidad es un tollo de codigo dec, solo era una idea dado que es la primera vez que hago tipo de codigos, el codigo lo he dejado de esta manera:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
registrar.SQL.Clear;
registrar.SQL.Text:=' insert into entrada (articulo, cantidad, ref, suplidor, costo, itbis, monto, fecha, hora, usuario, fechauser)'+
                    ' values ("'+DBGrid1.fields[1].AsString+'", "'+DBGrid1.Fields[2].AsString+'", "'+DBGrid1.Fields[0].Value+'", "", "", "", "", "", "", "", "")';
ShowMessage(registrar.SQL.Text);
registrar.ExecSQL;
end;

y me sale ese error que tantas veces me lo han dicho ni me acuerdo:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project inventario.exe raised exception class EOleException with message 'Data type mismatch in criteria expression'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

debo aclarar que los campos donde puse '+double(0.00), son campos numericos con formato standard con decimal (3,579.00) lo quiero almacenar valores de costo, precios y montos, y estoy usando componentes ADO base de datos ACCESS..

Caral 02-09-2007 05:18:21

Hola
No llevo seguimiento de esto pero creo que el problema puede ser el orden ademas del tipo de dato, prueba esto:
Edito: trate de arreglarlo, no pude, lo hago en el siguiente post.
Saludos

Caral 02-09-2007 05:21:28

Hola
Asi:
Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 a: real;
begin
 a:= 0.00;
registrar.SQL.Clear;
registrar.SQL.Text:=' insert into entrada (articulo, cantidad, ref, suplidor, costo, itbis, monto, fecha, hora, usuario, fechauser)'+
                    ' values ("'+DBGrid1.fields[1].Value+'", "'+DBGrid1.Fields[2].Value+'", "'+DBGrid1.Fields[0].Value+'", "", "'+a+'", "'+a+'", "'+a+'", "", "", "", "")';
ShowMessage(registrar.SQL.Text);
registrar.ExecSQL;
end;
Saludos

johnnySan 09-01-2008 01:59:40

[quote=pcicom;227652]Prueba ESTO:

Yo trabajando en DBE , lleno datos en un stringgrid asi:

Código Delphi [-]procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var c:integer;begin
if Key=#13 then begin
query.sql.Closequery.sql.Clear;
query.SQL.Add(' SELECT ref, articulo, cantidad FROM articulos ');
query.SQL.Add('WHERE ref = '+QuotedStr(Edit1.Text) );
Open;
while not query.Eof do begin
StringGrid1.Cells[1,c]:=query.Fields[0].asstring; //campo de cantidad
StringGrid1.Cells[2,c]:=query1.Fields[1].asstring;//campo de articulo
inc(c);query.next; end;if c=1 then ShowMessage('Articulo no existe');
query.close; end;
end;
Pero en un ADO ,debe ser a ese estilo o... no se.

johnnySan 09-01-2008 02:05:42

[quote=pcicom;227652]Prueba ESTO:

Yo trabajando en DBE , lleno datos en un stringgrid asi:

Código Delphi [-]procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var c:integer;begin
if Key=#13 then begin
query.sql.Closequery.sql.Clear;
query.SQL.Add(' SELECT ref, articulo, cantidad FROM articulos ');
query.SQL.Add('WHERE ref = '+QuotedStr(Edit1.Text) );
Open;
while not query.Eof do begin
StringGrid1.Cells[1,c]:=query.Fields[0].asstring; //campo de cantidad
StringGrid1.Cells[2,c]:=query1.Fields[1].asstring;//campo de articulo
inc(c);query.next; end;if c=1 then ShowMessage('Articulo no existe');
query.close; end;
end;
Pero en un ADO ,debe ser a ese estilo o... no se.

johnnySan 09-01-2008 02:13:46

Alguin sabes como crear un stringgrid a modo de un DBgrid?
 
(no se por donde puedo enviar a todos este mensaje...)
Quiero que mi StringGrid sea al modo del DBGrig.
Es decir yo quiero que mi Stringgrid, sea al modo de el DBgrid, osea que las columnas se ajusten al modo del usuario usando el mouse,....al momento de ejecutarlo.
Por favor ayudenme en ese problemita.
Gracias.
Johnnysan

johnnySan 09-01-2008 02:15:01

[quote=pcicom;227652]Prueba ESTO:

Yo trabajando en DBE , lleno datos en un stringgrid asi:

Código Delphi [-]procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var c:integer;begin
if Key=#13 then begin
query.sql.Closequery.sql.Clear;
query.SQL.Add(' SELECT ref, articulo, cantidad FROM articulos ');
query.SQL.Add('WHERE ref = '+QuotedStr(Edit1.Text) );
Open;
while not query.Eof do begin
StringGrid1.Cells[1,c]:=query.Fields[0].asstring; //campo de cantidad
StringGrid1.Cells[2,c]:=query1.Fields[1].asstring;//campo de articulo
inc(c);query.next; end;if c=1 then ShowMessage('Articulo no existe');
query.close; end;
end;
Pero en un ADO ,debe ser a ese estilo o... no se.

magnus33 25-06-2008 21:00:24

como llenar un stringgrid
 
y como hay que hacer para llenar un stringgrid utilizando solo un zconection y un zquery que estan en un datamodul esto es con el Zeos Access


La franja horaria es GMT +2. Ahora son las 02:08:31.

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