gpt4 book ai didi

SQL 查询在 Workbench 中工作,但在 Delphi 中使用完全相同的查询时出现 'Could not convert variant type' 错误

转载 作者:行者123 更新时间:2023-12-03 15:46:34 25 4
gpt4 key购买 nike

我得到的确切错误是

Could not convert variant of type (UnicodeString) into type(Date).

我用于日期的变量是一个字符串,我必须在它周围放置引号,否则它会返回 null,但是当我在它周围放置引号时,我会收到此错误。

这是我的 SQL 查询代码和变量 TodaysDate。 (此代码不会被复制和粘贴,因为它位于另一台没有互联网功能的计算机上,因此请忽略任何可能导致编译错误的内容)

    if MidStr(DateToStr(Date),2,1) ='/' then
TodaysDate := MidStr(DateToStr(Date),6,4) + '-' + '0' +
MidStr(DateToStr(Date),1,1) + '-' + MidStr(DateToStr(Date),3,2)
else
TodaysDate := MidStr(DateToStr(Date),7,4) + '-'
+ MidStr(DateToStr(Date),1,2) + '-' + MidStr(DateToStr(Date),4,2);

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT tbl.emailAddress, tbljob.Time FROM '+
'dbwindowwash.tblclient, dbwindowwash.tbljob, dbwindowash.tbljobclientworker '+
'WHERE tbljobclientworker.jobID = tbljob.jobID AND '+
'tbljobclientworker.clientID = tblclient.clientID AND tbljob.Date = ' +
QuotedStr(TodaysDate));
ADOQuery1.Open

// More Code using the email addresses and time

直接复制并粘贴到工作台中,此查询为我提供了我想要的所有数据,但在 Delphi 中却给出了错误,并且没有 QuotedStr() 它在 Delphi 和 Workbench 中都返回 null。

我的程序中其他地方有一个类似的查询,它使用日期作为带有 QuotedStr() 的字符串,它工作正常,所以我完全不知道这有什么问题。

最佳答案

同意 SirRufo 的评论。 “我该怎么做?”的正确答案是“不要这样做;这是错误的做法。”

如果像这样将值直接粘贴到查询中,黑客就可以找到一种方法来 place things into your query that get interpreted as SQL commands.这称为SQL 注入(inject),它在过去几十年中造成了数十亿美元的损失。 (没有夸张。)

正确的方法是使用参数将 SQL 代码与数据完全分离,如下所示:

ADOQuery1.SQL.Clear;

//: before an identifier specifies a parameter
ADOQuery1.SQL.Add('SELECT tbl.emailAddress, tbljob.Time FROM '+
'dbwindowwash.tblclient, dbwindowwash.tbljob, dbwindowash.tbljobclientworker '+
'WHERE tbljobclientworker.jobID = tbljob.jobID AND '+
'tbljobclientworker.clientID = tblclient.clientID AND tbljob.Date = :date';

//parse the query and find parameter declarations
ADOQuery1.Prepare;

//set a value for the parameter
ADOQuery1.ParamByName['date'].AsDateTime := TodaysDate;

ADOQuery1.Open

一种数据集类型与另一种数据集类型之间设置参数值的确切语法可能有所不同,但这应该可以让您了解基本的想法。

关于SQL 查询在 Workbench 中工作,但在 Delphi 中使用完全相同的查询时出现 'Could not convert variant type' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23229732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com