Tome en cuenta tus concejos. No se q pasa ahora
Publicado por Cernidita (11 intervenciones) el 09/03/2006 16:22:29
Muchas gracias por el concejo, y lo puse en practica, pero mira lo que pasa ahora. Para ser clara tengo dudas de como descargar el dll de memoria, por que en un principio cuando inicio mi aplicacion empieza con unos KB digamos 1002 kB en memoria y cuando hago uso de la dll se incrementa a unos 6890 k y de ahi no baja (prove ejecutando paso a paso mi aplicacion y vi como cambia el uso de memoria), eh probado varias intrucciones para reducir la memoria utilizada. Haber explico lo que hizo con detalles:
Eh creado una libreria con tres procedimientos uno para conectar un control TADODataSet a una base datos echa en visual foxpro, otro procedimiento para realizar la consulta y el tercero para que utilice las dos anteriores procedimientos. Ninguna me retorna ningun dato, pero si envio el control TADODataSet para hacer la operaciones. ejem:
// libreria dll
procedure ConectaDB(PathDB: string; CnnC: TADODataSet);
begin
with CnnC do begin
Active:=False;
ConnectionString:=strPathDBU;
end;
end;
procedure aRealizaQuery(sQueryU: String; ADOds: TADODataSet);
begin
with ADOds do CommandText:=sQueryU;
end;
procedure CnnQuery(dsU: TADODataSet; phtSisL, strQuery: String); stdcall; Export;
begin
aConectaDB(phtSisL + 'dBase\', dsU);
aRealizaQuery(strQuery, dsU);
end;
.....
y en mi programa principal pongo lo siguiente:
Type
TCnnQuery = procedure(dsU: TADODataSet; phtSisL, strQuery: String); stdcall;
var
......
hLib: THandle;
CnnQuery: TCnnQuery;
.....
// en el evento create del form principal, extraigo un dato de la BD.
procedure TfrmTipoC.FormCreate(Sender: TObject);
var
dsF: TADODataSet;
begin
pthSys:=ExtractFilePath(Application.ExeName);
hLib:=0;
hLib:=safeLoadLibrary('dbpros.dll');
CnnQuery:=GetProcAddress(hLib, 'CnnQuery');
dsF:=TADODataSet.Create(Nil);
CnnQuery(dsF, pthSys, 'Select cambio from tipcambiosc');
with dsF do
begin
Active:=True;
if Recordset.Eof <> True then
begin
Recordset.MoveLast;
edTipoC.Text:=FormatFloat('0.00', Recordset.Collect[0]);
end;
Active:=False; dsF.ConnectionString:=''; dsF.Free;
end;
dsF:=Nil;
CnnQuery:=nil;
FreeLibrary(hLib);
FreeAndNil(CnnQuery);
FreeAndNil(dsF);
end;
y bueno como se ve eh utilizado mas de una intrucciones para reducir la memoria utilizada, pero nada sigue igual. Y eso que espere unos minutos para ver talves baja de apoco pero nada se queda ahi. Y no se si estoy haciendo algo mal (Soy novata), o es algun problema de mi XP, o
talves necesita un parche mi Delphi( version 7 Enterprise).
Espero respuestass, por fa......
Eh creado una libreria con tres procedimientos uno para conectar un control TADODataSet a una base datos echa en visual foxpro, otro procedimiento para realizar la consulta y el tercero para que utilice las dos anteriores procedimientos. Ninguna me retorna ningun dato, pero si envio el control TADODataSet para hacer la operaciones. ejem:
// libreria dll
procedure ConectaDB(PathDB: string; CnnC: TADODataSet);
begin
with CnnC do begin
Active:=False;
ConnectionString:=strPathDBU;
end;
end;
procedure aRealizaQuery(sQueryU: String; ADOds: TADODataSet);
begin
with ADOds do CommandText:=sQueryU;
end;
procedure CnnQuery(dsU: TADODataSet; phtSisL, strQuery: String); stdcall; Export;
begin
aConectaDB(phtSisL + 'dBase\', dsU);
aRealizaQuery(strQuery, dsU);
end;
.....
y en mi programa principal pongo lo siguiente:
Type
TCnnQuery = procedure(dsU: TADODataSet; phtSisL, strQuery: String); stdcall;
var
......
hLib: THandle;
CnnQuery: TCnnQuery;
.....
// en el evento create del form principal, extraigo un dato de la BD.
procedure TfrmTipoC.FormCreate(Sender: TObject);
var
dsF: TADODataSet;
begin
pthSys:=ExtractFilePath(Application.ExeName);
hLib:=0;
hLib:=safeLoadLibrary('dbpros.dll');
CnnQuery:=GetProcAddress(hLib, 'CnnQuery');
dsF:=TADODataSet.Create(Nil);
CnnQuery(dsF, pthSys, 'Select cambio from tipcambiosc');
with dsF do
begin
Active:=True;
if Recordset.Eof <> True then
begin
Recordset.MoveLast;
edTipoC.Text:=FormatFloat('0.00', Recordset.Collect[0]);
end;
Active:=False; dsF.ConnectionString:=''; dsF.Free;
end;
dsF:=Nil;
CnnQuery:=nil;
FreeLibrary(hLib);
FreeAndNil(CnnQuery);
FreeAndNil(dsF);
end;
y bueno como se ve eh utilizado mas de una intrucciones para reducir la memoria utilizada, pero nada sigue igual. Y eso que espere unos minutos para ver talves baja de apoco pero nada se queda ahi. Y no se si estoy haciendo algo mal (Soy novata), o es algun problema de mi XP, o
talves necesita un parche mi Delphi( version 7 Enterprise).
Espero respuestass, por fa......
Valora esta pregunta
0