Устаревшие данные возвращаются при повторном выполнении запроса с пустым результатом
Я использую UIB в приложении Delphi 2010. Я повторно использую компонент TUIBQuery в нескольких исполнениях с разными параметрами. Когда значение параметра возвращает пустой набор данных, доступ к полям возвращает устаревшие данные.
Вот псевдокодовое представление / извлечение того, что я делаю:
// Open query for a set of parameter values
Q.Params.ByNameAsInteger[aParamName] := 1;
Q.Open;
// For this parameter value data is returned, access the first record:
i := Q.Fields.ByNameAsInteger[aFieldName];
Q.Close;
// Open query for a different set of parameter values
Q.Params.ByNameAsInteger[aParamName] := 2;
Q.Open;
// For this parameter value there is no data on the DB.
j := Q.Fields.ByNameAsInteger[aFieldName];
Q.Close;
Что я получу после последнего Open()
является
Q.Eof = true
Q.Bof = true
i = j // Some non-null value
Таким образом, он знает, что набор результатов был пуст, но все равно возвращает значение для aFieldName, которое было запрошено, когда набор результатов не был пуст для старого параметра valie при доступе к полю по имени.
Я бы предпочел, чтобы это NULL (or 0 as I access AsInteger())
для поля.
Мой обходной путь - это тест на Eof=Bof=true
, но есть ли более элегантный способ?
В моем реальном коде два Open()
звонки в отдельных веб-запросах. Есть ли способ явного сброса значений полей при вызове Close()
?
Спасибо за то, что прочитали это и посвятили немного мысли этому.