Как передать значение NULL из компонента Unidac Query в Delphi? - PullRequest
1 голос
/ 22 ноября 2011

Когда я использую компонент StoredProc в Delphi, используя ParamByname('ParamName').Clear Я могу отправить значение NULL.

Но как передать значение NULL при использовании компонента Query?

with Query do
begin
 SQL.ADD('exec d_upd_calc'+Quoted(EditCalc.Text));
end

В приведенном выше сценарии я хочу отправить NULL, если поле редактирования пустое.

Я использую Delphi 2010, Unidac с Sybase.

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Даже в Queries вы можете работать с параметрами:

Query.SQL.Text := 'exec d_upd_calc :myparam';
Query.Prepare;
Query.ParamByName('myparam').Clear;

И лучше использовать параметры, чем создавать полную строку, потому что вы не должны обрабатывать кавычки и избегать утечек в безопасности посредством SQL-инъекции.

1 голос
/ 22 ноября 2011

С БД Advantage я бы сделал что-то вроде этого:

var
  sqlText: string;

with Query do
begin
  if EditCalc.Text = '' then
    sqlText := 'exec d_upd_calc NULL' else
    sqlText := 'exec d_upd_calc '+Quoted(EditCalc.Text);
  SQL.ADD(sqlText);
end;

Если ключевое слово также NULL, это должно сработать.

Quoted удаляет / экранирует какой-либо опасный ввод пользователя для предотвращения внедрения SQL? Если да, то это хорошо. Если нет, то это должно быть.

...