Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   limpiar dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=79851)

edgar_prospero 15-08-2012 23:42:48

limpiar dbgrid
 
que hay amigos aqui con un problema aver si pueden echarme la mano, tengo un dbgrid al cual le voy agregando registros y al ultimo mediante un boton los guardo en mi base dedatos hasta ahi todo bien, mi problema empieza cuando cierro el programa y lo vuelvo a abrir ya que la informacion de la base de datos me aparece en el dbgrid, quisiera que me apareciera sin informacion para meter nuevos registros mi base de datos esta en mysql

Casimiro Notevi 16-08-2012 00:09:16

El dataset asociado al datasource que tiene el dbgrid tendrá un 'select' que se trae datos, o es una tabla y está abierta.

edgar_prospero 16-08-2012 00:12:35

el dbgrid esta ligado a un datasource y el datasource esta ligado a un mytable, asi que me imagino que siempre esta abierto

ecfisa 16-08-2012 00:18:22

Hola Edgard.

Como te menciona Casimiro, un TDBGrid está relacionado por su propiedad DataSource con un conjunto de datos que reside en una tabla o consulta mediante un TDataSource. Si abres tu DataSet y la relación que te mencioné arriba está establecida, indefectiblemente mostrará los datos que existan en el DataSet.

Una de las soluciónes sería asociar al TDBGrid un TClientDataSet en memoria y al finalizar el ingreso volcar los datos al TDataSet. Un ejemplo de su uso en memoria Búsqueda de archivos ordenada por fecha. (Encontrarás más en la búsqueda de los foros)

Otra podría ser asociar al TDBGrid un TDataSet temporal para ingresar los datos, vaciándolo después de haber volcado el contenido al DataSet definitivo.

De ambos modos siempre verás el DBGrid vacío al iniciar las inserciones. Pero esto tiene sus complicaciones... Por ejemplo a la hora de verificar si un dato que se está ingresando ya existe en el DataSet.

Saludos.

edgar_prospero 16-08-2012 00:45:22

ya le intente de la manera que me dicen y meto el primer registro al dbgrid pero cuanto intento meter el segundo me marca un error que idce "cliente dataset1: cannot perform this operation on an open dataset" este es el codigo del problema:

Código Delphi [-]
form4.ClientDataSet1.CreateDataSet;
form4.ClientDataSet1.Open;

  

 form4.ClientDataSet1.Append;
    
   form4.ClientDataSet1.FieldByname('fecha').AsDateTime := form4.fecha.Date;
     form4.ClientDataSet1.FieldByname('codigo').AsString := codigo.Text;
    form4.ClientDataSet1.FieldByName('nombre').AsString  := nombre.Text;
   form4.ClientDataSet1.FieldByName('unidad').AsString  := unidad.Text;
   form4.ClientDataSet1.FieldByName('cantidad').AsString := cantidad.Text;
   form4.ClientDataSet1.FieldByName('precio').AsString  := precio.Text;
   form4.ClientDataSet1.FieldByName('importe').AsString  := floatToStr( StrTofloat(cantidad.Text) * StrTofloat(precio.Text) );
   form4.ClientDataSet1.Post;

edgar_prospero 16-08-2012 02:38:24

ya logre solucionarlo era un error mio tenia que poner en el evento on create
Código Delphi [-]
form4.ClientDataSet1.CreateDataSet;
form4.ClientDataSet1.Open;

pero ahora me surgio otro problema jeje ya me pasa los registros que necesite al db grid pero al guardarlos si tengo 3 registros nomas me guarda el ultimo registro en mi base de datos en mysql este es el codigo con el que intento guardarlo ojala me puedan ayudar

Código Delphi [-]
begin
  DBGrid1.DataSource.DataSet.First; 
  While not (DBGrid1.DataSource.DataSet.Eof) Do
  begin
    query.Close;
    query.SQL.Clear;
    query.SQL.Add('INSERT INTO entradas (codigo, nombre, unidad, cantidad, precio, importe)');
    query.SQL.Add('VALUES ( : pcodigo,: pnombre, : punidad, 
      :pcantidad, :pprecio, :pimporte )');
    //query.SQL.Add('on duplicate key update (serie=:pserie, fecha=:pfecha)');

    query.ParamByName('pcodigo').Value:=DBGrid1.DataSource.DataSet.FieldByName('codigo').value;
    query.ParamByName('pnombre').Value:=DBGrid1.DataSource.DataSet.FieldByName('nombre').value;
    query.ParamByName('punidad').Value:=DBGrid1.DataSource.DataSet.FieldByName('unidad').value;
    query.ParamByName('pcantidad').Value:=DBGrid1.DataSource.DataSet.FieldByName('cantidad').value;
    query.ParamByName('pprecio').Value:=DBGrid1.DataSource.DataSet.FieldByName('precio').value;
    query.ParamByName('pimporte').Value:=DBGrid1.DataSource.DataSet.FieldByName('importe').value;
    DBGrid1.DataSource.DataSet.Next;
    query.ExecSQL;

ecfisa 16-08-2012 03:59:17

Hola.

Probá en este órden:
Código Delphi [-]
  DBGrid1.DataSource.DataSet.First; 
  While not (DBGrid1.DataSource.DataSet.Eof) Do
  begin
    ...
    query.ExecSQL;
    DBGrid1.DataSource.DataSet.Next;
  end;

Saludos.

edgar_prospero 16-08-2012 19:24:04

gracias eficsa ahi estaba el asunto jeje con tu sugerencia ahora si ya estuvo todo bien de nuevo gracias


La franja horaria es GMT +2. Ahora son las 16:20:13.

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