Ver Mensaje Individual
  #3  
Antiguo 05-03-2013
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 947
Reputación: 25
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por Eduardo Mendoza Ver Mensaje
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 [-]
{-----------------------------------------------------------------------}
{                          START DLL CODE                               }
{-----------------------------------------------------------------------}

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';  {Some New DBName ie Alias}
      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.


{-----------------------------------------------------------------------}
{                            START APP CODE                             }
{-----------------------------------------------------------------------}
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
Responder Con Cita