如何从 Delphi 中的 Unidac 查询组件传递 NULL 值?

发布于 2024-12-17 23:50:56 字数 306 浏览 3 评论 0原文

当我在 Delphi 中使用 StoredProc 组件时 ParamByname('ParamName').Clear 我能够发送 NULL 值。

但是在使用查询组件时如何传递 NULL 值呢?

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

在上面的场景中,如果编辑框为空,我想发送 NULL。

我正在使用 Delphi 2010、Unidac 和 Sybase。

When I am using StoredProc component in Delphi using
ParamByname('ParamName').Clear I'm able to send NULL value.

But how can I pass NULL value when using a Query component?

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

In the above scenario I want to send NULL if the edit box is blank.

I am using Delphi 2010, Unidac with Sybase.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

葵雨 2024-12-24 23:50:56

即使在查询中,您也可以使用参数:

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

并且最好使用参数而不是构建完整的字符串,因为您不能处理引号并避免通过 SQL 注入造成安全泄漏。

Even in Queries you can work with parameters:

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

And it's better to use parameters than to build the complete string, because you must not handle quotes and avoid security leaks via SQL-injection.

海之角 2024-12-24 23:50:56

对于 Advantage DB,我会按照以下方式做一些事情:

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 注入?如果是的话那就好了。如果没有那么应该。

With Advantage DB I would do something along these lines:

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;

If the keyword is also NULL then this should work.

Does Quoted remove/escape any dangerous user input to prevent SQL injection? If yes then it's good. If not then it should.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文