Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Помогите нужна помощь!ADO и DLL!

Ответить
Настройки темы
Delphi - Помогите нужна помощь!ADO и DLL!

Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


Имееться dll в которой динамически создаются компоненты для связи с БД(access .mdb) и приложение в которой находиться DBGRIG и DATASOURCE.

Вот что получилось после 4 дней мучений и изучения материала:
Код DLL:
library Project1;
uses
SysUtils,
Classes,Forms,
ADODB, DB;
procedure Connect(Handle: THandle; DS: TDataSource);export;stdcall;
var
ADOConnect: TADOConnection;
ADOQuery: TADOQuery;
Begin
Application.Handle:=Handle;
ADOConnect:=TADOConnection.Create(nil);
ADOQuery:=TADOQuery.Create(nil);
ADOConnect.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\user\Desktop\Систематизатор 2011\Удалить\Baze.mdb;Persist Security Info=False';
ADOConnect.LoginPrompt:=False;
ADOQuery.Connection:=ADOConnect;
ADOQuery.SQL.Text:='Select* from документы';
DS.DataSet:=ADOQuery;
ADOConnect.Open;
ADOQuery.Open;
ADOQuery.Close;
ADOConnect.Close;
end;
{$R *.res}
exports Connect index 1;
begin
end.

Код приложения:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, DB, ActiveX, ComObj, ADODB;
type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
dll : THandle;
Run : procedure (Handle: THandle; DS: TDataSource); StdCall;
begin
try
Dll:=LoadLibrary('dll\Project1.dll');
if DLL=0 then
begin
exit;
end
else
begin
@Run:=GetProcAddress(DLL,'Connect');
if (@Run<>nil) then
Begin
Run(dll,Form1.DataSource1);
end
else
end;
except
end;
end;
end.
Но когда нажимаю связаться с БД то выскакивает ошибка: Invalid Pointer Operation.((( Что делать как установить связь для отображения данных?

Отправлено: 12:42, 02-10-2011

 

Новый участник


Сообщения: 40
Благодарности: 19

Профиль | Отправить PM | Цитировать


Никогда, нет не так - НИКОГДА не пытайтесь работать смешивая VCL в DLL и программе. У программы и DLL РАЗНЫЕ RTTI и, соответственно передавая указатель на tDataSource в DLL вы и получаете бред, так как tDataSource в программе совсем другой тип, чем в DLL. Если так надо вынести связь с базой в отдельный модуль - используйте пакеты. Это во-первых.
А во-вторых - подумайте что у Вас останется в DataSource после закрытия запроса и соединения с БД?
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:36, 03-10-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


AlexVol, у меня просто встал такой вопрос.Я пытаюсь написать программу но так что бы была наименьшая нагрузка на оперативную память и меньше было кода.Просто компоненты ADOConnection, ADOQuery у меня практически везде, где идет работа с БД.А это большая часть DLLок хотел просто их создавать один раз и подключать всех остальных к ним.А за совет про пакеты спасибо почитаю по пробую разобраться.

Отправлено: 10:32, 04-10-2011 | #3


Новый участник


Сообщения: 40
Благодарности: 19

Профиль | Отправить PM | Цитировать


А смысл в отдельных DLL? Сделайте себе стандартный DataModule и подключайте его к своим проектам.
А использовать так как первоначально хотели все равно не получится: еще раз подумайте: что останется в возвращаемом DataSource после ЛИКВИДАЦИИ ADOQuery? Не говоря о том, что Вы еще и соединение с базой закрываете. Вы же не таскаете копии выборок между компонентами, а меняете ссылки на компоненты.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:14, 04-10-2011 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Помогите нужна помощь!ADO и DLL!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Помогите, нужна помощь по DNS server в Win2003! Алексей Tan Microsoft Windows NT/2000/2003 5 08-07-2011 13:23
Разное - нужна помощь по Паскалю(Помогите решить задачи) Allkz Программирование и базы данных 7 20-05-2010 10:06
помогите (серьезно нужна помощь) не запускается мать сокета 370 GORAND Непонятные проблемы с Железом 20 10-01-2009 10:10
Интерфейс - немогу удалить shell32.dll, нужна помощь??!! twisted1 Microsoft Windows Vista 18 28-09-2008 02:24
Нужна помощь! Помогите окончательно определиться Pasha_SS Общий по Linux 1 28-08-2007 22:34




 
Переход