![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается выполнить обработку Исключительной ситуации [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]);
удачи