|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Помогите нужна помощь!ADO и DLL! |
|
Delphi - Помогите нужна помощь!ADO и DLL!
|
Пользователь Сообщения: 75 |
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Никогда, нет не так - НИКОГДА не пытайтесь работать смешивая VCL в DLL и программе. У программы и DLL РАЗНЫЕ RTTI и, соответственно передавая указатель на tDataSource в DLL вы и получаете бред, так как tDataSource в программе совсем другой тип, чем в DLL. Если так надо вынести связь с базой в отдельный модуль - используйте пакеты. Это во-первых.
А во-вторых - подумайте что у Вас останется в DataSource после закрытия запроса и соединения с БД? |
Отправлено: 12:36, 03-10-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать AlexVol, у меня просто встал такой вопрос.Я пытаюсь написать программу но так что бы была наименьшая нагрузка на оперативную память и меньше было кода.Просто компоненты ADOConnection, ADOQuery у меня практически везде, где идет работа с БД.А это большая часть DLLок хотел просто их создавать один раз и подключать всех остальных к ним.А за совет про пакеты спасибо почитаю по пробую разобраться.
|
Отправлено: 10:32, 04-10-2011 | #3 |
Новый участник Сообщения: 40
|
Профиль | Отправить PM | Цитировать А смысл в отдельных DLL? Сделайте себе стандартный DataModule и подключайте его к своим проектам.
А использовать так как первоначально хотели все равно не получится: еще раз подумайте: что останется в возвращаемом DataSource после ЛИКВИДАЦИИ ADOQuery? Не говоря о том, что Вы еще и соединение с базой закрываете. Вы же не таскаете копии выборок между компонентами, а меняете ссылки на компоненты. |
Отправлено: 16:14, 04-10-2011 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Помогите, нужна помощь по 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 |
|