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

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

Не получается выполнить обработку Исключительной ситуации [D7, FireBird 1.0]


Андрей Королёв ©   (2003-03-30 16:34:00) 

procedure TMainObjectForm.Button3Click(Sender: TObject);
begin
if IBDataset.Active then IBDataset.close;
If IBTransaction.InTransaction then IBTransaction.Commit;
IBDatabase.Open;

try
IBDataset.SelectSQL.Text:=ComboBox22.Text;
except
// НЕ Получается выполнить обработку исключительной ситуации при
// неправильном наборе SQL-запроса
// В USES тип IB указан
on EIBInterBaseError do ShowMessage("Не удается получить данные");
end;
If IBTransaction.InTransaction then IBTransaction.Commit;
IBTransaction.StartTransaction;
IBDataset.Open;

end;


zacho   (2003-03-31 12:04:00) [1]


> MsGuns © (31.03.03 11:57)

Ты правильно считал :) В том-то и была ошибка > Андрей Королёв, что он пытался получить исключение, просто поменяв текст запроса, и не делая Open и т.п.


MsGuns   (2003-03-31 11:57:00) [2]

>zacho © (31.03.03 11:52)

А разве IB API "караулит" все изменения текстов запросов в свойств "своих" компонент ? Я по-дилетантски считал, что проверка корректности запроса делается в Prepare или, в случае его отсутствия, в Open, ExecSQL, ExecQuery и т.д.


zacho   (2003-03-31 11:52:00) [3]


> MsGuns © (31.03.03 11:48)

Насколько я понял, вопрошавшему требовалось не обновление курсора, а изменение текста запроса и проверка его на корректность.
P.S. Использование CommitRetaining - черевато, хотя я, тьфу-тьфу-тьфу, на этот баг еще не разу не нарывался.


MsGuns   (2003-03-31 11:48:00) [4]

Зачем каждый раз "дергать" Базу Данных (Open/Close), и перестартовывать транзакцию ? Для обновления курсора ИМХО достаточно дать TIBTransaction.CommitRetaining и переоткрыть НД.
Или я чего-то недопонимаю ?


zacho   (2003-03-31 11:43:00) [5]


> Anatoly Podgoretsky © (31.03.03 11:37)

Я тоже предпочитаю Close/Open - imho более читабельно.


Anatoly Podgoretsky   (2003-03-31 11:37:00) [6]

zacho © (31.03.03 09:45)
Ну это уже в области вкусов - свойство или действие, я предпочитаю Close/Open, а вот проверка действительно не нужна, можно сразу.


zacho   (2003-03-31 09:45:00) [7]

Еще небольшой советик: вместо if IBDataset.Active then IBDataset.close; проще сделать IBDataset.Active:=false;


Johnmen   (2003-03-31 09:29:00) [8]

А самая загадочная строка
IBDatabase.Open;:)


ЮЮ   (2003-03-31 03:14:00) [9]

// НЕ Получается выполнить обработку исключительной ситуации при
// неправильном наборе SQL-запроса

А кто сказал, что при неправильном наборе должно возникать исключение? :-) Ошибка проявится только при Prepere, Open и т.п.


big_rom   (2003-03-30 18:27:00) [10]

возбудить его надо если что-то нетак
выдержка из хелпа
For example, the function below converts a string to an integer, raising an ERangeError exception if the resulting value is outside a specified range.

function StrToIntRange(const S: string; Min, Max: Longint): Longint;

begin
Result := StrToInt(S); // StrToInt is declared in SysUtils
if (Result < Min) or (Result > Max) then
raise ERangeError.CreateFmt(
"%d is not within the valid range of %d..%d",
[Result, Min, Max]);
удачи


Наверх

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