Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2010
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Problema con módulo web y conexiones ADO dentro de una DLL

Buenas compañeros foreros, les cuento mi problema

La Situación: hice una DLL que hace un reporte según unos parámetros que se le proporcionan, la librería exporta una función que recibe como parámetro único un string (lo recibo en PChar) y devuelvo otro (de la misma forma PChar). Esta DLL funciona bien en aplicaciones de escritorio, pero en un módulo para Apache que necesito hacer me devuelve un error EOleSysError.

El Código

La DLL
Código Delphi [-]
library run;

uses
  SysUtils,
  Classes,
  UAlmacen in '..\UAlmacen.pas' {Almacen: TDataModule},
  UContenido in '..\UContenido.pas',
  UDatos in '..\UDatos.pas';

{$R *.res}

function Requiero(Pedido:PChar):PChar stdcall; export;
var Contenido : TContenido;
    Almacen : TAlmacen;
    respuesta : string;
begin
  Contenido := TContenido.Create;
  Almacen := TAlmacen.Create(nil);
  try
    Contenido.Almacen := Almacen;
    Contenido.pedido := Pedido;
    respuesta := contenido.respuesta;
    result := PChar(respuesta);
  finally
    //Contenido.Free;
    Almacen.Free;
  end;
end;

exports
  Requiero;

begin
  // Código de inicialización
end.

Una de las aplicaciones "standalone" que funcionan bien
Código Delphi [-]
unit UPrincipal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Panel1: TPanel;
    Label1: TLabel;
    Button1: TButton;
    Splitter1: TSplitter;
    edit1: TComboBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Requiero(pedido:PChar):PChar stdcall; external 'C:\Program Files (x86)\Apache Group\Apache2\modules\run.dll' name 'Requiero';

procedure TForm1.Button1Click(Sender: TObject);
var aux : string;
    arch : TStringList;
begin
  arch := TStringList.Create;
  try
    aux := Requiero(PChar(edit1.Text));
    arch.Text := aux;
    arch.SaveToFile('Respuesta.htm');
    WebBrowser1.Navigate('..\run!\prueba run\Respuesta.htm');
  finally
    arch.Free;
  end;
end;

end.

El módulo que no funciona
El Proyecto
Código Delphi [-]
library rDyn;

uses
  WebBroker,
  ApacheTwoApp,
  UCentral in 'UCentral.pas' {WebModule1: TWebModule};

{$R *.res}

{$E so}
{$LIBPREFIX 'mod_'}

exports
  apache_module name 'rDyn_module';

begin
  Application.Initialize;
  Application.CreateForm(TWebModule1, WebModule1);
  Application.Run;
end.

El Web Module
Código Delphi [-]
unit UCentral;

interface

uses
  SysUtils, Classes, HTTPApp;

type
  TWebModule1 = class(TWebModule)
    procedure WebModule1runAction(Sender: TObject; Request: TWebRequest;
      Response: TWebResponse; var Handled: Boolean);
  private
  public
    { Public declarations }
  end;

  function Requerimiento(Pedido:PChar):PChar;stdcall; external 'run.dll' name 'Requiero';

var
  WebModule1: TWebModule1;

implementation

uses UContenido;

{$R *.dfm}

procedure TWebModule1.WebModule1runAction(Sender: TObject; Request: TWebRequest;
  Response: TWebResponse; var Handled: Boolean);
var aux,aux2:string;
begin
  aux2 := Request.Query;
  aux:=Requerimiento(PChar(aux2));
  Response.Content := aux;
end;

end.

Esto lo agregué en la configuración de Apache (httpd.conf)
Código:
LoadModule rDyn_module modules/mod_rDyn.so
<Location /rDyn>
  SetHandler mod_rdyn-handler
</Location>
El error que me da


Googleando me encontré que varios tienen el mismo problema (DLL que se conectan a BD mediante ADO y que funcionan en un exe pero no en un módulo web), pero ninguno proporciona una solución.

Utilizo conexiones ADO y Firebird ODBC Driver v2.0
Windows 7 (64 bits) - Delphi 2010 - Firebird 2.5 (x64)

Perdón por el tocho-post pero quería ser bien específico.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema TSqlconnection, Datasets y conexiones persistentes Edgtho Conexión con bases de datos 0 22-04-2009 16:45:24
Problema al remplazar una substring dentro de una string gulder Varios 2 24-11-2008 19:51:24
Problema con Insert dentro de Evento BeforePost Jvilomar Conexión con bases de datos 2 21-11-2007 16:31:12
Problema con el manejo de las ventanas dentro de la aplicacion maxibaco Varios 2 28-11-2006 20:01:09
Problema con eventos dentro de un SP Choclito Firebird e Interbase 2 08-02-2006 15:30:36


La franja horaria es GMT +2. Ahora son las 20:36:35.


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
Copyright 1996-2007 Club Delphi