Форум: "Основная";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
ВнизTDataBase в DLL Найти похожие ветки
← →
snake1977 (2004-01-20 15:09) [0]Здравствйте! Я передаю в DLL объект TDataBase как параметр в процедуре, и присваиваю свойство DatabaseName свойству TQuery, свойство Connected у переданного DataBase установленно в True, свойство LoginPrompt в False. Но при открытии запроса, выдается окошко для логина :((
почему?? и как правильно передать в DLL DataBase??
вот кусок исходника:
Procedure Makefile(name:String; DB:TDataBase); stdcall;
Var f:TextFile;
q:TQuery;
i:Integer;
Begin
q:=Tquery.Create(nil);
q.DatabaseName:=DB.DataBaseName;
q.SQL.Append("select t.* from blanks t");
q.Open;
AssignFile(f,name);
rewrite(f);
for i:=1 to q.RecordCount do
Begin
for j:=0 to q.FieldCount-1 do
Write(f,q.Fields[j].AsString+#9);
WriteLn(f,"");
End;
Closefile(f);
q.Close;
q.Free;
End;
← →
Digitman (2004-01-20 15:49) [1]q:=Tquery.Create(nil);
q.Session := DB.Session;
q.DatabaseName:=DB.DataBaseName;
← →
snake1977 (2004-01-20 17:03) [2]Нет такого свойства у TQuery :((
а SessionName дает тот же результат что и без него
← →
Digitman (2004-01-20 17:07) [3]q:=Tquery.Create(DB.Owner);
← →
VAleksey (2004-01-20 17:19) [4]Что-то это все не то ...
← →
snake1977 (2004-01-20 17:20) [5]и так тоже не хочет :(
← →
snake1977 (2004-01-20 17:21) [6]>>VAleksey
а как??
я попробовал создать TDataBase и сделать ему Assign , но тогда просто все вылетает с ошибкой :(
← →
Digitman (2004-01-20 17:36) [7]не помню подробностей, но скажу точно, что поиск объектов классов TSession и TDatabase идет в контексте принадлежности объекта TQuery к той TForm или к тому TDatamodule, которые являются владельцем объекта TDatabase, передаваемого как факт. параметр
← →
VAleksey (2004-01-20 17:42) [8]Вообще, вроде ты все правильно делал.
Попробуй еще и Session передать.
Может Digitman и прав.
Procedure Makefile(name:String; DB:TDataBase; Sess:TSession); stdcall;
....
Session := Sess;
....
и т.д.
← →
snake1977 (2004-01-20 18:15) [9]а куда потом Session этот использовать ?
← →
Digitman (2004-01-20 18:19) [10]Identifies the database session component associated with this dataset.
property DBSession: TSession
Description
Use DBSession to determine the session component that controls the database component with which this dataset component is associated. By default, a database component is associated with the default session component, Session, that is automatically created for all database applications.
← →
snake1977 (2004-01-20 18:56) [11]DBSession - read only поле :(
может надо Session передавать в DLL в виде Handle ??
← →
snake1977 (2004-01-21 09:05) [12]потратил пол ночи но разобрался :)
надо сделать было таким образом.
1.Передать из основной программы Handle объекта TDataBase, в вызываемую процедуру.
1.создать экземпляр класса TDataBase в DLL (я сделал глобальную переменную, чтобы можно было использовать вовсех процедурах DLL)
2.присвоить свойству DatabaseName любое имя
3.присвоить хендлу созданого объекта переданный хендл
и все работает на ура :)
тока надо не забыть сделать Free для объекта TDataBase перед выгрузкой DLL
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c