还是不行,如何读取SQL统计的数值?SQL.Add('Select COUNT(*) AS opp FROM Message'); (10分)

  • 主题发起人 主题发起人 vpp
  • 开始时间 开始时间
V

vpp

Unregistered / Unconfirmed
GUEST, unregistred user!
我用SQL语句统计数据库的全部记录数,同时要将数据库显示,
有一个DBGrid1,一个Query1,一个Datasource1,一个Edit1,一个按钮。
DataSource1的dataset属性为Query1,
DBGrid1的datasource属性为DataSource1
按下按钮后:
With Query1 do
begin
SQL.Clear;
SQL.Add('Select COUNT(*) as opp FROM MessageTable');
ExecSQl; //如果改为open,则提示‘table is read only'的错误信息,我已经将Query1的RequestLive属性设置为true。
//ExecSQL,则什么也不显示。
Edit.Text:=Fields[0].AsString; //提示“List index out of bound(0)”的错误信息
//如果改为Edit1.Text:=FieldByName('opp').AsString;则提示“Query1:Field 'opp' not found”的错误信息
close;
SQL.Clear;
SQL.Add('select * from MessageTable');
Open;
end;
我想知道如何将opp这个值取出来,只在一个edit中显示,同时DBGrid1要显示数据库。
 
edit1.text:=query1.fields[0].asstring;
 
edit1.text:=query1.fieldbyname('opp').asstring;
 
雪中漫步,不行的,提示“List index out of bound(0)”的错误信息。

houanl,也不行,提示“Query1:Field 'opp' not found”的错误信息。
 
with Query1 do
begin
SQL.Clear;
SQL.Add('select * from Message');
Open;
Edit.Text := IntToStr(RecordCount);
end;
 
你的语句写错了,应该这样写
with Query1 do
begin
SQL.Clear;
SQL.Add('Select COUNT(*) AS opp FROM Message');
ExecSQl;
Edit.Text:=FieldByName('opp').AsString;
SQL.Clear;
SQL.Add('select * from Message');
Open;
end;
 
^_^全错了!
easiest
 
with Query1 do
begin
SQL.Clear;
SQL.Add('select * from Message');
Open;
edit1.text:=inttostr(recordcount);
end;

或者:
with Query1 do
begin
SQL.Clear;
SQL.Add('select count(*) from Message');
edit1.text:=fields[0].asstring;
close;
SQL.Clear;
SQL.Add('select * from Message');
Open;
end;
 
SORRY,不应该是ExecSQL,应该是Open,ExceSQL不带返回值的。:)
 
不行,写成下面这样也提示错误“List index out of bound(0)”
With Query1 do
begin
SQL.Clear;
SQL.Add('Select COUNT(*) as opp FROM MessageTable');
ExecSQl;
Edit.Text:=Fields[0].AsString;
close;
SQL.Clear;
SQL.Add('select * from MessageTable');
Open;
end;
 
不能用ExecSQL执行SQL语句的,这样取不到值,直接OPEN就可以了。
 
直接OPEN 就可以,或者针对“List index out of bound(0)”它,你可以
select count(*),* FROM MessageTable'试下了。
 
With Query1 do
begin
SQL.Clear;
SQL.Add('Select COUNT(*) as opp FROM MessageTable');
open;
Edit.Text:=Fields[0].asstring;
close;
SQL.Clear;
SQL.Add('select * from MessageTable');
Open;
end;
 
with Query1 do
begin
if Active then Active := False;
SQL.Clear;
SQL.Add('SELECT COUNT(*) AS opp FROM MessageTable');
Active := True;(或Open;)
Edit1.Text := FieldByName('opp').AsString;
end;
 
seven_918,不行,提示"capability not supported"的错误信息。
 
SQL.Add('SELECT COUNT(*) AS opp FROM MessageTable');
改为
SQL.Add('SELECT COUNT(*) FROM MessageTable');
并用
Open;代替ExecSQl;
试试
 
begin
query1.close;
query1.SQL.Clear;
query1.SQL.text='SELECT COUNT(*) opp FROM MessageTable';
query1.sql.open;
Edit1.Text := inttostr(query1.fields[0].asinteger);
end;
 
to vpp:
我在机器上(Win98+D6)试过了,可以的。
象你说的这种情况,有可能发生。你是不是在已有的程序中改写?你试试新建一个程序看
看,应该是可以的。Delphi有时候是这样的,我也碰到过“capability not supported”这
样的提示,重新做一遍就可以了!
 
With Query1 do
begin
Close;
SQL.Clear;
SQL.Add('Select COUNT(*) as opp FROM MessageTable');
open;
Edit.Text:=Fields[0].asstring;
close;
SQL.Clear;
SQL.Add('select * from MessageTable');
Open;
end;
 
后退
顶部