FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Crear dll con acceso a base de datos
Hola a todos:
tengo que crear una dll que acceda mediante odbc a una base de datos. He creado la dll y dentro de ella un tdatamodule en el que pongo la base de datos y la tquery para realizar una consulta. El problema esta cuando intento llamar al tmodule para abrir la base de datos o para hacer cualquier cosa porque me da un error de memoria. Me gustaria saber si me podeis ayudar a crear esa conexion a la base de datos dentro de mi dll. Muchas gracias por adelantado y un saludo. |
#2
|
||||
|
||||
Lo que pasa es que cuando ejecutas tu DLL, el DataModule no se crea automáticamente. Tienes que indicarle a tu proyecto que cree el DataModule automáticamente, o si es necesario, crearlo tu mismo en algún evento.
Algo como:
__________________
|
#3
|
|||
|
|||
Lo he hecho asi:
library prueba; { comentario borrado } uses Windows, SysUtils, Classes, Dialogs, udatos in 'udatos.pas' {Datos: TDataModule}; {$R *.res} function multiplica(a : integer; b : integer) : integer; stdcall; begin multiplica := a * b; end; function obtenerNombre(codigo : shortstring) : shortstring; stdcall; var temporal : shortstring; begin Application.CreateForm(datos, udatos); datos.consulta.ParamByName('codigo').AsInteger := strtoint(codigo); datos.consulta.Active := true; if datos.consulta.RecordCount = 0 then temporal := '-' else temporal := datos.consulta['pe_apelli']; datos.consulta.Active := false; obtenerNombre := temporal; end; exports multiplica, obtenerNombre; begin end. y me da un error en la linea que me has dicho que ponga. No me funciona. |
#4
|
|||
|
|||
Algo de explicación conceptual
Hola,
Un DLL se maneja diferente a una aplicación. Cuando usas un TDataModule tanto la creación del mismo como su destrucción debes hacerlo por tí mismo. Digamos que agregastes una unidad en la que creates tú TDataModule; ten en cuenta que al hacerlo, en realidad lo que estás definiendo es una clase descendiente de TDataModule, a la que llamastes Datos. Tú unidad debe lucir algo como esto:
Lógicamente "Algo" es solo un ejemplo. Hay varias consideraciones de metodología a hacer. Sin entrar en detalles, es aconsable borrar el :
De la unidad que has creado, y en su lugar emplearlo como variable local de la rutina que deba usarla; esto es para facilitar programación multihilos en caso de que más adelante se desarrolle con ella. Las rutina que la use debe ser algo como esto:
El parámetro Nil del constructor le dice a la rutina que la responsabilidad de liberar al componente es de la propia rutina. Es importante que tengas en cuenta que aquí no puedas pasarle un parámetro Self, u otro componente, proveniente del programa principal porque se trata de áreas de memoria diferentes. Bueno, hay bastante teoría que podríamos anotar al respecto; pero espero que esto te ayude a orientarte. Ahora bien, te sugiero leer primero toda la teoría de manejo de DLLs y en especial la comunicación de parámetros entre el programa principal y el DLL, así como lo referente a manejo de memoria. Última edición por rolandoj fecha: 03-04-2008 a las 00:56:25. Razón: Problema con las banderas de código Delphi |
#5
|
|||
|
|||
Muchas gracias rolandoj. Me has aclarado un monton de dudas. Es que es la primera dll que creo en mi vida y la verdad es que ando un poco perdido.
Ha funcionado a la perfeccion. Muchas gracias de nuevo y un saludo. |
#6
|
|||
|
|||
Me alegro. A la orden para cualquier otra cosa
Cita:
Me alegro que haya podido serte útil y quedo a la orden en caso de que necesites más ayuda. Este tema de los DLL tiene bastante detalles. Te podrás dar cuenta a medida que investigues al respecto. Muchos saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema de acceso a base de datos Access | Ulnaju | Tablas planas | 6 | 15-08-2007 01:53:13 |
Acceso a base de datos interbase/firebird | Ricardo León | Conexión con bases de datos | 4 | 12-09-2006 20:31:05 |
Acceso a Base Datos de Micro. Works con delphi | jfk76 | Servers | 2 | 03-03-2005 18:44:48 |
BDE para acceso a una Base de Datos Oracle | Isabel | Oracle | 2 | 12-06-2003 12:05:01 |
Acceso a Base de datos Oracle con BDE | Isabel | Conexión con bases de datos | 3 | 04-06-2003 17:52:06 |
|