Форум: "Начинающим";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
ВнизПочему нет хинта что Result может быть неопределен? Найти похожие ветки
← →
12 © (2011-01-19 16:09) [0]Пишу:
function GetNextFromSeq(const NameSeq: string):Cardinal;
var
oqQ: TOraQuery;
begin
// Result := 0;
OpenQC(oqQ, "SELECT " + NameSeq + ".NEXTVAL as NewId FROM DUAL" , []);
if not(oqQ.IsEmpty) then
begin
if not(oqQ.FieldByName("NewId").IsNull) then
Result := oqQ.FieldByName("NewId").AsInteger else
raise Exception.Create("function GetNextFromSeq/"+NameSeq+"/NewId Is Null");
end else
raise Exception.Create("function GetNextFromSeq/"+NameSeq+"/oqQ.IsEmpty");
FreeAndNil(oqQ);
end;
Написал было по привычке вначале Result := 0; - стало ругаться, что неиспользуется. Убрал - все хорошо.
А почему?
← →
sniknik © (2011-01-19 16:19) [1]так не используется же... а вот убери возбуждение ексепта, тогда и будет не определен, по этой ветке.
← →
Игорь Шевченко © (2011-01-19 16:21) [2]код в топку
← →
Ega23 © (2011-01-19 16:21) [3]У тебя мемлик потенциальный. Если raise произойдёт, то oqQ не будет убито.
Причём, как твой рукотворный raise, так и наOpenQC(
← →
Ega23 © (2011-01-19 16:22) [4]Ну а для raise "Скрипач не нужен" (с)
← →
12 © (2011-01-19 16:28) [5]это еще не все, в try оберну сейчас что надо
сразу в sql .NEXTVAL вставлял. Сейчас надо заодно и помнить чему равно
про CURRVAL знаю :), думается так удобнее.
> Игорь Шевченко ©
а как посоветуешь?
← →
12 © (2011-01-19 16:37) [6]а так, пойдет?
Result := 0;
try
OpenQC(oqQ, "SELECT " + NameSeq + ".NEXTVAL as NewId FROM DUAL" , []);
if not(oqQ.IsEmpty) then
begin
if not(oqQ.FieldByName("NewId").IsNull) then
Result := oqQ.FieldByName("NewId").AsInteger;
end;
finally
FreeAndNil(oqQ);
end;
и ругается уже без Result := 0
(и с raisами предыдущими)
, если в try обернуть.
← →
12 © (2011-01-19 16:41) [7]
> Ну а для raise "Скрипач не нужен" (с)
это когда пишу - всегда отладочную ин-фу так выбрасываю, потом эти строки убираю
а на TApplicationEvents.Exception висит memo с ошибкой показывать
так удобнее ошибку скопировать и искать потом по коду
← →
И. Павел © (2011-01-19 16:45) [8]> а так, пойдет?
Если только oqQ создается до try. Иначе там мусор может быть.
← →
Ega23 © (2011-01-19 16:46) [9]
> потом эти строки убираю
Я вот к чему:function Foo: Boolean;
begin
raise Exception.Create("Foo");
end;
Тоже по-идее не даст хинтов-ворнингов.
← →
Игорь Шевченко © (2011-01-19 16:47) [10]
> а как посоветуешь?
выкинуть все. посмотреть в demos, как берут очередное значение для sequence.
← →
Ega23 © (2011-01-19 16:49) [11]
> Если только oqQ создается до try.
Ну не обязательно. Зависит от кодаOpenQC
напримерprocedure OpenQC(var q: TOraQwery; ...)
begin
q := TOraQwery.Create(...);
try
.....
q.Open;
except on E: Exception do
begin
q.Free;
raise Exception.Create("OpenQC: " + E.Message);
end;
end;
end;
← →
Rouse_ © (2011-01-19 16:50) [12]Потому что у тебя условие или он будет инициализирован или поднять исключение. В случае исключения на результат функции начхать. Поэтому все верно.
← →
12 © (2011-01-19 17:02) [13]ну да
procedure OpenQC(Q:tORAQuery; const SQL:string; const P:array of variant);
begin
CreateQ(Q);
OpenQ(Q, SQL, P);
end;
procedure CreateQ(Q:tORAQuery);
begin
if Session = nil then
Raise Exception.Create("uUtils. CreateQ. Неинициализированная пременная модуля Session");
и т.п.
ладно, пошел в demos ^)
← →
Игорь Шевченко © (2011-01-19 17:20) [14]
> procedure OpenQC(Q:tORAQuery; const SQL:string; const P:
> array of variant);
> begin
> CreateQ(Q);
> OpenQ(Q, SQL, P);
> end;
>
> procedure CreateQ(Q:tORAQuery);
> begin
> if Session = nil then
> Raise Exception.Create("uUtils. CreateQ. Неинициализированная
> пременная модуля Session");
Это тоже выкинуть
← →
12 © (2011-01-19 17:33) [15]опять выкинуть :)
почему теперь то?
не охота мне каждый раз писать
> q := TOraQwery.Create(...);
написал
CreateQ(Q);
,где сначала сессию проверяю, потом q := TOraQwery.Create(...);
не охота каждый раз писать
q.sql.text := "....";
q.params[i] := param[i];
q.open
написал
OpenQ(Q, SQL, P);
где все это делается.
потом объединил.
здорово как - объявил Query, OpenQC() ему,
он и создался, и параметры подставились, и открылся
← →
Игорь Шевченко © (2011-01-19 17:51) [16]
> почему теперь то?
потому что ерунда
я понимаю, если б выполнял методы с именами ExecSQL, OpenSQL и т.п, да еще бы сделал это методами helper-а к Connection
А у тебя типичный набор костылей
← →
Ega23 © (2011-01-19 17:52) [17]
> да еще бы сделал это методами helper-а к Connection
В D7 нету хэлперов... :(
← →
Игорь Шевченко © (2011-01-19 18:01) [18]
> В D7 нету хэлперов... :(
не в термине суть
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c