代码之家  ›  专栏  ›  技术社区  ›  user1937012

ADO存储过程

  •  -1
  • user1937012  · 技术社区  · 7 年前

    我这里有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伙计们。。。这把我的日子搞砸了。但谢谢你的提示。

    1 回复  |  直到 7 年前
        1
  •  0
  •   user1937012    7 年前

    或者只是

    and Etikettnr='+quotedstr(DM1.HISTJUMBOQueryetikettnr.AsString)
    

    有时我会为自己做的蠢事感到惊讶。。。