怎么通过ADO来创建一个Access数据库?(100分)

  • 主题发起人 主题发起人 DreamTiger
  • 开始时间 开始时间
D

DreamTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
ADOX的说明,但是我不知道怎么改成Delphi的。

创建数据库范例
如下代码显示如何通过 Create 方法创建新的 Jet 数据库。
Sub CreateDatabase()
Dim cat As New ADOX.Catalog
cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/new.mdb"
End Sub

 
uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
cat:OleVariant;
begin
cat:=CreateOleObject('ADOX.Catalog');
cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/new.mdb');
end;

试了一下,可以.终于能从一个大虾级人物那里挣两分:)
 
DreamTiger:
你也帮我看看下面这个循环(for each XX in YY ..next)怎么转化成Delphi程序:)

For Each AnimationName In Character.AnimationNames
AnimationListBox.AddItem AnimationName
Next
这是微软MSAgent文档里面那个例子的代码,好像javascript里也有
for prop in Object{...}
式的循环,Delphi里的没见过.Character.AnimationNames是个接口,属性里可没定义什么
AnimationNameCount,Length的可以利用.考虑利用运行期类型信息TypeInfo,哎,怎么对付接口呢?
好像也不简单.
 
我刚得到一个控制access的控件DiamondAccess,可以很简单的创建ACCESS数据库。
你下载一个,看满意不?
 
huiboy:Diamond Access我有,不过不想用。之所以用了ADO,因为可能需要以
后进行远程交互。

avant:结果很不错,又研究了一下SQL语言,呵呵,下面是我最终的程序,通过
ADO创建Database,以及通过SQl创建里面的Table和Index。

procedure TDataModule1.CreateNewDatabase(DatabaseFileName: string);
var
cat:OleVariant;
begin
if FileExists(DatabaseFileName) then
begin
if MessageBox(Application.Handle,
PChar('Database ' + DatabaseFileName + ' has existed!'
+ #13#10 + 'Delete this database and create a new database ?'),
'Database Exists',MB_YESNO + MB_ICONWARNING + MB_DEFBUTTON2) = mrNo then
exit;
if not DeleteFile(DatabaseFileName) then
begin
MessageBox(Application.Handle,
PChar('Cannot delete database ' + DatabaseFileName),
'Delete Database Error!',MB_OK + MB_ICONERROR);
exit;
end;
end;

cat:=CreateOleObject('ADOX.Catalog');
cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DatabaseFileName);
if ConnectDatabase(DatabaseFileName) then
begin
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Table FaqClass ' +
'(' +
'ClassID INT not null,' +
'ClassTitle char(100) not null,' +
'ParentClassID INT not null,' +
'ClassType TINYINT DEFAULT 0' +
')';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create UNIQUE Index ClassIDIndex ON FaqClass (ClassID)';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Index ClassTitleIndex ON FaqClass (ClassTitle)';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Index ParentClassIDIndex ON FaqClass (ParentClassID)';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Index ClassTypeIndex ON FaqClass (ClassType)';
adoquryClass.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Table FaqMemo' +
'(' +
'MemoID INT not null,' +
'ParentClassID INT not null,' +
'MemoTitle char(100) not null,' +
'MemoText TEXT,' +
'MemoPublic BIT DEFAULT 0,' + //缺省是不公开
'MemoLastModifyTime DATETIME' +
')';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create UNIQUE Index MemoIDIndex ON FaqMemo (MemoID)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index ParentClassIDIndex ON FaqMemo (ParentClassID)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index MemoTitleIndex ON FaqMemo (MemoTitle)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index MemoPublicIndex ON FaqMemo (MemoPublic)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index MemoLastModifyTimeIndex ON FaqMemo (MemoLastModifyTime)';
adoquryMemo.ExecSQL;
end;
end;
 
为什么用这种方法创建的数据库用access打开时提示“不可识别的数据库格式”???
 
你的Access是97还是2000?要用Access2000打开肯定没问题。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部