![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TpFibsdatabase и Dll [D7, IB6.x]
yaric © (2003-12-04 18:14:00)
Привет всем у меня возникла следующая проблема кто знает
помогите:
открываю из длл библиотеки форму на котрой лежит
TpFibTransaction, Database передается как параметр из основного приложения. Передача параметров проходит нормально, однако когда
я пытаюсь как то работать через эту БД возникают ошибки при вызове метода TpFibDataset.Open
yaric (2003-12-04 19:13:00) [21]
Я прочитал
та мнаписано что проблемы могут возникнуть с передачей
параметров типа string но я же с параметрами таких типов не работаю. Так в чем тогда дело
Vlad (2003-12-04 19:13:00) [22]
> Johnmen © (04.12.03 18:57) [13]
Думаешь из-за ShareMem? Она ведь вроде при работе со стрингами нужна ?
Мне кажется что в момент вызова библиотечной процедуры экземпляр TpFibDatabase не создан.
Johnmen (2003-12-04 18:57:00) [23]
>yaric
Нажимай последовательно:
File-New-Other-DLL Wisard получишь болванку для библиотеки.
Внимательнейшим образом прочти закомментаренный текст !
:)))
yaric (2003-12-04 18:57:00) [24]
Спасибо >>Sandman25 разъяснил
Ну кто нибуть теперь подскажите что делать с коннектом к БД??
Sandman25 (2003-12-04 18:51:00) [25]
Это же Application не DLL, а хоста (вызывающего приложения).
При таком создании в Application хоста добавляется ссылка на эту форму DLL, и при выходе из программы Application попытается ее очистить, вызывая тем самым access violation.
yaric (2003-12-04 18:49:00) [26]
А почему не рекомендуется создавать формы с владельцем Application?
Sandman25 (2003-12-04 18:46:00) [27]
>А может какие идеи есть насчет ошибки связанной с Open?
Почти никаких, кроме того, что, возможно, не стоит создавать формы с владельцем Application.
FIBDataset я никогда не использовал и даже не видел, помочь ничем не могу.
yaric (2003-12-04 18:44:00) [28]
Да согласен сглупил
А может какие идеи есть насчет ошибки связанной с Open?
yaric (2003-12-04 18:42:00) [29]
Место в методе формы где происходит ошибка
procedure TfrmBookOptions.GetCurrRazdStDBInfo;
var date_str:string;
temp_dataset:TpFibDataSet;
begin
dateTimetostring(date_str,"dd.mm.yyyy", Curr_data);
temp_dataset:=TpFibDataSet.Create(self);
temp_dataset.Database:=WorkDatabase;
temp_dataset.Transaction:=ReadTransaction;
try
temp_dataset.SQLs.SelectSQL.Text:=" SELECT * FROM BU_SPR_RAZD_ST_SELECT("+""""+date_str+""""+","+IntToStr(DEFAULT_ROOT_ID)+") WHERE ID_RAZD_ST="+IntToStr(Curr_Id_RzdSt);
temp_dataset.Open--!!Вот здесь происходит Access Violation;
Sandman25 (2003-12-04 18:41:00) [30]
Потому что тем самым
DS := Screen
присваивает значение локальной переменной (которая дальше даже не используется), а не модульной, как планировалось.
yaric (2003-12-04 18:40:00) [31]
А почему выделенную строку нужно убрать?
yaric (2003-12-04 18:39:00) [32]
Коструктор формы которая вызывается из библиотеки
constructor TfrmBookOptions.Create(AOwner: TComponent;
Database: TpFibDatabase;FS:TFormStyle; Curr_Date:TdateTime;);
begin
inherited Create(AOwner);
self.formstyle:=FS;
WorkDatabase:=Database;
ReadTransaction.DefaultDatabase:=Database;
WriteTransaction.DefaultDatabase:=Database;
Curr_data:=Curr_Date;
end;
Sandman25 (2003-12-04 18:37:00) [33]
procedure InitPlugin(App, Scr: integer); StdCall;
var DA: TApplication; DS: TScreen;
begin
Выделенную строку лучше убрать.
yaric (2003-12-04 18:35:00) [34]
Привожу
Длл:
library mdidll;
uses
SysUtils,
Classes,
Forms,
pFibDatabase,
uBookOptions in "uBookOptions.pas" {frmBookOptions},
uMain_Book_Ini in "uMain_Book_Ini.pas";
var
DA : TApplication;
DS : TScreen;
procedure InitPlugin(App, Scr: integer); StdCall;
var DA: TApplication; DS: TScreen;
begin
DS := Screen;
Screen := TScreen(Scr);
DA := Application;
Application := TApplication(App);
end;
procedure DonePlugin; StdCall;
begin
Screen := DS;
Application := DA;
end;
function CreateMDI(AOwner:TComponent; Database:TpFibDatabase; FS:TFormStyle; Book_Date:TDateTime): integer; StdCall;
begin
Result :=integer(TfrmBookOptions.Create(AOwner,Database,FS,Book_Date));
end;
exports
InitPlugin,
DonePlugin,
CreateMDI;
begin
end.
Vlad (2003-12-04 18:23:00) [35]
Ты не привел ни сообщения об ошибке ни пример кода своей программы. Телепаты в отпуске.