INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Jobs

Database Programming

BDE : Prevent "Index Out Of Date" & "Blob has been modified" errors and loss of data by BTecho
Posted: 15 Jan 03 (Edited 15 Jan 03)

Hi there

If you are using the BDE you may have experienced these problems, 'Index Out Of Date' or 'Blob has been modified' errors and data loss upon a bad reboot or an application crash.

There are a two ways to fix these problems each method will force the BDE to flush the cache after every post/delete and will simultaneously fix those problems.

1)Set the Local Share setting in the BDE Adminstrator to true (goto Configuration->System->Init->Local Share). Doing this will create Paradox.lck and Pdoxusrs.lck files in the the folders where the tables recide, they will only be automatically delete if you exit the application properly. So on startup of the application before opening the tables make sure to check the existence and delete those files, if you do not delete those files you might them get another notorious error "Directory is controlled by another .NET file".

if FileExists('c:\db\Paradox.lck') then
   DeleteFile('c:\db\Paradox.lck');

if FileExists('c:\db\Pdoxusrs.lck') then
   DeleteFile('c:\db\Pdoxusrs.lck');

{Open the Tables}
Table1.Active:=true;
....

2) Call DBISaveChanges(Table's.Handle) on the AfterPost and AfterDelete events of the Table's.

You can assign the same procedure to all the AfterPost and AfterDelete events of the all the Tables on your form

procedure Table1AfterPost(Sender : TDataSet);
begin
    if(Sender is TBDEDataSet)then
    DBISaveChanges(TBDEDataSet(Sender).Handle);
end

If you follow either of the options mentioned you should not have those problems but there is still a chance that the table may become corrupt and you can get a 'Index Out Of Date Error' and other various errors, though it is very rare, so I recommend a utility called PdxrBld which is based on Borland's Tutil32.dll

PdxrBld(open source)
http://www.rksolution.cz/Delphi/Delphi.htm#00004

TUtil32.Dll and Borlands own open source utility
http://info.borland.com/devsupport/bde/utilities.html

Also these articles are a must read,

"Lock file has grown too large"
http://community.borland.com/article/0,1410,15256,00.html

"Some current internal limits of BDE"
http://community.borland.com/article/0,1410,15159,00.html

"Table is Full with Paradox Tables"
http://community.borland.com/article/0,1410,10318,00.html

"BDE setup for Peer-To-Peer(Non-Dedicated) Networks"
http://community.borland.com/article/0,1410,15247,00.html

Hope this helps someone

Back to Embarcadero: Delphi FAQ Index
Back to Embarcadero: Delphi Forum

My Archive

Resources

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close