Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 13:41   #1
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
Сообщение ADO.Обход ошибок при програмной идентификации.

Я создаю клиент для работы с MSSQL через Delphi. Использую ADO.

В форме входа 4 эдитбокса, где вводятся Логин,Пароль,Сервер,База данных.
При нажатии на кнопку "Вход", эти параметры генерируют строку ConnectionString для ADOConnection и значение Connected изменяется на True. В принципе всё работает, но я хочу реализовать защиту от ввода некорректных Логина/Пароля/... Если их ввести просто левыми, программа подвисает, и через некоторое время выдаёт ошибку.

В интернетах я нашёл событие OnWillConnect, которое вызывается перед подключением. Вот его заголовок

Код:
 procedure  TForm1.ADOConnection1WillConnect(Connection: TADOConnection; 
              var  ConnectionString, UserID, Password: WideString; 
              var ConnectOptions: TConnectOption; var EventStatus: TEventStatus);
Для параметра EventStatus существует следующее значение
Код:
esErrorsOccured - в процессе выполнения запроса возникла ошибка;
Я написал следующий код:
Код:
procedure TMainF.ADOConnection1WillConnect(Connection: TADOConnection;
  var ConnectionString, UserID, Password: WideString;
  var ConnectOptions: TConnectOption; var EventStatus: TEventStatus);
begin
If EventStatus = esErrorsOccured then
Application.MessageBox('Проверьте данные','Ошибка');
end;
Но никакого результата. Приложение также подвисает, и вылазит системная ошибка.

В описании метода TWillConnectEvent я прочитал, что он вызывается после получения подтверждения от провайдера о том, что соединение будет открыто, перед его реальным открытием.

Значит ли это то, что проверка Логин/Пароля/... происходит раньше, чем выполняется метод?

И что в этом случае делать?
Zo0M вне форума Ответить с цитированием
Старый 30.07.2009, 14:14   #2
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
Сообщение

Покопавшись по интернету наткнулся на класс Exception. Попробовал сделать через исключение:

Код:
procedure TMainF.Button1Click(Sender: TObject);
begin
ADOConnection1.ConnectionString:=ADOParam;
   try
   ADOConnection1.Connected:=true;
   except
   on EAbort do Application.MessageBox('1','2');
  end;
ADOTable1.Active:=true;
end;
На результат не повлияло(
Zo0M вне форума Ответить с цитированием
Старый 30.07.2009, 14:29   #3
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Попробуйте так:
Код:
 
try
  ADOConnection1.Connected := False;
  ADOConnection1.ConnectionString := '<>';
  ADOConnection1.Connected := True;
except
  on E: Exception do
  begin
    //Ваш код
  end;
 end;
Evgeniy26 вне форума Ответить с цитированием
Старый 30.07.2009, 15:29   #4
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
Сообщение

Вначале программа подвисла, затем выполнились команды, находящиеся в except после do, затем программа снова подвисла, и выдала системную ошибку, что SQL сервер не обнаружен, либо неверные данные.

Как я понял, всё работает, только нужно отключить вывод ошибок.

В паскале, например, можно было изменять директивы компилятора прямо в коде. Например {$I-} отключал проверку правильности ввода/вывода. Есть ли аналог под дельфи, и это вообще то?
Zo0M вне форума Ответить с цитированием
Старый 30.07.2009, 15:32   #5
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Цитата:
в except после do, затем программа снова подвисла, и выдала системную ошибку
Что вы делаете после except?
Evgeniy26 вне форума Ответить с цитированием
Старый 30.07.2009, 16:44   #6
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Evgeniy26 Посмотреть сообщение
Что вы делаете после except?
Вывожу сообщение, о том, что произошла ошибка, проверьте параметры...
Zo0M вне форума Ответить с цитированием
Старый 30.07.2009, 16:48   #7
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

После этого блока:
Код:
except
  on E: Exception do
  begin
    //Ваш код
  end;
Evgeniy26 вне форума Ответить с цитированием
Старый 30.07.2009, 17:04   #8
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию

Активизирую ADOTable

Код:
procedure TMainF.Button1Click(Sender: TObject);       
begin
try
  ADOConnection1.Connected := False;
  ADOConnection1.ConnectionString := ADOParam;
  ADOConnection1.Connected := True;
except
  on E: Exception do
        begin
        Application.MessageBox('Ошибка','Внимание');
        end;
 end;
ADOTable1.Active:=true;
end;
Ну ведь то, что после except, выполняется, только, если в try не было ошибок?
Zo0M вне форума Ответить с цитированием
Старый 30.07.2009, 17:18   #9
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Попробывал, убрал
Код:
ADOTable1.Active:=true;
и все ок, с ней ошибка. exe запускай не через Delphi. Если необходимо запускать через Delphi отключи ошибки.
Evgeniy26 вне форума Ответить с цитированием
Старый 30.07.2009, 17:37   #10
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию

Tools->Debugger options->language exceptions->Stop on Delphi Exceptions

С этого убрать галочку? Это отключит ошибки?
Zo0M вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при открытии базы при помощи ADO SlavaSH БД в Delphi 21 30.06.2009 16:51
Много ошибок в gl.h при подключении в визуал студио 2008 KrL^^ Общие вопросы C/C++ 1 12.04.2009 20:43
Проблема с параметрами при работе С ADO А. Долматов БД в Delphi 22 30.11.2007 08:47
MS SQL server 2000, ADO. Добавленые записи не отображаются при последующих запросах. _victor БД в Delphi 1 17.06.2007 13:33