关于ADOquery的问题?紧急求助!(50分)

  • 主题发起人 主题发起人 Najasna
  • 开始时间 开始时间
N

Najasna

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近用ADO编了一个小程序,发现其在windows98se下速度到还挺快,但是在windows2000
p下打开数据库时极慢,要近四、五分钟的时间,不知为何原因,求教高手们!
 
不会吧。
我倒是用得蛮好的。
 
是不是你沒有內存了
 
用Access??还是其他的?
一般速度不会这么慢啊
 
说详细一点
 
我的确是用的acess,用了一个ADOconnection做连接,用的是ADOtable做数据表,
没有用BDE,但做我改用BDE,用了一个database控制数据库,用ODBC做了一个别名,
用table和query做控件,速度就快了,但没在windows2000下试,
在windows98下到是很快的,另外还发现,在实际操作中,当时新录入的数据,
用Query做控件,用quickrep做报表时,不能预览新录入的数据,也不能打印,
但用table做控件却可以,不知为何?
 
另外,我的机器内存达256M,不太可能不够吧!
 
不会吧?我的运行好久了,也没有出现这种问题啊?你的有问题的贴出来啊
 
选一个查询如下:
unit CQuery_wsxkz;

interface

uses
Windows, Messages, Classes, SysUtils, Graphics, Controls, StdCtrls, Forms,
Dialogs, DBCtrls, DB, DBGrids, Buttons, ADODB, Grids, ExtCtrls, DBTables,
ComCtrls;

type
TFQuery_wsxkz = class(TForm)
DBGrid1: TDBGrid;
Panel1: TPanel;
Panel2: TPanel;
DataSource1: TDataSource;
Panel3: TPanel;
DBNavigator: TDBNavigator;
SpeedButton2: TSpeedButton;
Panel4: TPanel;
SpeedButton4: TSpeedButton;
CheckBox1: TCheckBox;
SpeedButton6: TSpeedButton;
Panel5: TPanel;
DBGrid2: TDBGrid;
DataSource2: TDataSource;
Query1: TQuery;
Query2: TQuery;
Query1Wsxkz_BH: TStringField;
Query1DS: TStringField;
Query1HS: TStringField;
Query1YYEAR: TStringField;
Query1DWMC: TStringField;
Query1FZR: TStringField;
Query1DZ: TStringField;
Query1XKXM: TStringField;
Query1FZJG: TStringField;
Query1FZSJ: TDateTimeField;
Query1YXQX1: TDateTimeField;
Query1YXQX2: TDateTimeField;
Query1HY: TStringField;
Query1Ff: TBooleanField;
Query1Lrr: TStringField;
Query1JYZK: TBooleanField;
Query2Jkz_BH: TStringField;
Query2XM: TStringField;
Query2XB: TStringField;
Query2NN: TSmallintField;
Query2CSSJ: TSmallintField;
Query2DWMC: TStringField;
Query2TXDZ: TStringField;
Query2PXSJN: TStringField;
Query2PXSJY: TStringField;
Query2PXSJR: TStringField;
Query2PXNR: TStringField;
Query2CFSJ: TDateTimeField;
Query2FZJG: TStringField;
Query2FZSJ: TDateTimeField;
alias_wsxkz: TDatabase;
Session1: TSession;
Edit1: TEdit;
Label1: TLabel;
Panel6: TPanel;
StatusBar1: TStatusBar;
Query3: TQuery;
Query1wsxkz_bhcount: TIntegerField;
Label2: TLabel;
Edit2: TEdit;
Panel7: TPanel;
Panel8: TPanel;
Label3: TLabel;
ComboBox1: TComboBox;
Panel9: TPanel;
Edit3: TEdit;
Label4: TLabel;
SpeedButton1: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);

private
{ private declarations }
public
{ public declarations }
end;

var
FQuery_wsxkz: TFQuery_wsxkz;

implementation

uses COKdlg;

{$R *.DFM}

procedure TFQuery_wsxkz.FormCreate(Sender: TObject);
begin
Query1.Open;
Query2.Open;
end;

procedure TFQuery_wsxkz.SpeedButton6Click(Sender: TObject);
begin
close;
end;

procedure TFQuery_wsxkz.SpeedButton1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
if ComboBox1.ItemIndex=0 then
begin
Query1.SQL.Add
('SELECT WSXKZ.* FROM WSXKZ WHERE (((WSXKZ.DWMC) Like ("%"+edit3.text+"%")))
ORDER BY WSXKZ.Wsxkz_BH;');
Query1.Open;
Query1.Refresh;
end
else if ComboBox1.ItemIndex=1 then
begin
Query1.SQL.Add
('SELECT WSXKZ.* FROM WSXKZ WHERE (((WSXKZ.wsxkz_bh) Like
("%"+edit3.text+"%"))) ORDER BY WSXKZ.Wsxkz_BH;');
Query1.Open;
Query1.Refresh;
end
else if ComboBox1.ItemIndex=2 then
begin
Query1.SQL.Add
('SELECT WSXKZ.* FROM WSXKZ WHERE (((WSXKZ.dz) Like ("%"+edit3.text+"%")))
ORDER BY WSXKZ.Wsxkz_BH;');
Query1.Open;
Query1.Refresh;
end
else
begin
messageDlg('没有符合条件的纪录!',mtWarning,[mbOK],0);
close;
end;
end;

procedure TFQuery_wsxkz.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked=true then
Query1.Filtered:=true
else
Query1.Filtered:=False;
end;

procedure TFQuery_wsxkz.SpeedButton3Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add
('SELECT WSXKZ.* FROM WSXKZ WHERE (((WSXKZ.wsxkz_bh)
Like ("%"+edit1.text+"%"))) ORDER BY WSXKZ.Wsxkz_BH;');
Query1.Open;
Query1.Refresh;
end;

procedure TFQuery_wsxkz.SpeedButton4Click(Sender: TObject);
begin
CheckBox1.Visible:=False;
Query2.close;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT DISTINCTROW Count(WSXKZ.Wsxkz_BH)
AS Wsxkz_BHCount, WSXKZ.HY FROM WSXKZ WHERE
(((WSXKZ.FZSJ)>=(#edit1.text#) And (WSXKZ.FZSJ)<=(#edit2.text#))
AND ((WSXKZ.Ff)=True)) GROUP BY WSXKZ.HY;');
Query1.Open;
Query1.Refresh;
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('SELECT DISTINCTROW Count(WSXKZ.Wsxkz_BH)
AS Wsxkz_BHCount FROM WSXKZ where (((WSXKZ.FZSJ)>=(#edit1.text#)
And (WSXKZ.FZSJ)<=(#edit2.text#)) and (wsxkz.ff=true) GROUP BY WSXKZ.Ff;');
Query3.Open;
Query3.Refresh;
statusBar1.SimpleText:='在'+edit1.text+'至'+edit2.Text+'期间,
'+'已发放许可证总数是:'+Query3.Fields[0].asstring+'个';
end;

procedure TFQuery_wsxkz.SpeedButton2Click(Sender: TObject);
begin
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('SELECT DISTINCTROW Count(WSXKZ.Wsxkz_BH)
AS Wsxkz_BHCount FROM WSXKZ where (wsxkz.ff=true) GROUP BY WSXKZ.Ff;');
Query3.Open;
Query3.Refresh;
statusBar1.SimpleText:='已发放许可证总数是:'+Query3.Fields[0].asstring+'个';
end;

end.
 
我要这个星期六才能上网,不能及时回应各位请见谅!!!
 
我所说的是,当时录入的不能马上打印或预览,必须全部退出软件,才能预览或打印
刚才录入的数据?不知为何,另外,请教有关查询时输入日期数据的问题:
即在SQL语言当中输入的查询的条件如:where xx> :P_date1 and xx< :P_date2
时如何在query1.parambyname('p_date1').asdate:=strtodate(edit1.text);
query1.parambyname('P_date2').asdate:=strtodate(edit2.text);
中输入查询的参数,以上在实际运行中输入的参数,系统总提示输入的日期格式不对,
不知为何?请大家赐教!
 
with Query1 do
begin
close;
sql.Clear;
sql.Add('select * from testdate');
sql.Add('where mydate = :tmpdate');//定义动态变量
//动态变量赋值,MaskEdit2.text 用于日期掩码编辑框
ParamByName('tmpdate').Value :=MaskEdit2.Text;
if Prepared = false then Prepare;
Open;
end;
 
输入日期问题已解决,但是不能及时反映刚输入的记录的问题,现在还没有一个比较好的
解决方案,不知那位高手能解决!
 
大哥,你的Query.Refresh要换成Query.Requery() ,新的数据就可以打印了,你没有把数据
读出来,SQL直接对底数据库进行操作,你必须把它重新读入内存一次。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部