关于Delphi中缓存机制的一个问题(100分)

  • 主题发起人 主题发起人 peaklee
  • 开始时间 开始时间
P

peaklee

Unregistered / Unconfirmed
GUEST, unregistred user!
我建有一数据库,是用TTable控件,在数据库操作中我想实现
缓存机制,Ttable1.CachedUpdates设为True,我的问题在于SaveAs
语句的实现,我的意图是当执行SaveAsClick后,出现SaveAsDialog
对话框,如Windows中将我的数据库另外保存。另外我的Save语句如
下,有无不妥。
procedure TCardForm.SaveClick(Sender: TObject);
begin
CardTable.ApplyUpdates;
CardTable.CommitUpdates;
end;
 
我的解决办法为:
Begin
With Table1 Do
Begin
OpenDialog.exec;
给定缓冲数据库文件名,并点击<OK>;若该文件不存在,系统将创建之;此时
缓冲数据库的结构和Table1的相同,但它是个Nil文件。
End;
End;
 
我试过,不行,程序报告‘Table does not exit ',‘File or directory
error'。
 
你要想把你的数据库存为另外的文件,你肯定要自己定义文件的格式,如果要存为与
原来相同的文件,即数据库,你就使用create table语句创建新表,存为其他格式的
文件,你就定义自己的文件格式。具体实现要不会的话,说详细你的目的,给我发邮
件。
zhonghuashi01@263.net
 
好象你搞错了Cache 缓存机制的使用方法、作用、范围。

TTable的cachUpdate并不和SaveAs之类的方法有什么逻辑联系.

另行保存数据库的方法: 

(1)按照数据源建立一个和数据源相同结构的数据表,
(2)将源数据逐条记录的方式, 传送入目标数据源.
 
如果想另外保存数据库,用Table的Batchmove方法很好用,
table.batchmove(sourcetable,mode)
如果mode设置是batcopy,只需指定别名和表名,无须新建
表,如果目的表不存在,该方法会自动建立一个与源表结
构一样的表。
 
以下是本人编程一直使用的部分程序,希望对你有一定的帮助!

if OpenFil.Execute and (OpenFil.FileName <> '') Then {*打开文件对话框*}
Begin
dbFilName := OpenFil.FileName;
_Path := dbFilName;
ExtPos := Pos('.', dbFilName);
Delete(_Path, ExtPos-7, ExtPos+4); {*get path*}
Delete(dbFilName, 1, ExtPos-7); {*得到文件名*}
..........
UseTable.DatabaseName := _path; {*待打开课程数据库的路径*}
DBpath := _path;
UseTable.TableName := dbFilName; {*待打开数据库的文件名*}

if Not (FileExists(dbFilName)) then
Begin
IDRtn := Application.MessageBox('文件没有存在,请创建一个新文档!', '警告信息',
MB_OKCANCEL+MB_DEFBUTTON1+MB_ICONEXCLAMATION);
if IDRtn = 1 Then {*IDOK*}
Begin
unDefFil.Checked := False;
With UseTable Do
Begin
DatabaseName := DBpath; {*数据库文件的路径*}
TableName := dbFilName; {*数据库文件名*}
CreateTable; {*创建数据表*}
End;
End; {*end of 创建新文档*}
End; {*end of 文件是否存在*}
..........
 
多人接受答案了。
 
后退
顶部