Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   agregar registros de tedit a dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=79838)

edgar_prospero 14-08-2012 18:54:08

agregar registros de tedit a dbgrid
 
que hay aqui con un problemilla para ver si me pueden echar la mano resulta que en un form5 tengo varios tedit los cuales quiero llenar y mediante un boton mandar ea informacion al form4 donde tengo un dbgrid, entonces qiero meter los registros que yo vaya necesitando, pero no lo e podido lograr este es el codigo con el que estoy intentando pero no me inserta nada de informacion:


Código Delphi [-]
procedure TForm5.guardarClick(Sender: TObject);
begin
form4.tabla.close();
 form4.tabla.SQL.Text := 'select * from entradas where codigo=:codigo';
  form4.tabla.Params[0].Value := codigo.Text;

    form4.tabla.Open;

 codigo.Text:=form4.dbgrid1.DataSource.DataSet.FieldByName('codigo').AsString;
 nombre.Text:=form4.dbgrid1.DataSource.DataSet.FieldByName('nombre').AsString;
 cantidad.Text:=form4.dbgrid1.DataSource.DataSet.FieldByName('cantidad').AsString;
 precio.Text:=form4.dbgrid1.DataSource.DataSet.FieldByName('precio').AsString;

edgar_prospero 14-08-2012 19:28:51

ya logre insertar un registro pero ahora mi problema es que si inserto otro nuevo me sustituye el primero, como le puedo hacer para agregar varios registros aqui va mi codigo de lo que llevo

Código Delphi [-]
form4.tabla.close();
 form4.tabla.SQL.Text := 'select * from entradas where codigo=:codigo';
  form4.tabla.Params[0].Value := codigo.Text;
    form4.tabla.Open;
      form4.tabla.Insert;


     form4.tabla.FieldByName('codigo').asString:=codigo.text;
     form4.tabla.FieldByName('unidad').asString:=unidad.text;
     form4.tabla.FieldByName('nombre').asString:=nombre.text;
     form4.tabla.FieldByName('unidad').asString:=unidad.text;
     form4.tabla.FieldByName('cantidad').asString:=cantidad.text;
     form4.tabla.FieldByName('precio').asString:=precio.text;
     form4.tabla.FieldByName('importe').asString:=importe.text;

ecfisa 14-08-2012 19:50:27

Cita:

Empezado por edgar_prospero (Mensaje 439574)
ya logre insertar un registro pero ahora mi problema es que si inserto otro nuevo me sustituye el primero, como le puedo hacer para agregar varios registros

Hola Edgar.

Proba de este modo:
Código Delphi [-]
 with Form4.Tabla do
  begin
    Close;
    SQL.Text:= 'select * from entradas'; 
    Open;
    Append;
    FieldByname('codigo').AsString    := codigo.Text
    FieldByName('nombre').AsString    := nombre.Text;
    FieldByName('Continent').AsString := cantidad.Text;
    FieldByName('Area').AsString      := precio.Text
    Post;
    ...
  end;
Si estas añadiendo datos, la sentencia
Código SQL [-]
select * from entradas where codigo=:codigo
carece de sentido si el código no existe, o bién sobreescribe los datos si este existe.

Saludos.

Casimiro Notevi 14-08-2012 19:54:48

¿Pero qué quieres hacer?, creo que estás confundido.

edgar_prospero 14-08-2012 19:57:40

a lo mejor no me e explicado bien tengo varios edit los cuales lleno y quieros mandar la informacion a un dbgrid con lo que me dijo ecfisa
ya lo logre pero nomas puedo pasar un regsitro al dbgrid si pongo otro lo quiere poner donde mismo que el primero no se brinca al segundo

ecfisa 14-08-2012 20:19:43

Cita:

Empezado por edgar_prospero (Mensaje 439580)
a lo mejor no me e explicado bien tengo varios edit los cuales lleno y quieros mandar la informacion a un dbgrid con lo que me dijo ecfisa
ya lo logre pero nomas puedo pasar un regsitro al dbgrid si pongo otro lo quiere poner donde mismo que el primero no se brinca al segundo

Hola.

Para agregar registros debería bastarte con este código:
Código Delphi [-]
  with Form4.Tabla do
  begin
    Open; // (Necesario solo si la tabla esta cerrada)
    Append;
    FieldByname('codigo').AsString    := codigo.Text
    FieldByName('nombre').AsString    := nombre.Text;
    FieldByName('Continent').AsString := cantidad.Text;
    FieldByName('Area').AsString      := precio.Text
    Post;
    Close; // (Solo si deseas cerrar la tabla al finalizar la inserción )
  end;
La línea
Código Delphi [-]
   SQL.Text:= 'select * from entradas';
Es solo necesaria si la sentencia SQL no fué definida con anterioridad.

Saludos.

edgar_prospero 14-08-2012 20:24:57

efectivamente con ese codigo si me muestra la informacion en el dbgrid pero solo el primer registro si pongo otro registro no me lo muesta en el dbgrid y es lo que quiero lograr primero ingresar los registros que necesite en el dbgrid y ya despues ahora si guardarlos en la base de datos. a lo mejor ahi esta la clave para explicarme mejor que primero quiero ir agregando los registros a mi dbgrid y ya despues por ,medio de un bton guardarlos en mi base de datos

ecfisa 14-08-2012 20:58:53

Hola Edgar.

Cita:

quiero ir agregando los registros a mi dbgrid y ya despues por ,medio de un bton guardarlos en mi base de datos
Ahí esta tu confusión, del modo que lo trabajas, lo que ves en el TDBGrid es lo que ya fué almacenado en tu BD.

Para realizar lo que deseas tendrías que usar CachedUpdates, un TClientDataSet ,o también podrías valerte de un TStringGrid (aunque lo creo más complicado de usar).

¿ Que componentes y que SGBD estas utilizando ?

Saludos.

edgar_prospero 14-08-2012 21:05:50

pues de componentes no tengo muchos uso rx, mysql access y la base de datos la trabajo en mysql y creo que si ando un poco perdido jeje ojala me puedas orientar

ecfisa 14-08-2012 21:25:15

Hola Edgar.

No conozco los componentes RX, pero supongo que a grandes rasgos el pequeño código de ejemplo que te pongo tendría que funcionar.
Código Delphi [-]
// Activar CachedUpdates, abrir Table4
procedure TForm1.FormCreate(Sender: TObject);
begin
  with Form4.Table4 do
  begin
    CachedUpdates := True;
    SQL.Text      := 'SELECT * FROM ENTRADAS';
    Open
  end;
end;

// Mostrar en el DBGrid
procedure TForm1.btAgregarAlGridClick(Sender: TObject);
begin
  with Form4.Table4 do
  begin
    Append;
    FieldByname('Nivel').AsString := codigo.Text;
    FieldByName('Texto').AsString := nombre.Text;
    ...
    Post
  end
end;

// Aplicar lo insertado
procedure TForm1.btnAplicarClick(Sender: TObject);
begin
  Form4.Table4.ApplyUpdates
end;

// Cancelar lo insertado
procedure TForm1.btnCancelarClick(Sender: TObject);
begin
  Form4.Table4.CancelUpdates
end;

// Desactivar CachedUpdates, cerrar Table4
procedure TForm1.FormDestroy(Sender: TObject);
begin
  with Form4.Table4 do
  begin
    CachedUpdates:= False;
    Close;
  end;
end;

Saludos.

edgar_prospero 14-08-2012 21:47:55

excelente respuesta justo lo que andaba buscando, pero ahora al cerrar el programa me marca un error tabla: cannot perform this operation on an open dataset, pero solo cuando ya cierro elprograma me marca este error

ecfisa 14-08-2012 21:52:26

Hola Edgar.

El error fue mío por haber escrito el código en el aire... :o

Donde dice:
Código Delphi [-]
  with Form4.Table4 do
  begin
    CachedUpdates:= False;
    Close;
  end;
Tendría que decir:
Código Delphi [-]
  with Form4.Table4 do
  begin
    Close;
    CachedUpdates:= False
  end;

Saludos.

edgar_prospero 15-08-2012 00:23:17

gracias por tu respuesta ecfisa me fue de gran ayuda ya tenia tiempo atorado con este problema ^\||/ y gracias a los demas que respondieron

edgar_prospero 15-08-2012 01:52:33

creo que cante victoria muy pronto nomas me guarda un registro en mi base de datos si pongo 3 registros y voy a la base de datos nomas guardo el ultimo y los otros 2 no aparecen

ecfisa 15-08-2012 02:39:05

Cita:

Empezado por edgar_prospero (Mensaje 439617)
creo que cante victoria muy pronto nomas me guarda un registro en mi base de datos si pongo 3 registros y voy a la base de datos nomas guardo el ultimo y los otros 2 no aparecen

Hola.

Es muy probable que te hayas olvidado de presionar el botón que guarda los datos en caché.

De este modo es mas difícil que eso suceda:
Código Delphi [-]
// Activar CachedUpdates, abrir Table4
procedure TForm1.FormCreate(Sender: TObject);
begin
  with Form4.Table4 do
  begin
    CachedUpdates := True;
    SQL.Text      := 'SELECT * FROM ENTRADAS';
    Open
  end;
end;

// Mostrar en el DBGrid
procedure TForm1.btnAgregarAlGridClick(Sender: TObject);
begin
  with Form4.Table4 do
  begin
    Append;
    FieldByname('Nivel').AsString := codigo.Text;
    FieldByName('Texto').AsString := nombre.Text;
    ...
    Post
  end
end;

...

// Al salir: ¿ Hay datos pendientes  en caché ? => preguntar si desea guardar
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
const
   UTYPE = MB_ICONQUESTION or MB_APPLMODAL or MB_DEFBUTTON1 or MB_YESNO;
begin
  if Form4.Table4.UpdatesPending and
   (MessageBox(Handle, '¿ Guarda los cambios ?', '', UTYPE) = IDYES) then
     Form4.Table4.ApplyUpdates
end;

...

// Desactivar CachedUpdates, cerrar Table4
procedure TForm1.FormDestroy(Sender: TObject);
begin
  with Form4.Table4 do
  begin
    Close;
    CachedUpdates:= False
  end
end;

Saludos.

edgar_prospero 15-08-2012 03:02:30

gracias ahora si lo guardo, pero hay te va parte completo de lo que quiero hacer mira enel form tengo para capturar un folio y una fecha y en el dbgrid la demas informacion que ponia arriba mi pregunta es com puedo hacer para ligar voy a tratar de explicarme por ejemplo tengo el folio 1con fecha de hoy y capturo 2 registros en el dbgrid ahora si los guardo y quiero que esos 2 registros del datagrid me aparesca con el folio 1 y fecha de hoy que capture

ecfisa 15-08-2012 03:49:48

Hola Edgar.

Hay dos cosas que no me quedan claro:
  1. Sería bueno que especificaras bién que datos y en que órden deseas hacer la unión. Por Ej. FECHA + FOLIO + CODIGO + ... ¿ Deseas algún separador entre ellos ?
  2. ¿ Donde queres que aparezcan esos 2 registros con el folio y fecha ?

Saludos.

edgar_prospero 15-08-2012 16:58:05

bueno voy a tratar de explicar lo que quiero, al entrar al form tengo que capturar 2 datos en 2 tedit los cuales son folio y fecha de ahi me voy al dbgrid y mediante click derecho me abre un menu el cual selecciono agegar registros y me abre otro form con lo cual lleno la informacion con codigo, unidad, nombre, cantidad, precio, total, y mediante un boton voy agregando los registros al dbgrid (ya eso lo logre gracias a tu ayuda), ya que tengo la informacion quiero por un boton guardar toda esa informacion en una base de datos llamada entradas, quiero que folio y fecha se agregue a todos los registros que guarde del dbgrid, es para un control por ejemplo de esos productos que se guarden lleven el mismo folio y fecha espero haberme explciado un poco

ecfisa 15-08-2012 18:33:24

Hola Edgard.

Si, creo que te entiendo.

Ahora la pregunta es, en el DataSet relacionado al DBGrid ¿ Existen los campos como para almacenar esos datos ?

Saludos.

edgar_prospero 15-08-2012 18:35:32

hola
si si estan los campos ligados para guardar lo que necesito en eso no habria problema


La franja horaria es GMT +2. Ahora son las 21:28:03.

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