2012-09-13 48 views
1

我的平台德尔福2007和SQL Server 2008 R2 当我后我TAdoDataset,我收到在SQL事件探查器验证码:德尔福TAdoDataset TFloatField逗号错误

exec sp_executesql N'UPDATE "MYDBNAME"."dbo"."HESAPISL" SET "ADET"[email protected],"FIYAT"[email protected],"TARIFEID"[email protected],"KRMTUTAR"[email protected],"SGTUTAR"[email protected],"OZELTUTAR"[email protected],"HSTKATKITUTAR"[email protected],"KRMINDORAN"[email protected],"KRMINDTUTAR"[email protected],"OZELINDORAN"[email protected],"OZELINDTUTAR"[email protected],"SGINDORAN"[email protected],"HIKUTUICIADET"[email protected],"HSTKDVORAN"[email protected],"KRMKDVORAN"[email protected],"SGKDVORAN"[email protected],"EKMASRAFTUTAR"[email protected],"HSTPAKETDURUMUID"[email protected],"KRMPAKETDURUMUID"[email protected],"SGPAKETDURUMUID"[email protected],"HSTPAKETEDAHIL"[email protected],"KRMPAKETEDAHIL"[email protected],"SGPAKETEDAHIL"[email protected],"ESKIITEMID"[email protected],"ESKIADET"[email protected],"ESKIHIKUTUICIADET"[email protected],"HSTFYTTUTAR"[email protected],"HKMATRAH"[email protected],"MLYTTUTAR"[email protected],"BAZFYTBIRIM"[email protected] 
WHERE "ADET"[email protected] AND "FIYAT"[email protected] AND "TARIFEID"[email protected] AND "KRMTUTAR"[email protected] AND "SGTUTAR"[email protected] AND "OZELTUTAR"[email protected] AND "HSTKATKITUTAR"[email protected] AND "KRMINDORAN"[email protected] AND "KRMINDTUTAR"[email protected] AND "OZELINDORAN"[email protected] AND "OZELINDTUTAR"[email protected] AND "SGINDORAN"[email protected] AND "HIKUTUICIADET"[email protected] AND "HSTKDVORAN"[email protected] AND "KRMKDVORAN"[email protected] AND "SGKDVORAN"[email protected] AND "EKMASRAFTUTAR"[email protected] AND "HSTPAKETDURUMUID"[email protected] AND "KRMPAKETDURUMUID"[email protected] AND "SGPAKETDURUMUID"[email protected] AND "HSTPAKETEDAHIL"[email protected] AND "KRMPAKETEDAHIL"[email protected] AND "SGPAKETEDAHIL"[email protected] AND "ESKIITEMID" IS NULL AND "ESKIADET" IS NULL AND "ESKIHIKUTUICIADET" IS NULL AND "HSTFYTTUTAR"[email protected] AND "HKMATRAH"[email protected] AND "MLYTTUTAR"[email protected] AND "BAZFYTBIRIM"[email protected] AND "HESAPISLID"[email protected] 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(这是OK!没问题)

但是

FIYAT = 0,078299999999999995(导致异常/问题)

浮点字段值以逗号分隔。

当我运行这段代码(在SQL Management Studio中),它会得到一个错误:

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

我怎样才能解决这个问题?

回答

0

如果FIYAT = 0,078299999999999995则程序具有一个多个值(0和078299999999999995) FIYAT必须0.078299999999999995

可以使用TAdoDataSet或TAdoCommand 组属性的CommandType:cmdStoredProc,然后从存储过程属性Commandtext。 从属性参数可以看到存储过程的所有参数。

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

值是变体。如果您使用TAdoDataset到

property CommandType: cmdText 
property CommandText: 'select HSTKDVORAN, FIYAT from MYDBNAME.dbo.HESAPISL'; 

<TAdoDataset>.FieldByName('FIYAT').AsFloat:= 0.078299999999999995; 

代码从注释链接表MYDBNAME.dbo.HESAPISL

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

变化

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

谢谢您必须指定参数

你的答案。 这个改变后我测试了它。 'tHILACMALZ1.Post'之后,我查看了SQL Profiler。逗号仍为TFloatField的值生成。 BCD字段值由点分隔,但floatfield的值在相同的自动生成的SQL命令中用逗号分隔。这是造成错误。 – user1667867

+0

是tHILACMALZ1HIKUTUICIADET浮点类型或者是tHILACMALZ1HIKUTUICIADET SQL服务器= TFloatField – Ravaut123

+0

说明领域:HIKUTUICIADET浮动(NOT NULL)和 对象检查:TFloatField – user1667867