Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите разобраться с TADOQuery


Goga ©   (2003-10-09 17:08:00) 

Есть такой код:
//===================================
program Jurnal;
uses
Forms,
ADODB,
DB,
Dialogs, Variants,
...;

{$R *.res}
var
adoConnection: TADOConnection;
dsQuery: TADOQuery;
srcSQL: String;
srcTemp: Variant;

begin
Application.Initialize;
...
Application.CreateForm(...);

adoConnection:=TADOConnection.Create(Application);
dsQuery:=TADOQuery.Create(Application);
adoConnection.Provider:="ADsDSOObject";
adoConnection.LoginPrompt:=False;
dsQuery.Close;
dsQuery.ConnectionadoConnection;
srcSQL:="select deliveryAccess, cn from "LDAP://dc=xxxxx,dc=ru" where objectClass="deliveryUser"";
dsQuery.SQL.Add(srcSQL);
dsQuery.ExecSQL;
while not dsQuery.Eof do
begin
srcTemp:=dsQuery.FieldValues["deliveryAccess"];
ShowMessage(VarToStr(srcTemp));
dsQuery.Next;
end;
dsQuery.Free;
adoConnection.Free;

Application.CreateForm(...);
...
Application.Run;
end.
//===================================================
Попытка совершить - dsQuery.SQL.Add(srcSQL)
приводит к ошибке. Которая вызывает полный обвал программы.
От чего это может происходить?


KSergey   (2003-10-10 12:29:00) [1]

А вообще не очень удачный подход, на мой взгляд.
Это как со сплеш-экранами: часто имеются рекомендации делать его прямо в DPR (даже авторитеты на это указывают), однако, по-моему, код, который может вызвать исключения (а уж работа с БД - обязательно может и вызовет) - лучше делать внутри какого-либо метода объекта Application. При этом, вообще-то говоря, весь пользовательский, так скажем, код программы (который пишется без изменения dpr, а лишь в других модулях программы) и так выполняется из метода Application: это либо CreateForm, либо Run. Так что есть мысл весь указанный в вопросе код перенести в OnCreate какой-либо формы - результат будет тот же, зато исключения обработаются более корректно (я бы даже сказал иначе: они вообще обработаются;).


sniknik   (2003-10-09 18:01:00) [2]

слушай может тебе код по новой переписать? все, несмотря в этот. тут сплошные ошибки
dsQuery.ConnectionadoConnection; ???
в принципе даже скомпилится не должна.


sniknik   (2003-10-09 17:55:00) [3]

и еще раз, упс. не вижу где adoConnection.ConnectionString инициализируется?
а вот adoConnection.Provider подставится автоматом при присвоенини строки ConnectionString (не нужно).


sniknik   (2003-10-09 17:37:00) [4]

упс. CoInitialize(nil)/CoUnInitialize похоже не надо. (не заметил что это нормальная прога просто код в проекте, показалось консольная)


sniknik   (2003-10-09 17:34:00) [5]

Application в Create(Application); на nil замени. и в начале программы поставь CoInitialize(nil) в конце CoUnInitialize.

должно изменится к лутшему.


Наверх

Титульная страница Поиск, карта сайта Написать письмо