我这里有Delphi 10.2.2,我想我可能用错了什么。
我有一个带有以下参数的存储过程
@etikettnr nvarchar(50)
Delphi中的这个过程也有数据类型字符串,大小为50。
出于某种未知原因,如果我将FDQuery中的字符串传递给此过程,如下所示:
DM1.spHISTJUMBO.Parameters.ParamValues['@etikettnr']:=DM1.HISTJUMBOQueryetikettnr.AsString
或
M1.spHISTJUMBO.Parameters.ParamValues['@etikettnr']:=DM1.HISTJUMBOQueryetikettnr.Value
我明白了
nvarchar值“038843738001”的转换溢出了一个int列错误。
问题是这是一个
nvarchar(50) column
这样就可以了。
如果我这样试的话,我也会犯同样的错误
DM1.spHISTJUMBO.Parameters.ParamValues['@etikettnr']:=038843738001
或者这个
DM1.spHISTJUMBO.Parameters.ParamValues['@etikettnr']:='038843738001';
但有时它会毫无差错地进入低谷。为什么这试图转换。。。
知道为什么吗?
非常感谢。
ALTER procedure [dbo].[spAWBAR_HISTORIE_JUMBO]
(@OP varchar(10),
@ID int,
@Auftnr int,
@Pos int,
@Menge int,
@teile_nr int,
@eingebaut_in int,
@etikettnr nvarchar(50),
@esnr int,
@esname nvarchar(50),
@gestell nvarchar(50),
@gestellname nvarchar(50),
@zustandname nvarchar(50),
@lastmodzeit datetime2(5),
@bearbtyp int,
@smenge int,
@Location nvarchar(50),
@DB_YEAR int
enter image description here
该死,我不敢相信这又让我失望了。存储过程不是问题所在。问题是以前的查询。这是因为:
DM1.SyncQuery.SQL.Add('select Auftnr from AWBAR_HISTORIE_JUMBO where Auftnr='+DM1.HISTJUMBOQueryauftnr.AsString+' and Pos='+DM1.HISTJUMBOQuerypos.AsString+' and Etikettnr='+DM1.HISTJUMBOQueryetikettnr.AsString+' and Lastmodzeit='+quotedstr(DM1.HISTJUMBOQuerylastmodzeit.AsString)+' and Location='+quotedstr('Augustdorf')+' and DB_YEAR='+inttostr(CHANGED_ARRAY[i].DB_YEAR));
这不起作用,我忘了为什么,但我以前有过这个问题。。。
我被告知需要这样做:
Qry.SQL.Add('and Gestellname=:Gestellname and Kuid= :kuid and ltrim(rtrim(Gestell)) = :email');
然后
Qry.Parameters.ParamByName('Gestellname').Value := Gestellname;
Qry.Parameters.ParamByName('KUID').Value := Kuid;
Qry.Parameters.ParamByName('email').Value := email;
粘贴的示例来自另一个程序,我遇到了同样的问题:)
问题是,我认为,出于某种原因,ADOQuery认为这个字段Etikettnr是整数,因为它的第一条记录是数字的。。。
Sry伙计们。。。这把我的日子搞砸了。但谢谢你的提示。