Actualizar dbgird

Inserto con un adoquery con parámetros en tiempo de ejecución, pero el dbgrid no me actualiza los datos, es decir no me muestra el valor que e ingresado, ¿cómo pudo hacer que el dbgrid lo muestre? ¿Solo cuando cierrro mi programa, al volverlo a abrir muestra el dato anteriormente ingresado .
Este es el código que uso para ingresar datos a la tabla
//***************************INSERTAR*****************************
procedure tform1.insertar();
begin
with adoquery1 do
begin
try
close;
SQL.clear;
//campos de la base de datos
SQL.add('INSERT INTO tabla1(número,nombre,dirección,anexos,adicional)');
//variables en sql
SQL.add('VALUES(:memo2,:m3,:m4,:m5,:m6)');
//para pasar parametro en una setencia de sql por medio de ado creo que se escribe asi:parameters
parameters[0].value:= edtnumero.text;
parameters[1].value:= edtnombre.text;
parameters[2].value:= edtdireccion.text;
parameters[3].value:= edtanexo.text;
parameters[4].value:= mmadicional.text;
ExecSQL;
update;
//open;
//Refresh;
except
end;
end;
end;

3 Respuestas

Respuesta
1
Hi,
Mira, el problema que estas teniendo es muy común. Lo que pasa es que cuando actualizas una tabla se tiene que tener en cuente que cuando utilizas comando SELECT, para mostrar los datos en una dbgrid, tienes que hacer un Open en el TQuery correspondiente a la dbgrid o setear la propiedad Active a TRUE.
Cuando haces el INSERT la actualización se genera perfectamente pero tienes que cerrar y abrir el objeto que referencie la tabla para la dbgrid.
Nahuelon..
Respuesta
1
Yo lo que haría sería refrescar la tabla, pero como con ADO no está demasiado bien implementado, lo más fácil es que la cierres y la vuelvas a abrir:
tabla.active:=False;
tabla.active:=True;
Respuesta
1
Puajjj, usas ADO, no deberia responderte esta pregunta, pero bue...
Supongo que sabes sobre esto
ADOConnection1.BeginTrans;
ADOConnection1.CommitTrans;
ADOConnection1.RollbackTrans;
y que usas un ADOConnection por cada tabla o query
Ante que nada voy a suponer que tenes asi los componentes
//Esto hace que cuando se actualize la tabla se vean los cambios
ADOConnection.IsolationLevel := ilReadCommitted;
//Esta es la modificación de tu codigo
procedure TForm1.Insertar;
begin
With ADOQuery1 do
begin
Try
//Close;
SQL.clear;
//campos de la base de datos
SQL.add('INSERT INTO tabla1(número,nombre,dirección,anexos,adicional)');
//variables en sql
SQL.add('VALUES(:memo2,:m3,:m4,:m5,:m6)');
//Para pasar parámetro en una sentencia de sql por medio de ado creo que se escribe así:parameters
parameters[0].value:= edtnumero.text;
parameters[1].value:= edtnombre.text;
parameters[2].value:= edtdireccion.text;
parameters[3].value:= edtanexo.text;
parameters[4].value:= mmadicional.text;
ExecSQL;
update;
except
end;
end;
end;
Espero haberte ayudado ya que NUNCA use ADO y creo que NUNCA lo voy hacer.
Sorry me mande un Moco acá va el correcto
Puajjj, usas ADO, no deberia responderte esta pregunta, pero bue...
Supongo que sabes sobre esto
ADOConnection1.BeginTrans;
ADOConnection1.CommitTrans;
ADOConnection1.RollbackTrans;
y que usas un ADOConnection por cada tabla o query
Ante que nada voy a suponer que tenes asi los componentes
//Esto hace que cuando se actualize la tabla se vean los cambios
ADOConnection.IsolationLevel := ilReadCommitted;
//Esta es la modificación de tu codigo
procedure TForm1.Insertar;
begin
with ADOQuery1 do
begin
try
//No te conviene usar el close sino cerrar la transaccion
//que por defecto cierra la tabla
//close;
If ADOQuery1.Connection.InTransaction Then
Begin
ADOQuery1.Connection.CommitTrans;
End;
//Esto esta bien pero si siempre insertas lo mismo es al pedo
SQL.clear;
//Revisa si es como te digo esto esta al pedo
//campos de la base de datos
SQL.add('INSERT INTO tabla1(número,nombre,dirección,anexos,adicional)');
//Revisa si es como te digo esto esta al pedo
//variables en sql
SQL.add('VALUES(:memo2,:m3,:m4,:m5,:m6)');
//Esto si va
//Para pasar parámetro en una sentencia de sql por medio de ado creo que se escribe así:parameters
parameters[0].value:= edtnumero.text;
parameters[1].value:= edtnombre.text;
parameters[2].value:= edtdireccion.text;
parameters[3].value:= edtanexo.text;
parameters[4].value:= mmadicional.text;
ExecSQL;
except
//Seria Bueno que si ocurre un error avises del mismo
//De paso ves si realmente lo inserto
ShowMessage('ERROR al insertar Registro')
end;
//Aca grabo y cierro la transaccion
//indispensable para que los datos se reflejen en la otra consulta
If ADOQuery1.Connection.InTransaction Then
Begin
ADOQuery1.Connection.CommitTrans;
End;
//Aca tenes que actualizar la consulta del Dbgrid
end;
end;
Espero haberte ayudado ya que NUNCA use ADO y creo que NUNCA lo voy hacer.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas