with ClientDataSet do begin lvStatResult.Columns.Clear; for i:=0 to FieldCount-1 do begin newColumn:= lvStatResult.Columns.Add; newColumn.Caption:=Fields.Fields[i].FieldName; newColumn.Width:=80; end; lvStatResult.Items.Clear; while not Eof do begin newItem:=lvStatResult.Items.Add; newItem.Caption:=Fields.Fields[0].AsString; for i:=1 to FieldCount-1 do begin newItem.SubItems.Add(Fields.Fields[i].AsString); end; Next; end; end;这是相关代码,看上去也没错误呀
检查一下是不是Fields[i]是不是你想要的字段,改成FieldByName试试
先取出求和的值ShowMessage显示看一下对不对,如果对说明你ListView设置有问题。
為什么這樣寫---Fields.Fields[i]?直接Fields[i]就可以訪問了啊。從你的代碼看,浮點數字段是有select出來的,問題應該不是樓上所說的。先修改成直接訪問Fields[i]看看。 with ClientDataSet do begin lvStatResult.Columns.Clear; for i:=0 to FieldCount-1 do begin newColumn:= lvStatResult.Columns.Add; newColumn.Caption:=Fields[i].FieldName; newColumn.Width:=80; end; lvStatResult.Items.Clear; while not Eof do begin newItem:=lvStatResult.Items.Add; newItem.Caption:=Fields.Fields[0].AsString; for i:=1 to FieldCount-1 do begin newItem.SubItems.Add(Fields[i].AsString); end; Next; end; end;
with ClientDataSet do begin lvStatResult.Columns.Clear; for i:=0 to FieldCount-1 do begin newColumn:= lvStatResult.Columns.Add; newColumn.Caption:=Fields[i].FieldName; newColumn.Width:=80; end; lvStatResult.Items.Clear; while not Eof do begin newItem:=lvStatResult.Items.Add; newItem.Caption:= Fields[0].AsString; for i:=1 to FieldCount-1 do begin newItem.SubItems.Add(Fields[i].AsString); end; Next; end; end;
begin
lvStatResult.Columns.Clear;
for i:=0 to FieldCount-1 do
begin
newColumn:= lvStatResult.Columns.Add;
newColumn.Caption:=Fields.Fields[i].FieldName;
newColumn.Width:=80;
end;
lvStatResult.Items.Clear;
while not Eof do
begin
newItem:=lvStatResult.Items.Add;
newItem.Caption:=Fields.Fields[0].AsString;
for i:=1 to FieldCount-1 do
begin
newItem.SubItems.Add(Fields.Fields[i].AsString);
end;
Next;
end;
end;这是相关代码,看上去也没错误呀
begin
lvStatResult.Columns.Clear;
for i:=0 to FieldCount-1 do
begin
newColumn:= lvStatResult.Columns.Add;
newColumn.Caption:=Fields[i].FieldName;
newColumn.Width:=80;
end;
lvStatResult.Items.Clear;
while not Eof do
begin
newItem:=lvStatResult.Items.Add;
newItem.Caption:=Fields.Fields[0].AsString;
for i:=1 to FieldCount-1 do
begin
newItem.SubItems.Add(Fields[i].AsString);
end;
Next;
end;
end;
猜想.NUMERIC对应到DELPHI字段类型值的时候出问题了.
====
with ClientDataSet do
begin
lvStatResult.Columns.Clear;
for i:=0 to FieldCount-1 do
begin
newColumn:= lvStatResult.Columns.Add;
newColumn.Caption:=Fields[i].FieldName;
newColumn.Width:=80;
end;
lvStatResult.Items.Clear;
while not Eof do
begin
newItem:=lvStatResult.Items.Add;
newItem.Caption:= Fields[0].AsString;
for i:=1 to FieldCount-1 do
begin
newItem.SubItems.Add(Fields[i].AsString);
end;
Next;
end;
end;
1、回复3楼兄弟:ShowMessage显示过,值为0,不是ListView的问题,另外已经试过使用DBGrid,值也是0;
2、回复4楼兄弟:将Fields.Fields[0].AsString改为Fields[0].AsString 效果是一样的;
3、回复6楼兄弟:你的办法我没测试,不过可以肯定的是DOUBLE (18,2)是不正确的,因为没有这个类型,而Float类型精度不够,所以未去尝试;
4、回复7楼兄弟:暂不说你的回答COPY别人的,论说以阁下两个勋章的资历不应该认为这是答案呀,希望认真帮助;
5、回复8楼兄弟:代码已经跟踪了N遍,客户端得到的浮点值就是0,整数值是正确的。SQL语句为一个不带参数的存储过程,因此保证了客户端与SQL查询分析器所执行SQL命令是一致的,但为什么结果却不一样呢?
6、回复10楼兄弟:你的办法我没测试,感觉不正确。请各们高手继续帮忙解决
要是再說,別再說我不認真了,因為現在沒有開發環境。
不好意思,是我误解了,遇到这种奇怪问题心烦,你别往心里去,你在16楼和17楼的方法我试过也不行,让我奇怪的是:客户端代码不变,把存储过程中求和去掉,浮点数显示正常,SUM之后客户端显示就是0,怪事
唉,只要您老人家,不說我拷貝就行。因為我真沒。
今天陪你走到底。 繼續。1.直接把存儲過程貼出來吧( 你的 ClientdataSet 執行的哪一個)2. 你的問題中的查詢分析器執行的代碼是什麼?? 拿出來
沒有不能用。相反我很多時候用DEC ,numeric . MONEY有也有缺點的,不過不是程序方面的,是統計方面有不好的地方。 你解決了就好。呵呵
对于 decimal 和 numeric 数据类型,Microsoft® SQL Server™ 将精度和小数位数的每个特定组合看作是不同的数据类型。例如,decimal(5,5) 和 decimal(5,0) 被当作不同的数据类型。在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric 数据值,且必然使用最小的精度和小数位数。例如,常量 12.345 被转换为 numeric 值,其精度为 5,小数位为 3。从 decimal 或 numeric 向 float 或 real 转换会导致精度损失。从 int、smallint、tinyint、float、real、money 或 smallmoney 向 decimal 或 numeric 转换会导致溢出。默认情况下,在将数字转换为较低精度和小数位数的 decimal 或 numeric 值时,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误。若仅损失精度和小数位数,则不会产生错误。当定义一个NUMERIC型字段时,你需要同时指定整数部分的大小和小数部分的大小。如:MUNERIC(23,0) 一个 NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部分的位数,小数部分可以是零。 以上仅供参考