Ir al contenido


Foto

mostrar datos en dbgrid por folio


  • Por favor identifícate para responder
17 respuestas en este tema

#1 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 17 agosto 2012 - 10:33

que hay amigos aqui de nuevo con un problema, tratare de explicarme tengo una base de dtaos en mysql con informacion, como son folio nombre, fecha, precio, etc. bueno lo que quiero logra es que si pir ejemplo tengo folios del 1 al 50, en un tedit escribir un numero de folio por ejemplo 20 y al darle enter me traiga la informacion referente a ese folio y me lo muestre en el dbgrid lo intente de la siguiente manera pero nome funciono, haber si alguien me puede echar la mano:




delphi
  1. procedure TForm4.folioKeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   if Key = #13 then
  4.   begin
  5.  
  6.     tabla.Close;
  7.     tabla.SQL.Text := 'select * from entradas where folio=:folio';
  8.     tabla.Params[0].Value := folio.Text;
  9.  
  10.     tabla.Open;
  11.  
  12.         DBGrid1.DataSource.DataSet.FieldByName('nombre').value:= tabla.ParamByName('nombre').Value;
  13.   DBGrid1.DataSource.DataSet.FieldByName('fecha').value:= tabla.ParamByName('fecha').Value;
  14. ..................


  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 17 agosto 2012 - 10:38

qué error te aparece
  • 0

#3 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 17 agosto 2012 - 10:39

'parameter 'nombre' not found'
  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 agosto 2012 - 11:48

Es porque no existe el parámetro "nombre" ni "fecha"  *-)

Cámbialo por FieldByName  ;)



delphi
  1. procedure TForm4.folioKeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   if Key = #13 then
  4.   begin
  5.  
  6.     tabla.Close;
  7.     tabla.SQL.Text := 'select * from entradas where folio=:folio';
  8.     tabla.Params[0].Value := folio.Text;
  9.  
  10.     tabla.Open;
  11.  
  12.         DBGrid1.DataSource.DataSet.FieldByName('nombre').value:= tabla.ParamByName('nombre').Value;  // AQUI
  13.   DBGrid1.DataSource.DataSet.FieldByName('fecha').value:= tabla.ParamByName('fecha').Value; // Y AQUI
  14. ..................



Saludox ! :)
  • 0

#5 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 17 agosto 2012 - 11:58




delphi
  1. procedure TForm4.folioKeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   if Key = #13 then
  4.   With tabla Do
  5.     begin
  6.     Close;
  7.     SQL.Text := 'select * from entradas where folio=:folio';
  8.     ParamByName('folio').AsString:= folio.Text;
  9.     Open;
  10.     end: // With
  11.   ...



;)

  • 0

#6 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 17 agosto 2012 - 12:04

gracias Fenareth pero ahora tengo el problema que nomas me agrega un registro de la base de datos, si tengo varios registros con el mismo folio nomas me pasa uno al dbgrid y me deberia de pasar todos
  • 0

#7 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 agosto 2012 - 12:30

Porqué no ligas directamente tu DataSet (que veo que se llama Tabla) con el DBGrid que estás usando a través de un TDataSource ???

Algo así:

Suponiendo que tu DataSet se llama Tabla, el DataSource se llama dsDatos y el TDBGrid se llama GridDatos:

1. Propiedad DataSet del TDataSource (dsDatos)-> Tabla
2. Propiedad DataSource del TDBGrid (GridDatos) -> dsDatos

Y al momento de hacer el Open de Tabla, el grid GridDatos mostrará la información sin necesidad de que lo "agregues"...

Saludox ! :)
  • 0

#8 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 17 agosto 2012 - 12:33

si pues asi lo tengo pero no quiero que me muestre toda la informacion solo el los que contengan el numero de folio que ponga en el tedit, y que al darle clic me agregue al dbgrid los registros con ese numero de folio
  • 0

#9 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 agosto 2012 - 12:49

El DBGrid únicamente muestra los registros que trae cargado el DataSet, ni más ni menos... si en la consulta de tu DataSet estás "filtrando" aquellos datos que coincidan con tu folio, el Grid no debe mostrar más que esos mismos datos...

Si el Grid te está mostrando más datos de los que deseas, el problema realmente no está en el Grid, si no en tu DataSet

Saludox ! :)
  • 0

#10 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 17 agosto 2012 - 12:52

exacto y ya logre que con el folio me mostrara un registro pero ese es el problema que si tengo 4 registros con el mismo folio  nomas me muestra el primero es en lo que estoy pidiendo apoyo, que me estara faltando hacer este es el codigo que estoy usando:



delphi
  1. if Key = #13 then
  2. begin
  3.   query.Close;
  4.     query.SQL.Text := 'select * from entradas where folio=:folio';
  5.     query.Params[0].Value := folio.Text;
  6.  
  7.     query.Open;
  8.  
  9.     fecha.Date := query.FieldByName('fecha').AsDateTime;
  10.     ClientDataSet1.Insert;
  11.  
  12.     ClientDataSet1.FieldByName('codigo').value:= query.FieldByName('codigo').Value;
  13.     ClientDataSet1.FieldByName('nombre').value:= query.FieldByName('nombre').Value;
  14.       ClientDataSet1.FieldByName('cantidad').value:= query.FieldByName('cantidad').Value;
  15.       ClientDataSet1.FieldByName('precio').value:= query.FieldByName('precio').Value;
  16.         ClientDataSet1.FieldByName('importe').value:= query.FieldByName('importe').Value;
  17.             ClientDataSet1.Post;
  18.  
  19.     begin
  20.       if Key = #13 then
  21.       begin
  22.         Key := #0;
  23.         Perform(WM_NEXTDLGCTL, 0, 0);
  24.       end
  25.     end;
  26.  
  27.   end


  • 0

#11 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 agosto 2012 - 02:25

Ok ahora comprendo... lo que te falta es recorrer el query con un ciclo (for o while) e ir instertando registro por registro al ClientDataSet



delphi
  1. Query.First;
  2.  
  3. for i := 0 to Query.RecordCount do
  4. begin
  5.       // Inserta en ClientDataset
  6.       Query.Next;
  7. end;



Saludox ! :)
  • 0

#12 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 agosto 2012 - 12:20

intente lo que me dijiste de este modo pero me sigue mostrando nomas un registro este es mi codigo para que le eches un vistaso porfa para ver en que estoy mal




delphi
  1. procedure TForm4.folioKeyPress(Sender: TObject; var Key: Char);
  2. var i:integer;
  3. begin
  4.  
  5.  
  6.   if Key = #13 then
  7. begin
  8.  
  9.   query.Close;
  10.     query.SQL.Text := 'select * from entradas where folio=:folio';
  11.     query.Params[0].Value := folio.Text;
  12.  
  13.     query.Open;
  14.  
  15.     Query.First;
  16.  
  17. for i := 0 to Query.RecordCount do
  18. begin
  19.  
  20.  
  21.   ClientDataSet1.Edit;
  22.     ClientDataSet1.FieldByName('fecha').value:= query.FieldByName('fecha').Value;
  23.     ClientDataSet1.FieldByName('codigo').value:= query.FieldByName('codigo').Value;
  24.     ClientDataSet1.FieldByName('nombre').value:= query.FieldByName('nombre').Value;
  25.       ClientDataSet1.FieldByName('cantidad').value:= query.FieldByName('cantidad').Value;
  26.       ClientDataSet1.FieldByName('precio').value:= query.FieldByName('precio').Value;
  27.         ClientDataSet1.FieldByName('importe').value:= query.FieldByName('importe').Value;
  28.         ClientDataSet1.Post;
  29.  
  30.         Query.Next;
  31. end;


  • 0

#13 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 20 agosto 2012 - 12:23

Revisa ésta linea...



delphi
  1. ClientDataSet1.Edit;



La idea es editar el DataSet o insertar una nueva línea en cada iteración del ciclo ???  *-)

Saludox ! :)
  • 0

#14 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 agosto 2012 - 12:25

es insertar ya cambie esa parte pero creo que no va por ahi el problema porque sigue nomas insertandome un solo registro y con ese folio tengo 3 en mi base de datos.. (y)
  • 0

#15 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 20 agosto 2012 - 12:47

Acabo de hacer un ejemplo rapidísimo... te platico los componentes que utilicé y el cómo los ligué y también el código:

1. ZQuery llamado Query
2. ClientDataSet llamado CDSDatos
3. DataSetprovider llamado Prov
4. DataSource llamado dsDatos
5. DBGrid llamado Grid

La relación entre ellos es:

1. Prov en su propiedad DataSet -> Query
2. CDSDatos en su propiedad Provider -> Prov
3. dsDatos en su propiedad DataSet -> CDSDatos
4. Grid en su propiedad DataSource -> dsDatos

Coloqué un botón que manda llamar el siguiente código...



delphi
  1. procedure TFormulario2.Button1Click(Sender: TObject);
  2. var
  3. i: Integer;
  4. begin
  5.   cdsDatos.Open;
  6.  
  7.   Query.Close;
  8.   Query.ParamByName('cobo').AsString := ' 1145624';
  9.   Query.Open;
  10.   Query.First;
  11.  
  12.  
  13.   for i := 0 to Query.RecordCount - 1 do
  14.     begin
  15.       cdsDatos.Append;
  16.       cdsDatos.FieldByName('num_cobo').AsString := Query.FieldByName('num_cobo').AsString;
  17.       cdsDatos.FieldByName('num_fact').AsString := Query.FieldByName('num_fact').AsString;
  18.       cdsDatos.Post;
  19.  
  20.       Query.Next;
  21.     end;
  22. end;



Y no tengo ningún problema en visualizar mis facturas en el Grid... algo no estamos haciendo bien por ahí... revísalo sale ? y nos comentas...  (y)

Saludox ! :)


  • 0

#16 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 agosto 2012 - 01:06

(y) (y) (y) excelente ya con esto vi donde estaba mi problema muchas gracias por tu tiempo en ayudarme  (b)
  • 0

#17 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 20 agosto 2012 - 02:06

Y dónde estaba el detalle amigo ???  ^o| *-)

Saludox ! :)
  • 0

#18 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 agosto 2012 - 02:43

aqui esta el codigo final que me funciono




delphi
  1. procedure TForm4.folioKeyPress(Sender: TObject; var Key: Char);
  2. var i:integer;
  3. begin
  4.  
  5.   if Key = #13 then
  6. begin
  7.  
  8.     ClientDataSet1.Open;
  9.   query.Close;
  10.     query.SQL.Text := 'select * from entradas where folio=:folio';
  11.     query.Params[0].Value := folio.Text;
  12.  
  13.       query.Open;
  14.   Query.First;
  15.  
  16.  
  17.   for i := 0 to Query.RecordCount - 1 do
  18.     begin
  19.       ClientDataSet1.Append;
  20.  
  21.     ClientDataSet1.FieldByName('fecha').value:= query.FieldByName('fecha').Value;
  22.     ClientDataSet1.FieldByName('codigo').value:= query.FieldByName('codigo').Value;
  23.     ClientDataSet1.FieldByName('nombre').value:= query.FieldByName('nombre').Value;
  24.       ClientDataSet1.FieldByName('unidad').value:= query.FieldByName('unidad').Value;
  25.       ClientDataSet1.FieldByName('cantidad').value:= query.FieldByName('cantidad').Value;
  26.       ClientDataSet1.FieldByName('precio').value:= query.FieldByName('precio').Value;
  27.         ClientDataSet1.FieldByName('importe').value:= query.FieldByName('importe').Value;
  28.       ClientDataSet1.Post;
  29.  
  30.       Query.Next;
  31.     end;
  32.  
  33.     begin
  34.       if Key = #13 then
  35.     begin
  36.         Key := #0;
  37.         Perform(WM_NEXTDLGCTL, 0, 0)
  38.  
  39.  
  40.       end
  41.     end;
  42.   end
  43.  
  44. end;


  • 0




IP.Board spam blocked by CleanTalk.