想问高手一个问题!
大家在开发软件的时候,一个FORM 使用一个ADODataset 或 ADOQUERY 还是多个FORM共用一个ADODataset 或 ADOQUERY ?
还是一个FORM 用一个 ADODataset 和 ADOQUERY , 或者 多个FORM 共用ADODataset 和 ADOQUERY
adodataset用来更新,插入和删除,adoquery 用来查询?我这里碰到了个奇怪的问题!
我有个表里有10条记录,但ADODATASET.NEXT 却只能显示前2条记录,不管你再怎么点NEXT按钮,都没用. 除非点 最后一条记录按钮才能显示最后一条记录.如果红色的地方我用直接 DataModule1.dsadodp.open; 这个代替,那么就可以NEXT按钮就可以正常查询数据,但如果是通过输入一个单号查找记录后,就不行了.因为这时数据集里就一条数据了
(我是一个FORM,一个ADODATASET)
unit U_dpdj;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask; const sx_wmmessage = wm_user+100;
er_message = wm_user+10001;
info_message= wm_user+10002;type
Tf_dpdj = class(TForm)
lbl1: TLabel;
lbl2: TLabel;
dbcbbeq_num: TDBComboBox;
lbl3: TLabel;
dbcbbdp_type: TDBComboBox;
lbl4: TLabel;
dbcbbdp_dep: TDBComboBox;
lbl5: TLabel;
dbcbbdp_use: TDBComboBox;
lbl6: TLabel;
dbedtdp_date: TDBEdit;
lbl7: TLabel;
dbcbbdp_po: TDBComboBox;
lbl8: TLabel;
dbmmodp_re: TDBMemo;
lbl9: TLabel;
dbedtdp_num: TDBEdit;
btn1: TButton;
btn2: TButton;
edt1: TEdit;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
procedure sxwmmessage(var msg:TMessage); message sx_wmmessage;
function connect(sql1:string):string;
procedure lockbtn;
procedure unlockbtn;
procedure lockedit;
procedure unlockedit;
procedure autonum;
{ Private declarations }
public { Public declarations }
end;var
f_dpdj: Tf_dpdj;
riqi,num:string;implementation
uses u_main,dataconn,U_GJDJ;
{$R *.dfm}{自动编号}
procedure Tf_dpdj.autonum;
begin
with DataModule1.qry2 do
begin
Close;
SQL.Clear;
SQL.Text:='select dp_id+1 as id from dpdjb order by dp_id desc';
Open;
{单据编号}
riqi:=FormatDateTime('yyyymmdd',Date);
num:=riqi+IntToStr(FieldValues['id']);
end;
end; {按钮锁}
procedure Tf_dpdj.lockbtn;
begin
btn1.Enabled:=False;
btn2.Enabled:=False;
end;procedure tF_DPDJ.unlockbtn;
begin
btn1.Enabled:=true;
btn2.Enabled:=True;
end;procedure Tf_dpdj.lockedit;
begin
edt1.Visible:=False;
dbedtdp_num.Visible:=True;
end;procedure Tf_dpdj.unlockedit;
begin
edt1.Visible:=true;
dbedtdp_num.Visible:=False;
end; {连接函数}
function Tf_dpdj.connect(sql1:string):string;
begin
DataModule1.dsadosdp.Active:=False;
DataModule1.dsadosdp.Close;
DataModule1.dsadosdp.Parameters.Clear;
DataModule1.dsadosdp.CommandText:=sql1;
DataModule1.dsadosdp.Parameters.ParseSQL(DataModule1.dsadosdp.CommandText,True);
DataModule1.dsadosdp.Active:=True;
DataModule1.dsadosdp.Open;
end;{工具栏按钮}
procedure Tf_dpdj.sxwmmessage(var msg:TMessage);
var sqstr:string;
begin
sqstr:='select * from dpdjb';
if msg.Msg = sx_wmmessage then
begin
if Self.Active = True then
begin
case msg.WParam of
1:
begin
unlockbtn;
unlockedit;
btn1.Enabled:=True;
btn1.Caption:='查询';
btn2.Caption:='删除';
edt1.SetFocus;
edt1.Text:='';
DataModule1.dsadosdp.Close;
f_mian.btn4.Enabled:=False;
f_mian.btn6.Enabled:=True;
end;
2:
begin
unlockbtn;
lockedit;
autonum;
DataModule1.dsadosdp.Open;
DataModule1.dsadosdp.Insert;
dbedtdp_num.Text:=num;
dbedtdp_num.Enabled:=False;
dbedtdp_date.Text:=DateToStr(Now);
btn1.Caption:='添加';
btn2.Caption:='退出';
f_gjdj.locktools;
f_mian.btn6.Enabled:=False;
f_mian.btn4.Enabled:=True;
end;
3: {第一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.First;
end;
4: {下一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.Next;
end;
5: {上一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.Prior;
end;
6: {最后一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.Last;
end;
end;
end;
end;
end;
procedure Tf_dpdj.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Self.free;
f_gjdj.locktools;
end;procedure Tf_dpdj.FormCreate(Sender: TObject);
begin
dbedtdp_date.Text:=DateToStr(Now);
with DataModule1.qry2 do
begin
Close;
SQL.Clear;
SQL.Text:='select eq_num from cmper where eq_state=''正常'' ';
Open;
while not Eof do
begin
dbcbbeq_num.Items.Add(FieldValues['eq_num']);
Next;
end;
Close;
SQL.Clear;
SQL.Text:='select eq_use,eq_usedep,eq_type from cmper order by eq_usedep';
Open;
while not Eof do
begin
dbcbbdp_type.Items.Add(FieldValues['eq_type']);
dbcbbdp_dep.Items.Add(FieldValues['eq_usedep']);
dbcbbdp_use.Items.Add(FieldValues['eq_use']);
dbcbbdp_po.Items.Add(FieldValues['eq_use']);
Next;
end;
end;
end;procedure Tf_dpdj.btn1Click(Sender: TObject);
var sqlstr:string;
begin
sqlstr:='select * from dpdjb where dp_num='''+edt1.Text+'''';
if btn1.Caption = '查询' then
begin
if (edt1.Text='') then
begin
PostMessage(f_mian.Handle,er_message,0,0);
Exit;
end else
begin
connect(sqlstr);
lockedit;
dbedtdp_num.ReadOnly:=True;
f_gjdj.unlocktools;
btn1.Enabled:=False;
end;
Exit;
end;
if btn1.Caption = '添加' then
begin
if (dbcbbeq_num.Text='') or (dbcbbdp_type.Text='') or (dbcbbdp_dep.Text='') or
(dbcbbdp_use.Text='') or (dbcbbdp_po.Text='') then
begin
PostMessage(f_mian.Handle,er_message,0,0);
end else
begin
DataModule1.con1.BeginTrans;
try
DataModule1.dsadosdp.UpdateBatch;
PostMessage(f_mian.Handle,info_message,0,0);
DataModule1.con1.CommitTrans;
DataModule1.dsadosdp.Close;
f_gjdj.unlocktools;
except
DataModule1.dsadosdp.CancelBatch;
DataModule1.con1.RollbackTrans;
PostMessage(f_gjdj.Handle,er_message,2,0);
DataModule1.dsadosdp.Close;
f_gjdj.unlocktools;
end; end;
end;
end;end.
大家在开发软件的时候,一个FORM 使用一个ADODataset 或 ADOQUERY 还是多个FORM共用一个ADODataset 或 ADOQUERY ?
还是一个FORM 用一个 ADODataset 和 ADOQUERY , 或者 多个FORM 共用ADODataset 和 ADOQUERY
adodataset用来更新,插入和删除,adoquery 用来查询?我这里碰到了个奇怪的问题!
我有个表里有10条记录,但ADODATASET.NEXT 却只能显示前2条记录,不管你再怎么点NEXT按钮,都没用. 除非点 最后一条记录按钮才能显示最后一条记录.如果红色的地方我用直接 DataModule1.dsadodp.open; 这个代替,那么就可以NEXT按钮就可以正常查询数据,但如果是通过输入一个单号查找记录后,就不行了.因为这时数据集里就一条数据了
(我是一个FORM,一个ADODATASET)
unit U_dpdj;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask; const sx_wmmessage = wm_user+100;
er_message = wm_user+10001;
info_message= wm_user+10002;type
Tf_dpdj = class(TForm)
lbl1: TLabel;
lbl2: TLabel;
dbcbbeq_num: TDBComboBox;
lbl3: TLabel;
dbcbbdp_type: TDBComboBox;
lbl4: TLabel;
dbcbbdp_dep: TDBComboBox;
lbl5: TLabel;
dbcbbdp_use: TDBComboBox;
lbl6: TLabel;
dbedtdp_date: TDBEdit;
lbl7: TLabel;
dbcbbdp_po: TDBComboBox;
lbl8: TLabel;
dbmmodp_re: TDBMemo;
lbl9: TLabel;
dbedtdp_num: TDBEdit;
btn1: TButton;
btn2: TButton;
edt1: TEdit;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
procedure sxwmmessage(var msg:TMessage); message sx_wmmessage;
function connect(sql1:string):string;
procedure lockbtn;
procedure unlockbtn;
procedure lockedit;
procedure unlockedit;
procedure autonum;
{ Private declarations }
public { Public declarations }
end;var
f_dpdj: Tf_dpdj;
riqi,num:string;implementation
uses u_main,dataconn,U_GJDJ;
{$R *.dfm}{自动编号}
procedure Tf_dpdj.autonum;
begin
with DataModule1.qry2 do
begin
Close;
SQL.Clear;
SQL.Text:='select dp_id+1 as id from dpdjb order by dp_id desc';
Open;
{单据编号}
riqi:=FormatDateTime('yyyymmdd',Date);
num:=riqi+IntToStr(FieldValues['id']);
end;
end; {按钮锁}
procedure Tf_dpdj.lockbtn;
begin
btn1.Enabled:=False;
btn2.Enabled:=False;
end;procedure tF_DPDJ.unlockbtn;
begin
btn1.Enabled:=true;
btn2.Enabled:=True;
end;procedure Tf_dpdj.lockedit;
begin
edt1.Visible:=False;
dbedtdp_num.Visible:=True;
end;procedure Tf_dpdj.unlockedit;
begin
edt1.Visible:=true;
dbedtdp_num.Visible:=False;
end; {连接函数}
function Tf_dpdj.connect(sql1:string):string;
begin
DataModule1.dsadosdp.Active:=False;
DataModule1.dsadosdp.Close;
DataModule1.dsadosdp.Parameters.Clear;
DataModule1.dsadosdp.CommandText:=sql1;
DataModule1.dsadosdp.Parameters.ParseSQL(DataModule1.dsadosdp.CommandText,True);
DataModule1.dsadosdp.Active:=True;
DataModule1.dsadosdp.Open;
end;{工具栏按钮}
procedure Tf_dpdj.sxwmmessage(var msg:TMessage);
var sqstr:string;
begin
sqstr:='select * from dpdjb';
if msg.Msg = sx_wmmessage then
begin
if Self.Active = True then
begin
case msg.WParam of
1:
begin
unlockbtn;
unlockedit;
btn1.Enabled:=True;
btn1.Caption:='查询';
btn2.Caption:='删除';
edt1.SetFocus;
edt1.Text:='';
DataModule1.dsadosdp.Close;
f_mian.btn4.Enabled:=False;
f_mian.btn6.Enabled:=True;
end;
2:
begin
unlockbtn;
lockedit;
autonum;
DataModule1.dsadosdp.Open;
DataModule1.dsadosdp.Insert;
dbedtdp_num.Text:=num;
dbedtdp_num.Enabled:=False;
dbedtdp_date.Text:=DateToStr(Now);
btn1.Caption:='添加';
btn2.Caption:='退出';
f_gjdj.locktools;
f_mian.btn6.Enabled:=False;
f_mian.btn4.Enabled:=True;
end;
3: {第一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.First;
end;
4: {下一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.Next;
end;
5: {上一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.Prior;
end;
6: {最后一条}
begin
lockedit;
connect(sqstr);
DataModule1.dsadosdp.Last;
end;
end;
end;
end;
end;
procedure Tf_dpdj.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Self.free;
f_gjdj.locktools;
end;procedure Tf_dpdj.FormCreate(Sender: TObject);
begin
dbedtdp_date.Text:=DateToStr(Now);
with DataModule1.qry2 do
begin
Close;
SQL.Clear;
SQL.Text:='select eq_num from cmper where eq_state=''正常'' ';
Open;
while not Eof do
begin
dbcbbeq_num.Items.Add(FieldValues['eq_num']);
Next;
end;
Close;
SQL.Clear;
SQL.Text:='select eq_use,eq_usedep,eq_type from cmper order by eq_usedep';
Open;
while not Eof do
begin
dbcbbdp_type.Items.Add(FieldValues['eq_type']);
dbcbbdp_dep.Items.Add(FieldValues['eq_usedep']);
dbcbbdp_use.Items.Add(FieldValues['eq_use']);
dbcbbdp_po.Items.Add(FieldValues['eq_use']);
Next;
end;
end;
end;procedure Tf_dpdj.btn1Click(Sender: TObject);
var sqlstr:string;
begin
sqlstr:='select * from dpdjb where dp_num='''+edt1.Text+'''';
if btn1.Caption = '查询' then
begin
if (edt1.Text='') then
begin
PostMessage(f_mian.Handle,er_message,0,0);
Exit;
end else
begin
connect(sqlstr);
lockedit;
dbedtdp_num.ReadOnly:=True;
f_gjdj.unlocktools;
btn1.Enabled:=False;
end;
Exit;
end;
if btn1.Caption = '添加' then
begin
if (dbcbbeq_num.Text='') or (dbcbbdp_type.Text='') or (dbcbbdp_dep.Text='') or
(dbcbbdp_use.Text='') or (dbcbbdp_po.Text='') then
begin
PostMessage(f_mian.Handle,er_message,0,0);
end else
begin
DataModule1.con1.BeginTrans;
try
DataModule1.dsadosdp.UpdateBatch;
PostMessage(f_mian.Handle,info_message,0,0);
DataModule1.con1.CommitTrans;
DataModule1.dsadosdp.Close;
f_gjdj.unlocktools;
except
DataModule1.dsadosdp.CancelBatch;
DataModule1.con1.RollbackTrans;
PostMessage(f_gjdj.Handle,er_message,2,0);
DataModule1.dsadosdp.Close;
f_gjdj.unlocktools;
end; end;
end;
end;end.
解决方案 »
- 提前庆五一,大家谈谈假期都干嘛去!
- 如何获取U盘注册列表号(Delphi源码)
- 编译错!!字符串这样赋值有错吗??
- 超快速的缩略图工具,有兴趣的可以研究一下。
- 怎么用DELPHI把ACCESS数据库导出到DBF文件.急啊!!!
- 在POPUMENU下有10个menuitem,怎么才可以实现:当其中一个的checkd为true时,另外九个的checked为fasle?
- Delphi中哪个函数和VB中的Right函数等价!
- 在dbgrid里的滚动条的颜色怎么设置?(我的可用分不够,可以到别的贴子上拿分)
- 为何DELPHI中的报表不能连续打印???
- 为什麽 DELPHI5.0 编译链接需要10分钟?
- realaudio1控件本身的播放暂停工具条的隐藏设置~
- 如何拦载有dbgrideh的自动提交数据的功能
begin
DataModule1.dsadosdp.Active:=False;
DataModule1.dsadosdp.Close;
DataModule1.dsadosdp.Parameters.Clear;
DataModule1.dsadosdp.CommandText:=sql1;
DataModule1.dsadosdp.Parameters.ParseSQL(DataModule1.dsadosdp.CommandText,True);
DataModule1.dsadosdp.Active:=True;
DataModule1.dsadosdp.Open;
end; 你看这个是不是只要我更换了SQL1里的语句,再执行的话,就出来新的记录集是吗?为什么我更换了却NEXT 只能显示前2条记录,后面的都显示不出来啊!
OPEN 和 connect(sqstr);
执行到底有什么不同呢?谢谢!
里面也有OPEN;而ADODATASET.OPEN;
也是打开数据数据集啊!