一个烦人的问题,有关数据库的

feng_zi 2001-09-12 11:30:21
在http://www.csdn.net/expert/Topic/279/279934.shtm中我提出的问题

我的Ttable,打开时,本来只有n条记录,可是在与之相连接的dbgrid中却显示了2n条记录,记录重复显示了,在打开Ttable时,我用了过滤,执行过一次循环(为了计数,得出的记录数是正确的),每当我拖动dbgrid的滚动条时,显示的记录又会自动增加,请问这是什么原因呢,劳烦大侠出手!

还是解决不了,有没有方法呢?

当我用query代替table时,我要向表中插数只是报,表只读,当我将requestlive设为true时,打开表,却报表不存在,我用的是oracle数据库,对access我也做过同类功能却没有什么问题,请这方面的专家给答案
...全文
149 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng_zi 2001-09-19
  • 打赏
  • 举报
回复
好吧,反正要那么多分也没用
machin 2001-09-18
  • 打赏
  • 举报
回复

结了吧。。。结了吧。。。
feng_zi 2001-09-12
  • 打赏
  • 举报
回复
to hailan:
系统?你指是oracle数据库吗?
hailan 2001-09-12
  • 打赏
  • 举报
回复
我也遇到过。后来把系统重做了就好了
feng_zi 2001-09-12
  • 打赏
  • 举报
回复
源程序如下:
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.

望高手们,指教
yinjian 2001-09-12
  • 打赏
  • 举报
回复
BDE与Oracle8配合有Bug, 建议使用Query, 插入更新数据使用TUpdateSQL配合使用。
machin 2001-09-12
  • 打赏
  • 举报
回复

可能是你的BDE出错了,考虑重装一下BDE。

或是把代码copy出来给大家分析一下吧。。。

有时候狂人对数据库的问题也是很头痛啊~~
KAMI 2001-09-12
  • 打赏
  • 举报
回复
把你执行循环的代码贴上来看看
Tense 2001-09-12
  • 打赏
  • 举报
回复
up

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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