Cita:
Empezado por Eduardo Mendoza
Hola gente espero que alguien me pueda ayudar con algun tip, tengo una aplicacion en Delphi 2007 donde me conecto a una base de datos (Oracle) esta aplicacion toma algunas desiciones y dependiendo de esto ejecuta otro programa que utiliza la misma conexión, sin embargo no quiero abrir mas sesiones a la base de datos por efecto de eficientar los recursos. Conocen alguna manera sencilla de pasarle este componente ya instanciado a esta segunda aplicación?
|
Creo que compartir la conexión entre aplicaciones no se podría, Pero entre una Aplicación y una DLL si se puede...
Esto va a depender de si tú segunda aplicación la puedes convertir en una DLL.
La idea es que la función que llames desde la DLL tiene que recibir el puntero a la conexión de la base de datos...
Código Delphi
[-]
library testdll;
uses
bde, db, dbtables, dialogs;
procedure myDLLCall(dbHandle : hdbidb); stdcall;
var
Database : TDatabase;
Query : TQuery;
begin
Database := TDatabase.Create(nil);
try
Database.DatabaseName := 'Brad';
Database.Handle := dbHandle;
Query := TQuery.Create(nil);
try
Query.DatabaseName := Database.DatabaseName;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT SYSDATE FROM DUAL');
Query.Open;
ShowMessage(Query.FieldByName('SYSDATE').AsString);
finally
Query.Free;
end;
finally
Database.Free;
end;
exports
myDllCall;
begin
end.
unit appl;
uses
Windows, Messges, SysUtils, Classes, Graphics, Contrils,
Forms, Dialogs, StdCtrls, DB, BDE;
type
TForm1 = class(TForm)
dbOracle : TDatabase;
Button1 : TButton;
procedure Button1Click(Sender : TObject);
end;
var
Form1 : TForm;
procedure myDllCall(dbHandle : hdbidb); stdcall; external 'TESTDLL.DLL'
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender : TObject);
begin
dbOracle.Open;
myDllCall(dbOracle.Handle);
end;
Buscando entre mis cachureos encontre este código...
Nunca lo he usado...
Espero te ayuda...
Yo lo realizo con componentes IBX y FIBPLus atacando Firebird....
Saludos cordiales