SQL语句出错! (200分)

  • 主题发起人 主题发起人 huajianguo
  • 开始时间 开始时间
H

huajianguo

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库应用程序。三层结构
数据库:ORACLE8i
服务器端:一个窗口。一个远程数据模块:有(一个ADOConnection用于连接数据库,一个ADOQuery指向ADOConnection,一个DataSetProvider1指向ADOQuery);
客户端:某个窗口有:SocketConnection,指向服务器端。一个ClientDataSet1(为方便我重命名为c1)指向SocketConnection。
var i:integer;
begin
....
c1.close;
c1.commandtext:='select count(*) as num from mytable where myfield=1234';
c1.open;
i:=c1.fieldbyname('num').asinteger;
....
end;
程序运行到这里时出现:发生以下错误:“Value of field 'num'is out of range”。
请问各位这是怎么回事?
在编辑时如果在c1的commandtext里输入以上SQL语句时,c1的active可以置为true;
但此时如果加上一个DataSource和一个DBEdit1时并将它们连接上。此时在DBEdit1中就会出现“BCD overflow”字样!而不是我期望的数字
热切期盼!
如果把上述SQL语句改为:
c1.close;
c1.commandtext:='select * from mytable where myfield=1234';
c1.open;
i:=c1.RecordCount;
则不会出错(不要叫我就用这个方法。我的网络支持不住这么大的数据流量)
其它动词(如update,insert....)的SQL语句用这个c1也不会出错,
唯独在select count(*) from 时出错不管加不加字段别名时出错
 
你的数据不会超过几十亿条吧!
 
查不到数据,num=null,所以num.asinteger出错
 
不对
count(*)如果找不到记录会返回0,至少sqlserver这样oracle不了解
可以select count(具体的字段) from table试试
 
FieldByName 后得参数应该为一个字段名, 而as 后面得 只能算个别名,而不是表中的字段名,应该是这样出错吧?
 
FieldName就是别名,数据库字段名称是OrignName,但很多是否为空!
 
num值太大了
integer最大是2147483647
需要用int64
var
i:Int64;
i:=c1.fieldbyname('num').asint64
 
BCD的enabled:=false就可以了
 
我在SQL Explorer中使用select count(*) as num from ....不会出错没有记录时返回结果为0。在ORACLE中支持这种语句写法。我在C/S结构中这样使用也完全正常。
TO ycxy :这样编译通不过。是不是有什么单元文件没有引用?我现在的记录只有几十万条记录,但增加很快每天有一万条。
TO 大大翁:BCD是什么东东呀。我用BCD.enabled:=false;说BCD没有定义。BCD是c1的一个属性吗?该怎么用?
 
i:=c1.fieldbyname('num').asBCD;
 
To ycxy:
我不知道把i定义成什么类型的变量?请多指教
var i:integer;
begin
c1.close;
c1.commandtext:=.....
c1.open;
i:=c1.fieldbyname('num').asbcd;
end;
以上语句编译时出错,说数据类型不一致。
 
太简单了。是超出范围。转成字符串就行了
var i:integer;
begin
c1.close;
c1.commandtext:='select to_char(count(*)) as num from mytable '
c1.open;
i:=strtoint(c1.fieldbyname('num').asstring);
end;
 
var
i:int64

i:Extended
 
超出范围。跟一下就知道了。
 
多人接受答案了。
 
后退
顶部