数据库的Post指令是不是有点问题?(200分)

  • 主题发起人 主题发起人 lwdxa
  • 开始时间 开始时间
L

lwdxa

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI5 中 DBE版本为5.01
在数据模块中放置一 TABLE 组件,使其使用一DBASEIII的数据库。
同时使用FOXPRO共享打开该数据库不断的刷新访问进行检测数据有无记录
发生改变,在DELPHI 中改写某一字段内容后,使用POST指令进行改写确认,
但是未物理写入DBASE数据库中,因FOXPRO未检测到数据的改变。将DELPHI
程序关闭或对TABLE连接的数据库使用CLOSE指令关闭,这时FOXPRO才检测到
数据的更改。
倘若你使用FOXPRO更改数据库中的内容后,将DELPHI程序关闭或对TABLE连
接的数据库使用CLOSE指令关闭,那么数据库的内容将被恢复至FOXPRO未更改
前的内容。
不知各位大虾有无这种情况?


 

可能只能在POST后再CLOSE,其他外部程序才能访问到更改的记录。如下:
....
table1.post;
table1.close;
table1.open;
....
 
1、不能同时使用一个库文件。

2、用
Table1.refresh;//用 刷新 好点。
 
table1.post;
table1.commint;
 
文件行数据库中的表是不好以共享形式打开的,
FOX打开表后将其装入内存,此时再用其他程序打开此表,无论怎样操作
只要FOX关闭表,FOX又把内存中的数据恢复至表中...
所以 ... 上面的情况发生了 ...
建议使用此表时以独占方式打开,禁止其他进程操作此表。
以前网络版FOX程序都这么干!
 
小刚:post后进行CLOSE,那么外部程序修改的记录内容不就又被BDE恢复为未修改前的了吗?

sunqingyong:我未使用CACHE TABLE ,table1.commint不能用。

黄耀彰:若不能使用同一个库文件,DELPHI如何进行与其他程序共享数据库进行数据处理?Table1.refresh可以使数据源组件重新读取数据表的内容,但无法完成所需。

OopsWare:你说的情况好象在我这里相反,我感觉到是DELPHI将数据库读到缓存,当关闭TABLE时,写入数据库文件中,才造成我所说的情况。从你所说来看,你可能对FOX系统不是很熟。
 
问题我看的不是很清楚
你可以在TIMER控件中不断的
Table1.refresh
 
table1.freshbuffers;物理写入
 
只需在table1.post;后加入
table1.active:=False;
table1.active:=True;
此时你post的数据就可以物理更新表中的数据了。
 
.....
Table1.Active :=False ;
Table1.Open ;
.......
 
最好用 sql语句,用table有时候会出一些怪问题
 
多人接受答案了。
 
后退
顶部