Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas para actualizar ADO con Dbgrid con puro Codigo (https://www.clubdelphi.com/foros/showthread.php?t=24509)

JanoRod 23-08-2005 23:15:30

Problemas para actualizar ADO con Dbgrid con puro Codigo
 
Hola A todos los maestros, me gustaria saber si alguien me podria ayudar de como poder actualizar el dbgrid con puro codigo, les detallo el siguiente codigo
, lo que no entiendo es cuando realizo todo esto por conexion directa, es decir, sin tantas conecciones funciona todo OK pero al realizarlo esto por codigo no funka :mad: , si alguien sabe cual es mi error porfavor explicarme


los dbgrid los conecto por codigo al igual que los otros controles haciendo la actualizacion adoquery1.close y luego adoquery1.open;

procedure Tmenu_principal.FormCreate(Sender: TObject);
var
conexion:string;
begin
conexion:=('Provider=Microsoft.Jet.Oledb.4.0;Data source=c:\inventario.mdb;Persist Security Info=false');
adoconnection1.ConnectionString :=conexion;
adoconnection1.Open ;
adoquery1.ConnectionString :=conexion;
adoquery1.Open ;
adoquery2.ConnectionString:=conexion;
adoquery2.Open ;
lista.Columns[0].FieldName :='unidad_medida';
lista.Columns[1].FieldName :='descripcion_und';
datasource2.DataSet :=adoquery2 ; //
dbgrid1.DataSource:=datasource2 ;
adoquery2.Close ;
adoquery2.Open ;
end;
procedure Tmenu_principal.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
adoquery1.Close;
with adoquery1 do begin
with adoquery1.SQL do begin
clear;
add (consultaSQL);
end;
open;
end;
if adoquery1.Eof then begin
'<guarda datos>
'aca deberia actualizar dbgrid1 (lista) pero no actualiza en que estoy MAL :mad:
end
else begin
<muestra datos guardados>
end;
end;
end;

si alguien me podria ayudar lo agradeceria
Saludos a Todos ;)

Chente(rMan) 24-08-2005 17:49:21

veamos.
 
Que tal JanoRod, mira de entrada veo que tienes un adoConnection que no se para que lo utilizas si a cada adoquery le vuelves a pasar la cadena de conexion.

Código Delphi [-]
conexion:=('Provider=Microsoft.Jet.Oledb.4.0;Data source=c:\inventario.mdb;Persist Security Info=false');
adoconnection1.ConnectionString :=conexion;
adoconnection1.LoginPrompt := False;
adoconnection1.connected := True;
adoquery1.Connection := adoconnection1
adoquery1.Open ;
adoquery2.Connection := adoconnection1
adoquery2.Open ;


vamos clarificando un poco mas el código.

Código Delphi [-]
with adoquery1 do begin
  Close;
  SQL.clear;
  SQL.add (consultaSQL);
  open;
  //Aqui podrias utilizar algo asi...
  if IsEmpty then
     //lo que quieras hacer...
  else
    //de lo contrario...
end;


Espero por lo menos haberte ayudado un poco en clarificar el código.:)


Saludos.

Vicente López.

JanoRod 24-08-2005 19:40:59

Coneccion Manual Adoconnection
 
Cita:

Empezado por Chente(rMan)
Que tal JanoRod, mira de entrada veo que tienes un adoConnection que no se para que lo utilizas si a cada adoquery le vuelves a pasar la cadena de conexion.

Código Delphi [-]
 conexion:=('Provider=Microsoft.Jet.Oledb.4.0;Data source=c:\inventario.mdb;Persist Security Info=false');
 adoconnection1.ConnectionString :=conexion;
 adoconnection1.LoginPrompt := False;
 adoconnection1.connected := True;
 adoquery1.Connection := adoconnection1
 adoquery1.Open ;
 adoquery2.Connection := adoconnection1
 adoquery2.Open ;


vamos clarificando un poco mas el código.

Código Delphi [-]
 with adoquery1 do begin
   Close;
   SQL.clear;
   SQL.add (consultaSQL);
   open;
   //Aqui podrias utilizar algo asi...
   if IsEmpty then
      //lo que quieras hacer...
   else
     //de lo contrario...
 end;


Espero por lo menos haberte ayudado un poco en clarificar el código.:)


Saludos.

Vicente López.

HOLA VICENTE, EL ADOCONNECTION LO OCUPO PARA LA CONECCION MANUAL DE LA BASE DE DATO SIN OCUPAR EL WIZARD YA QUE ESTE ME DEFINE UN DIRECTORIO ESPECIFICO O FIJO :mad: OCUPANDO EL WIZARD , LA CADENA CONEXION ORIGINAL ES LA SIGUIENTE:

conexion:=('Provider=Microsoft.Jet.Oledb.4.0;Data source='+ExtractFilePath(application.ExeName)+'\inventario.mdb;mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Encrypt Database=True;Jet OLEDB:Compact Without Replica Repair=True;Jet OLEDB:Database Password=jano2969');

Como se muestra el codigo la sintaxis de ExtractFilePath(application.ExeName) me define la ruta donde esta el ejecutable asociado a la base de dato. ahora cuando verifico los datos guardados estan ok pero no asi en el dbgrid que esta conectado en forma manual con codigo :

a esto me refiero cuando es manual o a traves de puro codigo.


dbgrid1.Columns[0].FieldName :='unidad_medida'; // campo 1
dbgrid1.Columns[1].FieldName :='descripcion_und'; // campo 2

datasource2.DataSet :=adoquery2 ;
dbgrid1.DataSource:=datasource2 ;

adoquery2.Close ; // lo cierro
adoquery2.Open ; // lo vuelvo abrir para su supuesta actualizacion


Vicente si sabes alguna manera de saber en que me equivoco te agradeceria la respuesta o algun comentario

de antemano saludos :)

ContraVeneno 24-08-2005 20:59:22

Código Delphi [-]
dbgrid1.DataSource:=datasource2 ;
// campo 1 ¿y si haces esto?
dbgrid1.Columns[0].FieldName :=datasource2.Dataset.Fields[0].Name

Que pasa si lo haces de esa manera????

Ya tienes las actualizaciones del ADO ????

JanoRod 25-08-2005 16:36:31

Gracias Maestro....
 
Cita:

Empezado por JanoRod
HOLA VICENTE, EL ADOCONNECTION LO OCUPO PARA LA CONECCION MANUAL DE LA BASE DE DATO SIN OCUPAR EL WIZARD YA QUE ESTE ME DEFINE UN DIRECTORIO ESPECIFICO O FIJO :mad: OCUPANDO EL WIZARD , LA CADENA CONEXION ORIGINAL ES LA SIGUIENTE:

conexion:=('Provider=Microsoft.Jet.Oledb.4.0;Data source='+ExtractFilePath(application.ExeName)+'\inventario.mdb;mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Encrypt Database=True;Jet OLEDB:Compact Without Replica Repair=True;Jet OLEDB:Database Password=jano2969');

Como se muestra el codigo la sintaxis de ExtractFilePath(application.ExeName) me define la ruta donde esta el ejecutable asociado a la base de dato. ahora cuando verifico los datos guardados estan ok pero no asi en el dbgrid que esta conectado en forma manual con codigo :

a esto me refiero cuando es manual o a traves de puro codigo.


dbgrid1.Columns[0].FieldName :='unidad_medida'; // campo 1
dbgrid1.Columns[1].FieldName :='descripcion_und'; // campo 2

datasource2.DataSet :=adoquery2 ;
dbgrid1.DataSource:=datasource2 ;

adoquery2.Close ; // lo cierro
adoquery2.Open ; // lo vuelvo abrir para su supuesta actualizacion


Vicente si sabes alguna manera de saber en que me equivoco te agradeceria la respuesta o algun comentario

de antemano saludos :)

Hola Vicente gran Master tenias toda la razon estaba un error, ahora la solucion esta todo OK.

Vale Saludos te pasastes.
;)
solo hice los cambios que mencionas y listo.

adoquery1.Connection :=adoconnection1 ;
adoquery1.Open ;

adoquery2.Connection :=adoconnection1 ;
adoquery2.Open ;

y despues actualizo al momento junto a los adoquery1.close ; adoquery1.open;

Chente(rMan) 25-08-2005 18:29:32

Me alegra que se haya solucionado:) , por cierto, no soy master:o , voy aprendiendo igual que todos.;)

Saludos.
Vicente López.


La franja horaria es GMT +2. Ahora son las 01:37:41.

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