Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2012
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Error: Al salir de un programa que llama a un proc de una dll que conecta con BDD

Hola, muy buenas a todos.

Pongo la duda en el hilo de varios porque es un conjunto de cosas y, aunque tengo muy acotado el error, no sé si es exactamente por eso. Bueno, explico:

Con Rad Studio XE2 Delphi Update 1.

He creado un proyecto dll que tiene un procedimiento que conecta con BDD(base de datos), utilizo dbexpress con SqlServer 2005, mediante un TSQLConnection.

Desde otro programa llamo a dicho procedimiento y, en principio, funciona correctamente. El problema viene cuando salgo de este programa, que me da el siguiente error 'access violation at 0x0643e187: read of adress 0x065967f4' y le doy a continuar y me aparece de manera indefinida (hasta que haga ctrl + F2) el siguiente error (con el mismo tipo de excepción C$00000005) 'access violation at 0x02895dd2: read of adress 0x046c8648'.

Sé que con los mensajes de error no se sabe cual es el problema, pero pongo todo por si acaso, sé que son errores de acceso a memoria, pero no sé por donde puede venir.

Pruebas y más información:
1.- Desde la dll se abre un formulario. He probado a abrir el formulario y no hay problema, es sólo cuando hago un "conex.conected(TSQLConnection) := true". Después me aseguro de cerrar la conexión y todo, pero nada, peta.

principal dll
Código Delphi [-]
library MyDll;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  System.SysUtils,
  System.Classes,
  Forms,
  Dialogs,
  uFrm in 'forms\uFrm.pas' {Frm};

procedure Llamada (Host, BDD: String); stdcall;
var
   f: TFrm;
begin
   f := TFrm.Create(Application, Host, BDD);
   try
      f.Mostrar;
   finally
      f.Free;
   end;
end;

exports Llamada;

begin
end.

Frm de la dll
Código Delphi [-]
unit uFrm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ImgList, 
  Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls, sListView, Vcl.ExtCtrls, 
  Data.DBXMSSQL, Data.DB, Data.SqlExpr;

type
  TFrm = class(TForm)
    Conex: TSQLConnection;
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Conectado: Boolean;

    function Mostrar: Boolean;
    constructor Create(AOWner: TComponent; pHost, pBDD: String); Reintroduce;
  end;

var
  Frm: TFrm;

implementation

{$R *.dfm}

{ TFrm }

constructor TFrm.Create(AOWner: TComponent; pHost, pBDD: String);
Var
   Res: Integer;
begin
   inherited Create(AOwner);

   Conectado := false;
   repeat
      Conex.Params.Values['HostName'] := pHost;
      Conex.Params.Values['DataBase'] := pBDD;
      Conex.Params.Values['User_Name']:='usu';
      Conex.Params.Values['Password']:='pass';
      try
         Conex.Connected := true;
         Conectado := true;
      except
         Res := MessageDlg('No se ha podido conectar con BDD!',
                         mtError, [mbCancel, mbRetry], 0);
      end;
   until (Res <> 5);
end;

procedure TFrm.FormDestroy(Sender: TObject);
begin
   Conex.Connected := false;
end;

function TFrm.Mostrar: Boolean;
begin
   if Conectado then
      ShowModal;
end;

end.
__________________
La Madurez se llama...
~~~Gaia~~~
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
Capturar Excepcion-Error al salir de mi programa, para que no me salga mancurnino Varios 1 11-05-2008 22:04:11
Problemas al salir del programa silviodp Varios 6 11-09-2007 18:50:51
Iniciar con windows programa que se conecta a DB... JuanErasmo Firebird e Interbase 3 27-08-2007 21:50:45
Salir del programa Luli Varios 4 08-04-2006 04:01:14
Error en la ejecucuión de programa que llama reportes de crystal... dunia_lv Impresión 0 12-05-2005 20:14:02


La franja horaria es GMT +2. Ahora son las 23:06:46.


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