Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > отловить ошибки ADO


Автор: Teleport 16.11.2009, 21:06
Есть бд, сделанная в Access. Как отловить ошибки, возникающие при sql-запросах к ней? 
Код

var
tab_name: string;
begin
...
try
ADOQuery1.Active:= false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('CREATE TABLE ' + tab_name + '(id int NOT NULL PRIMARY KEY , value_my MEMO NOT NULL);');
ADOQuery1.ExecSQL;
except
//тут как отловить ошибку?
  end;


Интересует отловить попытку создания таблицы с именем уже существующей таблицы. 
И вообще где прочитать о классификации ошибок, возникающих при запросах к бд. 

Автор: Данкинг 16.11.2009, 22:43
Цитата(Teleport @  16.11.2009,  21:06 Найти цитируемый пост)
Интересует отловить попытку создания таблицы с именем уже существующей таблицы. 

Можно сначала проверить наличие таблицы "обычными" методами, а потом уже запрос делать.


Автор: Teleport 16.11.2009, 22:55
Данкинг - какими обычными? Как проверить?

Автор: Данкинг 16.11.2009, 23:11
Код

procedure TForm1.Button6Click(Sender: TObject);
var ttt:tstringlist;
begin
ttt:=tstringlist.Create;
connection.GetTableNames(ttt);
.....
ttt.Free;
end;

 smile 

Автор: former 16.11.2009, 23:13
Teleport, а как на счет try except?
Пардон, не внимательно прочитал пост.

Автор: Teleport 16.11.2009, 23:20
Данкинг - вот оно как. Это решение, причем незамороченое. Согласен. Спасибо.
former - а вот как же с try except  отловить, не знаю даже какой класс ошибок возникает. Благодарен буду за ответ. 


Автор: former 16.11.2009, 23:21
Цитата(Teleport @  16.11.2009,  21:06 Найти цитируемый пост)
И вообще где прочитать о классификации ошибок, возникающих при запросах к бд. 

Может http://office.microsoft.com/ru-ru/access/default.aspx поискать?

Автор: Данкинг 16.11.2009, 23:33
Teleport, на здоровье. smile А по поводу отлавливания ошибок, возвращаемых СУБД - не знаю, найдёшь - напиши. smile 

Автор: Teleport 17.11.2009, 00:34
former - ничего путного не удается найти...  smile  

Автор: Deniz 17.11.2009, 06:22
Teleport, посмотри сам, что находится в переменой E в разных ситуациях
Код
try
except
  on E : Exception do begin
    ...
  end;
end;

Автор: Акимыч 17.11.2009, 14:13
Цитата(Teleport @  16.11.2009,  23:20 Найти цитируемый пост)
какой класс ошибок возникает

Наверно или EADOError или EDatabaseError 

Автор: Teleport 17.11.2009, 19:01
Deniz - не понял как увидеть-то что там находится? Через Messages с ошибками? Или как?
Акимыч В DRKB  есть раздел про базы данных, а в нем подраздел - про работу с  ADO. Там в примере находил как отлавливали EDatabaseError. Но EDatabaseError - по-моему совсем не к созданию таблицы относится... Или это какая-то общая ошибка. А нужно конкретно - ошибка создания таблицы с именем уже существующей таблицы. Ведь если я делаю запрос на создание таблицы с существующем уже именем - бд четко и ясно возвращает ошибку - говорит по-русски - таблица уже существует нельзя такую создать. 

 smile 

Автор: Акимыч 18.11.2009, 13:59
Цитата(Teleport @  17.11.2009,  19:01 Найти цитируемый пост)
совсем не к созданию таблицы относится

Верно, все что работает с ADO будет возвращать EOleException, т.к. подключается как ActiveX.
Единственный вариант наверно, это проверять перед созданием есть такая таблица или нет как написал Данкинг

Автор: Teleport 20.11.2009, 15:44
Акимыч - Нну да, тоже к такому выводу пришел. Самый простой и доступный способ, как я понял - это вариант, как писал Данкинг. И не надо заморачиваться с поиском ошибок. 

Тему считаю закрытой, спасибо за помощь.  smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)