如何用代码生成一个数据库(50分)

  • 主题发起人 主题发起人 WorldCreater
  • 开始时间 开始时间
W

WorldCreater

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用代码生成一个数据库,如友情强档一样,它在初始化时能生成一个MS Access的数据库

不知是怎样做的。
 
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;
 
太卖力了!
 
用sql:
CREATE TABLE Jbxx
(
序号 SMALLINT,
部门 CHAR(12),
JC2 CHAR(8),
工作证号 CHAR(6),
性别 CHAR(2),
出生时间 FLOAT,
民族 CHAR(8),
入党时间 CHAR(8),
入团时间 CHAR(8),
职名 CHAR(14),
健康状况 CHAR(4),
文化程度 CHAR(6),
毕业时间 CHAR(8),
毕业院校 CHAR(12),
所学专业 CHAR(10),
工作时间 CHAR(8),
下乡时间 CHAR(8),
入伍时间 CHAR(8),
入路时间 CHAR(8),
本单位时间 CHAR(8),
岗位档别 SMALLINT,
岗位工资 SMALLINT,
岗位补贴 SMALLINT,
技能档别 SMALLINT,
技能工资 SMALLINT,
累计劳保 FLOAT,
工龄工资 SMALLINT,
国二效益 SMALLINT,
效益9407 SMALLINT,
效益9504 SMALLINT,
效益9507 SMALLINT,
效益9607 SMALLINT,
效益9609 SMALLINT,
效益9706 SMALLINT,
效益9709 SMALLINT,
效档合计 SMALLINT,
效金合计 SMALLINT,
按120核效 SMALLINT,
上岗津贴 SMALLINT,
岗位津贴 SMALLINT,
山区补贴 SMALLINT,
技师津贴 SMALLINT,
教护津贴 SMALLINT,
工班长津贴 SMALLINT,
教护工资 FLOAT,
身份证号 CHAR(18),
干部工人 CHAR(4),
籍贯 CHAR(10),
家庭住址 CHAR(30),
合同号 CHAR(10),
合同期限 SMALLINT,
定职时间 CHAR(12),
合同时间 CHAR(12),
备注 CHAR(12),
临时工资 SMALLINT,
补齐35元 SMALLINT,
风险性工资 FLOAT,
技职津贴 SMALLINT,
标示1 SMALLINT,
标示2 SMALLINT,
GZSJ SMALLINT,
ZQ CHAR(4)
);

用table:
with TTable.Create(Application) do
begin
try
TableName := 'Jbxx';
DatabaseName := 'DatabaseName';
TableType := ttParadox;

with FieldDefs do
begin
Clear;
Add('序号', ftSmallint, 0, False);
Add('部门', ftString, 12, False);
Add('JC2', ftString, 8, False);
Add('工作证号', ftString, 6, False);
Add('性别', ftString, 2, False);
Add('出生时间', ftFloat, 0, False);
Add('民族', ftString, 8, False);
Add('入党时间', ftString, 8, False);
Add('入团时间', ftString, 8, False);
Add('职名', ftString, 14, False);
Add('健康状况', ftString, 4, False);
Add('文化程度', ftString, 6, False);
Add('毕业时间', ftString, 8, False);
Add('毕业院校', ftString, 12, False);
Add('所学专业', ftString, 10, False);
Add('工作时间', ftString, 8, False);
Add('下乡时间', ftString, 8, False);
Add('入伍时间', ftString, 8, False);
Add('入路时间', ftString, 8, False);
Add('本单位时间', ftString, 8, False);
Add('岗位档别', ftSmallint, 0, False);
Add('岗位工资', ftSmallint, 0, False);
Add('岗位补贴', ftSmallint, 0, False);
Add('技能档别', ftSmallint, 0, False);
Add('技能工资', ftSmallint, 0, False);
Add('累计劳保', ftFloat, 0, False);
Add('工龄工资', ftSmallint, 0, False);
Add('国二效益', ftSmallint, 0, False);
Add('效益9407', ftSmallint, 0, False);
Add('效益9504', ftSmallint, 0, False);
Add('效益9507', ftSmallint, 0, False);
Add('效益9607', ftSmallint, 0, False);
Add('效益9609', ftSmallint, 0, False);
Add('效益9706', ftSmallint, 0, False);
Add('效益9709', ftSmallint, 0, False);
Add('效档合计', ftSmallint, 0, False);
Add('效金合计', ftSmallint, 0, False);
Add('按120核效', ftSmallint, 0, False);
Add('上岗津贴', ftSmallint, 0, False);
Add('岗位津贴', ftSmallint, 0, False);
Add('山区补贴', ftSmallint, 0, False);
Add('技师津贴', ftSmallint, 0, False);
Add('教护津贴', ftSmallint, 0, False);
Add('工班长津贴', ftSmallint, 0, False);
Add('教护工资', ftFloat, 0, False);
Add('身份证号', ftString, 18, False);
Add('干部工人', ftString, 4, False);
Add('籍贯', ftString, 10, False);
Add('家庭住址', ftString, 30, False);
Add('合同号', ftString, 10, False);
Add('合同期限', ftSmallint, 0, False);
Add('定职时间', ftString, 12, False);
Add('合同时间', ftString, 12, False);
Add('备注', ftString, 12, False);
Add('临时工资', ftSmallint, 0, False);
Add('补齐35元', ftSmallint, 0, False);
Add('风险性工资', ftFloat, 0, False);
Add('技职津贴', ftSmallint, 0, False);
Add('标示1', ftSmallint, 0, False);
Add('标示2', ftSmallint, 0, False);
Add('GZSJ', ftSmallint, 0, False);
Add('ZQ', ftString, 4, False);
end;

with IndexDefs do
begin
Clear;
end;

CreateTable;

Open;
AppendRecord([1165, '机关', '张奎', ' 65744', '男', 680801, '汉', Null, Null, '2机械钳工', '良好', '初中', Null, Null, Null, '19871001', Null, Null, '871001', '871001', 10, 78, 102, 39, 272, Null, 28, 21, 21, 7, 14, 14, 28, 21, 28, 16, 112, Null, 60, 0, Null, Null, Null, 0, 0, '41070319680808251', '工人', '河南新乡', '新乡市新建街9号', Null, Null, Null, '960401', Null, 0, 0, 52.5, 0, Null, Null, 13, Null]);
..........
..........
Close;
finally
Free;
end;
end;

 
最近一期的《程序员》和今年第三期的《电脑编程技巧与维护》上都有讲,看看吧!
 
woodstock是对的,另外用DAO也可以方便地建库
王顺新的方法是建库的
 
打错了,王顺新的方法是建表的
 
woodstock:
cat:=CreateOleObject('ADOX.Catalog');
cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DatabaseFileName);
这两句就是 建库的吧,好象你用的是adox是不是

to 杜宝:
 “近一期的《程序员》和今年第三期的《电脑编程技巧与维护》”我既没订也没买
麻烦你说说吧
 
除了woodstock说的,没有更简单的方法了吗?
 
多人接受答案了。
 
后退
顶部