Sql server Delphi TAdoDataset TFloatField逗号错误

Sql server Delphi TAdoDataset TFloatField逗号错误,sql-server,delphi,sql-server-2008-r2,delphi-2007,Sql Server,Delphi,Sql Server 2008 R2,Delphi 2007,我的平台Delphi 2007和SQL Server 2008 R2 当我发布我的TAdoDataset时,我在Sql profiler中收到以下代码: exec sp_executesql N'UPDATE "MYDBNAME"."dbo"."HESAPISL" SET "ADET"=@P1,"FIYAT"=@P2,"TARIFEID"=@P3,"KRMTUTAR"=@P4,"SGTUTAR"=@P5,"OZELTUTAR"=@P6,"HSTKATKITUTAR"=@P7,"KRMINDORA

我的平台Delphi 2007和SQL Server 2008 R2 当我发布我的TAdoDataset时,我在Sql profiler中收到以下代码:

exec sp_executesql N'UPDATE "MYDBNAME"."dbo"."HESAPISL" SET "ADET"=@P1,"FIYAT"=@P2,"TARIFEID"=@P3,"KRMTUTAR"=@P4,"SGTUTAR"=@P5,"OZELTUTAR"=@P6,"HSTKATKITUTAR"=@P7,"KRMINDORAN"=@P8,"KRMINDTUTAR"=@P9,"OZELINDORAN"=@P10,"OZELINDTUTAR"=@P11,"SGINDORAN"=@P12,"HIKUTUICIADET"=@P13,"HSTKDVORAN"=@P14,"KRMKDVORAN"=@P15,"SGKDVORAN"=@P16,"EKMASRAFTUTAR"=@P17,"HSTPAKETDURUMUID"=@P18,"KRMPAKETDURUMUID"=@P19,"SGPAKETDURUMUID"=@P20,"HSTPAKETEDAHIL"=@P21,"KRMPAKETEDAHIL"=@P22,"SGPAKETEDAHIL"=@P23,"ESKIITEMID"=@P24,"ESKIADET"=@P25,"ESKIHIKUTUICIADET"=@P26,"HSTFYTTUTAR"=@P27,"HKMATRAH"=@P28,"MLYTTUTAR"=@P29,"BAZFYTBIRIM"=@P30 
WHERE "ADET"=@P31 AND "FIYAT"=@P32 AND "TARIFEID"=@P33 AND "KRMTUTAR"=@P34 AND "SGTUTAR"=@P35 AND "OZELTUTAR"=@P36 AND "HSTKATKITUTAR"=@P37 AND "KRMINDORAN"=@P38 AND "KRMINDTUTAR"=@P39 AND "OZELINDORAN"=@P40 AND "OZELINDTUTAR"=@P41 AND "SGINDORAN"=@P42 AND "HIKUTUICIADET"=@P43 AND "HSTKDVORAN"=@P44 AND "KRMKDVORAN"=@P45 AND "SGKDVORAN"=@P46 AND "EKMASRAFTUTAR"=@P47 AND "HSTPAKETDURUMUID"=@P48 AND "KRMPAKETDURUMUID"=@P49 AND "SGPAKETDURUMUID"=@P50 AND "HSTPAKETEDAHIL"=@P51 AND "KRMPAKETEDAHIL"=@P52 AND "SGPAKETEDAHIL"=@P53 AND "ESKIITEMID" IS NULL AND "ESKIADET" IS NULL AND "ESKIHIKUTUICIADET" IS NULL AND "HSTFYTTUTAR"=@P54 AND "HKMATRAH"=@P55 AND "MLYTTUTAR"=@P56 AND "BAZFYTBIRIM"=@P57 AND "HESAPISLID"=@P58 AND "HESAPISLID" IS NULL',N'@P1 float,@P2 float,@P3 int,@P4 float,@P5 float,@P6 float,@P7 float,@P8 float,@P9 float,@P10 float,@P11 float,@P12 float,@P13 numeric(9,2),@P14 numeric(5,2),@P15 numeric(5,2),@P16 numeric(5,2),@P17 float,@P18 int,@P19 int,@P20 int,@P21 bit,@P22 bit,@P23 bit,@P24 int,@P25 float,@P26 numeric(8,2),@P27 float,@P28 float,@P29 float,@P30 numeric(19,4),@P31 float,@P32 float,@P33 int,@P34 float,@P35 float,@P36 float,@P37 float,@P38 float,@P39 float,@P40 float,@P41 float,@P42 float,@P43 numeric(9,2),@P44 numeric(5,2),@P45 numeric(5,2),@P46 numeric(5,2),@P47 float,@P48 int,@P49 int,@P50 int,@P51 bit,@P52 bit,@P53 bit,@P54 float,@P55 float,@P56 float,@P57 numeric(19,4),@P58 int',4,0,078299999999999995,4,0,0,0,31319999999999998,0,0,0,0,0,0,30.00,8.00,8.00,8.00,0,00013333333333337416,0,0,0,0,0,0,7516,6,30.00,0,31333333333333335,0,0,0,6,0,078299999999999995,4,0,0,0,4698,0,0,0,0,0,0,30.00,8.00,8.00,0,0,00020000000000003348,0,0,0,0,0,0,0,47000000000000003,0,0,2.3500,53791
例如:

HSTKDVORAN=8.00这没问题!没问题

但是

FIYAT=007829999999995这会导致异常/问题

浮点字段值以逗号分隔

当我在SQL Management Studio中运行此代码时,它会收到一个错误:

Msg 8144, Level 16, State 2, Line 0
Procedure or function has too many arguments specified.

如何修复它?

如果FIYAT=0078299999999995,则该过程还有一个值0和07829999999995 FIYAT必须为0.078299999995

您可以使用TAdoDataSet或TAdoCommand 设置属性CommandType:cmdStoredProc并从属性Commandtext中选择存储过程。 从属性参数可以看到存储过程的所有参数

<TADODataSet>.Parameters.ParamByName('@FIYAT').Value:=0.078299999999999995;
<TADODataSet>.Parameters.ParamByName('@FIYAT').Value:='0,078299999999999995';  --> not ok
变化

 tHILACMALZ1ADET.AsFloat:= tHILACMALZADET.AsFloat; 
 tHILACMALZ1HIKUTUICIADET.AsFloat:= FDM.tITEMKUTUICIADET.AsFloat; 
 tHILACMALZ1.Post; 

谢谢你的回答。在这个改变之后,我测试了它。在“tHILACMALZ1.Post”之后,我查看了SQL分析器。仍为TFloatField的值生成逗号。BCD字段值为​​用点分隔,但floatfield的值在同一个自动生成的SQL命令中用逗号分隔。并且它导致了错误。tHILACMALZ1HIKUTUICIADET是浮点类型还是tHILACMALZ1HIKUTUICIADET=TFloatFieldDescription的SQL Server字段:HIKUTUICIADET float not Null和Object Inspector:TFloatFieldI正在将视图与我的adodataset一起使用。它有很多表连接。我们部门的经理对我说:只删除一个dbo。一张桌子。他说:这是Ado的错误。真的,我不明白,但它是有效的。所有表和字段定义都有dbo。前缀,但只有一个表没有。当我删除dbo时。在它之前。它起作用了!感谢您所做的一切..我的视图代码中有一部分:。。。dbo.HKIMLIK.HKIMLIK内部连接dbo.HKIMLIK.HKIMLIKID=dbo.HDOSYA.HKIMLIKID内部连接HESAPISL内部连接dbo.HMALZILAC在dbo.HESAPISL.hesapislide=dbo.HMALZILAC.hesapislide在dbo.HDOSYA.HDOSYAID=dbo.HMALZILAC.HDOSYAID在dbo.TITEM.ITEMID=dbo.HESAPISL.ITEMID左外部连接。。。只有HESAPISL没有dbo。前缀在上面代码的中间,就这些。
 tHILACMALZ1ADET.Value := tHILACMALZADET.AsFloat; 
 tHILACMALZ1HIKUTUICIADET.Value := FDM.tITEMKUTUICIADET.AsFloat; 
 tHILACMALZ1.Post; 
 tHILACMALZ1ADET.AsFloat:= tHILACMALZADET.AsFloat; 
 tHILACMALZ1HIKUTUICIADET.AsFloat:= FDM.tITEMKUTUICIADET.AsFloat; 
 tHILACMALZ1.Post;