用delphi创建数据库

来源:互联网 发布:建信养老飞月宝 知乎 编辑:程序博客网 时间:2024/03/29 19:53
创建数据库可以把要创建数据库的SQL文件放在一个文件中,到创建的时候读取,这样可以随时修改要创建的数据库的内容,
而不用修改源程序。
例如要创建数据库的表为:AREA
可以将如下创建数据表的SQL语句命名为:MyCreateDB.sys
//////////////////////////////////////////////////////////////////////
CREATE TABLE [dbo].[AREA] (
[AREA_ID] [int] IDENTITY (1, 1) NOT NULL ,
[AREA_NAME] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,
[FULL_NAME] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]

ALTER TABLE [dbo].[AREA] WITH NOCHECK ADD 
CONSTRAINT [PK_AREA] PRIMARY KEY CLUSTERED 
(
[AREA_ID]
) ON [PRIMARY] 
//////////////////////////////////////////////////////////////////////
//先连接数据库,连接字符串为
SQLConn:='Provider=SQLOLEDB.1;Password='''+edit3.Text+''' ;Persist Security Info=True;User ID= '''+edit2.Text+''' ;Data Source= '''+Combobox1.Text+'''';;
//用TADOConnection连接 
AdoConnection1.ConnectionString:=SQLConn;
//打开数据库
AdoConnection1.Connected:=true;
//如果能连上数据库,向注册表里添加注册信息。
//Uses Regestry;
if ADOConnection1.Connected=true then
begin
reg:=tregistry.Create;
with reg do
begin
rootkey:=hkey_local_machine;
OpenKey('software\microsoft\windows',false);
WriteString('服务器',combobox1.Text);
writestring('用户名',edit2.text);
writestring('密码',Trim(edit3.text));
writestring('年份',formatdatetime('yyyy',date));
writestring('date',formatdatetime('yyyy-mm-dd',date));

closekey;
destroy;
end;
end;
//创建数据库用
AdoCommand1.CommandText:='CREATE DATABASE MyData';
AdoCommand1.Execute;
//创建数据表,可以采用如下快速的方法调入MyCreateDB.sys的文本内容。
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile(MainDir+'MyCreateDB.sys');
ADOCommand1.CommandText:=Memo1.Lines.Text;
Adocommand1.Execute;
//程序创建成功后,再次写入注册表。信息,如上的写入方法。
//当要连接数据库的时候,直接从注册表中读出服务器名称,用户名,密码,就可以连接数据库了。
Reg:=TRegistry.Create;
Reg.RootKey:=hkey_local_machine;
try
if Reg.OpenKey('software\microsoft\windows',false) then
begin
MyPW:=Reg.ReadString('密码');
UserID:=Reg.ReadString('用户名');
DataS:=reg.ReadString('服务器');
end;
except
end;
Reg.CloseKey;
Reg.Free;


对于Access数据库如下:
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;
0 0