我这里有Delphi 10.2.2,我想我可能会使用错误的东西。
我有一个包含以下参数@etikettnr nvarchar(50)
的存储过程
Delphi中的相同过程具有数据类型字符串,大小为50。
由于某些未知原因,如果我从这样的过程传递一个来自FDQuery的String:
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
我不能相信这让我又来了。存储过程不是问题。该问题之前是一个查询。这样做了:
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是整数,因为它的第一个记录是nummeric ...
老兄们......这搞砸了我的一天。但是,谢谢你的提示。
答案 0 :(得分:0)
或只是
and Etikettnr='+quotedstr(DM1.HISTJUMBOQueryetikettnr.AsString)
有时候我会对自己做的蠢事感到惊讶......