【问题标题】:why the data is not showing?为什么数据没有显示?
【发布时间】:2018-01-14 14:43:34
【问题描述】:

sql server 上的存储过程是:

ALTER PROCEDURE [dbo].[sp_archive] 
@p1 varchar(21)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT * from audit where UpdateDate like '%@p1%'
END

UpdateDate 是一个 varchar(21) 字段。

在德尔福我有:

procedure TForm5.cxButton1Click(Sender: TObject);
begin
DataModule2.Archive.Params.ParamByName('p1').AsString := datetostr(cxDateEdit1.Date);
DataModule2.Archive.Prepare;
DataModule2.Archive.ExecProc;
end;

然而,如果我在 cxDateEdit1 中选择数据(日期)存在的日期 在审计表中,什么都没有显示。 如果我在 sql server 上运行查询:

select * from AUDIT where UpdateDate like '%30.12.2017%'

显示数据。 所以我猜 cxdataedit 显示的日期格式有问题。即使我将 cxdateedit 的显示和编辑格式更改为:dd.mm.yyyy 我仍然无法检索任何数据。我在这里缺少什么?

我也试过了:

DataModule2.Archive.Params.ParamByName('p1').AsString := cxDateEdit1.Text;

但无济于事......

【问题讨论】:

  • 在您的存储过程中,您受到 %@p1% 字符串字面的限制,而不是参数值。这与Delphi无关。
  • 你试过mm/dd/yyyy格式吗?这是 Sql Server 通常所期望的。
  • 更安全的方法是指定日期大于或等于您想要的日期并且小于日期。
  • 为什么以字符串格式而不是日期格式存储日期?通过将其转换为字符串,您只是使事情变得过于复杂。
  • 不要,不要,不要,不要,不要,不要,不要:使用日期作为字符串。将它们存储为日期,使用日期值查询,将输入转换为 TDateTime 值 a.s.a.p。你会为自己省去很多错误和错误。 (更不用说当用户喜欢不同的格式时避免问题。)

标签: sql-server delphi


【解决方案1】:

让它工作。将存储过程更改为:

SELECT * from audit where UpdateDate like + @p1 + '%'

将 cxDateEdit 显示和编辑格式更改为:

dd.mm.yyyy

我在 Delphi 中使用过:

DataModule2.Archive.Params.ParamByName('p1').AsString := cxDateEdit1.Text;

【讨论】:

  • 我必须说我不相信。您对存储过程所做的更改不应该产生影响。提示未来。首先缩小问题范围,以确保您确切知道出了什么问题。否则,您最终会得到错误的代码,其中充满了针对虚假问题的虚假解决方法。例如。在这里,您可以在不使用 cxDateEdit1 组件的情况下测试 Calling。 IE。传递一个硬编码的字符串。这将确认 proc 行为正确,并且参数传递正常工作。然后调试看看cxDateEdit1实际使用的是什么格式。
  • 无论哪种方式,我必须重复一遍,使用日期作为字符串会在很多方面给自己带来麻烦。只有其中之一是您必须处理的错误和错误。
  • 我在这里找到了一个例子:stackoverflow.com/questions/16380196/… Victoria 让我想到,也许我确实是按字面意思传递字符串,而不是作为参数传递。尝试过,它奏效了。
  • 啊。好的。这意味着直接从 Sql Server Management Studio 中调用的存储过程也不会起作用;并有明确的证据表明那里有错误。 (同样的缩小原则)
【解决方案2】:

% 放在引号中,并在它们之间连接您的变量@p1,如下所示

SELECT * from audit where UpdateDate like '%'+@p1+'%'

【讨论】:

    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2017-07-22
    相关资源
    最近更新 更多