PDA

Ver la Versión Completa : limpiar dbgrid


edgar_prospero
15-08-2012, 23:42:48
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 (http://www.clubdelphi.com/foros/showthread.php?t=69061). (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:

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

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


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:

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