:如何用Delphi 实现Access 中 复制一个和原来一样的mdb,但是不用里面的数据,只要结构(50分)

C

cjdbd

Unregistered / Unconfirmed
GUEST, unregistred user!
还不如动态创建数据库!!
 
那怎么实现呢??
1.用你说的动态来实现?
2.复制我原来的mdb,只要结构,不用数据
 
笨办法:复制完后,在将所有表清空,压缩数据库就行了
 
我是说用代码???
 
不会吧,没有人知道
 
帮帮忙吧各位老大。
分数不够别开贴加分
 
下面的资料希望对你有帮助
http://www.delphibbs.com/keylife/iblog_show.asp?xid=101

1.动态创建数据库,你最好保留创建原始数据库的SQL语句,因为根据表结构生成SQL语句
太麻烦,如果是SQLSERVER还可以用SQLDMO,另外有下面的参考资料
http://www.delphibbs.com/keylife/iblog_show.asp?xid=1072

2.复制数据库,并删除原有数据
这是比较快的方法,但数据库太大就不好了,另自增字段是个问题,删除数据并不能使其
重新从1开始自增,用ADO连接数据库,GetTableNames可以取得所有表名
 
是这样的,我以前做过一样的系统,利用一个数据库模板,
使用的命令是COPYFILE命令
具体的参数,你可以参考DELPHI帮助,里面说的很清。后面一个BOOLEAN参数是指要不要OVERWRITE。
 
生成 sql 用 adox 呀
 
你系统默认保留一个空的只有结构没有数据的数据库不就得了!这么简单的事情还用想那么多。
 
to cjdbd
我说的也是用代码
 
哪位能给段代码
 
能不能实现像access里那个从外部导入。。。。的功能。
就是我想要哪个表就要哪个表。然后形成一个新的mdb
 
说明
1、该程序只是一个例子,并不完善,例如我没考虑各表之间的关系,如果你要实际使用
还要修改一下,加上错误处理,如果出错,先删除其他表,最后在删除出错的表
2、DAO2000单元在delphi的source目录下,你搜一下就找到了
3、压缩完成后,自增字段可以重新从1开始自增

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;

type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
Button2: TButton;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses DAO2000;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Engine:DBEngine;
i:integer;
begin
for i:=0 to MDIChildCount-1 do begin
if MDiChildren<>nil then
MDIChildren.Close;
end;
self.ADOConnection1.Close;
try
if FileExists(ExtractFilePath(Application.ExeName)+'Temp.mdb') then
DeleteFile(ExtractFilePath(Application.ExeName)+'Temp.mdb');
Engine:=CoDBEngine.Create;
Engine.CompactDatabase(ExtractFilePath(Application.ExeName)+'DB1.mdb',ExtractFilePath(Application.ExeName)+'temp.mdb','',0,'');
CopyFile(Pchar(ExtractFilePath(Application.ExeName)+'Temp.mdb'),Pchar(ExtractFilePath(Application.ExeName)+'DB1.mdb'),False);
finally
engine:=nil;
if FileExists(ExtractFilePath(Application.ExeName)+'Temp.mdb') then
DeleteFile(ExtractFilePath(Application.ExeName)+'Temp.mdb');
end;
ShowMessage('压缩完毕!');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
SL: TStrings;
index: Integer;
begin
self.ADOConnection1.Connected:=True;
SL := TStringList.Create;
ADOConnection1.GetTableNames(SL, False);
for index :=0 to (SL.Count - 1) do begin
if ADOQuery1.Active then ADOQuery1.Close;
ADOQuery1.SQL.Text:='Delete From '+SL[index]+' where 1=1';
ADOQuery1.ExecSQL;

end;
SL.Free;
button1.Click;
end;

end.
 
简单的方法:
当你的程序发布时,随着带一个空的数据库,如放在某一个目录里。
然后用户新建立自己的数据库时,把空的数据库拷贝过去不就行了,
简单省事。
 
顶部