Table与dbgrid间发生的怪现象

feng_zi 2001-09-10 10:28:41
我的Ttable,打开时,本来只有n条记录,可是在与之相连接的dbgrid中却显示了2n条记录,记录重复显示了,在打开Ttable时,我用了过滤,执行过一次循环(为了计数,得出的记录数是正确的),每当我拖动dbgrid的滚动条时,显示的记录又会自动增加,请问这是什么原因呢,劳烦大侠出手!
...全文
162 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng_zi 2001-09-12
  • 打赏
  • 举报
回复
问题还没解决,没有人理会了吗?
feng_zi 2001-09-11
  • 打赏
  • 举报
回复
谁帮我看一下源程序好吗?
这样的问题不能解决吗?难道一定非得用query?这个表可是有好多字段呀,重新创建要花好多时间,程序还有好几个模块的。
feng_zi 2001-09-10
  • 打赏
  • 举报
回复
我用了两个Tdbgrid与Ttable相连接,这个应该不是问题的所在吧,
feng_zi 2001-09-10
  • 打赏
  • 举报
回复
to jabmoon:过滤应该没问题的,我想得到过滤之后的记录数,而recordcount得到的是总数呀
源程序如下:
unit frm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, ComCtrls, ToolWin, Buttons, StdCtrls;

type
Tfrmmain = class(TForm)
ToolBar1: TToolBar;
StatusBar1: TStatusBar;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
sb_return: TSpeedButton;
sb_cancel: TSpeedButton;
sb_commit: TSpeedButton;
sb_sc: TSpeedButton;
sb_zj: TSpeedButton;
sb_xg: TSpeedButton;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
gdjdm: TEdit;
bmdm: TEdit;
xlbh: TEdit;
gh: TEdit;
procedure sb_xgClick(Sender: TObject);
procedure sb_zjClick(Sender: TObject);
procedure sb_scClick(Sender: TObject);
procedure sb_commitClick(Sender: TObject);
procedure sb_cancelClick(Sender: TObject);
procedure sb_returnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure show_byq(gdjdm:pchar;bmdm:pchar;bmdm1:pchar;xlbh:pchar;gh:pchar);stdcall;export;
function get_pbzh:string;
function get_pbbh:string;
var
frmmain: Tfrmmain;
i_old,i_new:integer;
implementation

uses pmx, pdata, pbcsb;

{$R *.DFM}
procedure show_byq(gdjdm:pchar;bmdm:pchar;bmdm1:pchar;xlbh:pchar;gh:pchar);stdcall;export;
begin
try
frmmain:=tfrmmain.Create(application);
Data:= TData.create(application);
bdqDlg:=TbdqDlg.create(application);
pbxhDlg:=TpbxhDlg.create(application);
frmmain.gdjdm.text:=string(gdjdm);
frmmain.bmdm.text:=string(bmdm);
frmmain.xlbh.text:=string(xlbh);
frmmain.gh.text:=string(gh);
with data.Qgtda do
begin
close;
sql.clear;
sql.add('select gh,gbs from gtda where xlbh='''+data.tpbdaxlbh.asstring+'''');
open;
end;
with data.Tpbda do
begin
close;
filtered:=true;
filter:='xlbh='''+frmmain.xlbh.text+'''';
open;
first;
i_old:=0;
while not eof do
begin
inc(i_old);
next;
end;
first;
i_new:=i_old;
frmmain.statusbar1.panels[0].text:=' 记录总数:' +inttostr(i_new);
end;

if string(bmdm)<>string(bmdm1) then begin
showmessage('当前操作者与线路不属于同一部门,只能查询!');
frmmain.sb_xg.enabled:=false;
frmmain.sb_zj.enabled:=false;
frmmain.sb_sc.enabled:=false;
frmmain.sb_commit.enabled:=false;
frmmain.sb_cancel.enabled:=false;
end;

frmmain.showmodal;
finally
frmmain.free;
data.free;
bdqdlg.free;
pbxhdlg.free;
end;
end;
function get_pbzh:string;
var s_jm,s_pbzh,s_bh:string;
i_bh,i_bh1:integer;
begin
with data.qbmjm do
begin
close;
ParamByName('bmdm').asstring:=frmmain.bmdm.text;
open;
s_jm:=fieldbyname('jm').asstring;
if length(s_jm)=2 then
s_jm:='0';
end;

with data.qpbzh do
begin
close;
parambyname('jm').asstring:=s_jm;
open;
i_bh:=fieldbyname('bh').asinteger;
if i_bh<>0 then
s_pbzh:=s_jm+fieldbyname('bh').asstring;
end;
if i_bh>999 then
begin
with data.qpbzh1 do
begin
close;
parambyname('jm').asstring:=s_jm;
open;
i_bh1:=1;
if not isempty then
begin
first;
while not eof do
begin
if fieldbyname('bh').asinteger<>i_bh1 then
last
else begin
inc(i_bh1);
next;
end;
end;
end;
end;
s_bh:=inttostr(i_bh1);
if length(s_bh)=1 then
s_bh:='00'+s_bh
else if length(s_bh)=2 then
s_bh:='0'+s_bh;
s_pbzh:=s_jm+s_bh;
end;
result:=s_pbzh;
end;
function get_pbbh:string;
var s_bh:string;
i_bh:integer;
begin
with data.qpbbh do
begin
close;
open;
s_bh:=fieldbyname('bh').asstring;
i_bh:=fieldbyname('bh').asinteger;
end;
if i_bh=0 then
begin
with data.qpbbh1 do
begin
close;
open;
first;
i_bh:=1;
while not eof do
begin
if fieldbyname('bh').asinteger<>i_bh then
last
else begin
inc(i_bh);
next;
end;
end;
end;
s_bh:=inttostr(i_bh);
if length(s_bh)=1 then
s_bh:='000'+s_bh
else if length(s_bh)=2 then
s_bh:='00'+s_bh
else if length(s_bh)=3 then
s_bh:='0'+s_bh;
end;
result:='2202'+s_bh;
end;
procedure Tfrmmain.sb_xgClick(Sender: TObject);
begin
if not data.tpbda.isempty then begin
data.tpbda.edit;
bdqdlg.showmodal;
end else
showmessage('没有可以修改的记录!');
end;

procedure Tfrmmain.sb_zjClick(Sender: TObject);
begin
data.tpbda.insert;
bdqdlg.showmodal;
end;

procedure Tfrmmain.sb_scClick(Sender: TObject);
begin
if not data.tpbda.isempty then
data.tpbda.delete;
end;

procedure Tfrmmain.sb_commitClick(Sender: TObject);
begin
data.tpbda.applyupdates;
data.tpbda.commitupdates;
i_old:=i_new;
frmmain.statusbar1.panels[0].text:=' 记录总数:' +inttostr(i_new);
end;

procedure Tfrmmain.sb_cancelClick(Sender: TObject);
begin
data.tpbda.cancelupdates;
i_new:=i_old;
frmmain.statusbar1.panels[0].text:=' 记录总数:' +inttostr(i_new);
end;

procedure Tfrmmain.sb_returnClick(Sender: TObject);
begin
close;
end;

procedure Tfrmmain.FormShow(Sender: TObject);
begin
top:=80;
left:=70;
end;

end.

望高手们,指教
cobi 2001-09-10
  • 打赏
  • 举报
回复
奇闻,没见过
franklei 2001-09-10
  • 打赏
  • 举报
回复
没有见过,你把你的那段程序贴出来吧!!
jabmoon 2001-09-10
  • 打赏
  • 举报
回复
问题可能就出在你的过滤上,过滤条件正确吗?是否将过滤的属性设置为了True,而且为什么要循环求记录数?Table.RecordCount就是记录数啊。
zds0707 2001-09-10
  • 打赏
  • 举报
回复
有源码马
demand 2001-09-10
  • 打赏
  • 举报
回复
table的事件是什么?你的过滤有问题。
书生 2001-09-10
  • 打赏
  • 举报
回复
没见过。
li_zhifu 2001-09-10
  • 打赏
  • 举报
回复
gz
feng_zi 2001-09-10
  • 打赏
  • 举报
回复
我新插入的数据都没有问题,只是原来的数据会产生这种现象,都有点莫名其妙
jin_fei 2001-09-10
  • 打赏
  • 举报
回复
你看看索引是否定议错误,重新来一下
netfairy 2001-09-10
  • 打赏
  • 举报
回复
千万不要用Table,我上次用了一次死得好惨,到处出问题,结果全用Query改写。
feng_zi 2001-09-10
  • 打赏
  • 举报
回复
数据库是oracle,没有自增字段
整个程序是个dll,show_byq是在外部调用的过程
最奇怪的时,当将滚动条向上拉时,显示的记录数变为正确,这种情况我从来没有遇到过,想不出是什么原因造成的,如果是我自己在本程序中增加的记录,好象不会出现这种情况,这与库有关系吗?
clacklin 2001-09-10
  • 打赏
  • 举报
回复
如果你的数据库是ms-sql,而且有个自增长的主键字段,而且它的从表,就很可能这样了。
feng_zi 2001-09-10
  • 打赏
  • 举报
回复
源码贴出来了,就没人回答了吗?是不是我写得太弱了?
大侠们帮帮小弟吧,我想不出是什么原因了

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧