--------------------------------------------------------------------------------
一、问题的提出
在程序运行过程中动态建立数据库结构是我们编写功能通用的数据库管理系统常见
的问题。通用数据库管理系统开发的基本思路是:系统允许用户自行设定管理对象的数据
库结构,然后通过算法和编程技巧,在用户设定完成后动态创建管理对象的数据库结构和
完成系统功能的一些其它数据,这样可以满足不同用户对管理系统管理项目的不同要求,
进而达到通用的目的。因此,通用数据库管理系统开发的关键是系统能否动态地创建数据
库结构。我们熟悉的Foxbase+、Foxpro等语言,均提供了动态创建数据库结构的命令或过
程。
但是,在许多资料和书籍中,没有介绍用Delphi如何动态建立数据库结构,给我们开发
一些功能通用的数据库管理系统带来了不便。那么如何在Delphi中动态建立数据库结构
呢?本文是作者在查阅大量资料,经过反复实践的基础上得出的在Delphi中动态创建数据
库结构的方法。
二、设置Delphi数据库配置程序
在Delphi中要进行数据库管理必须先设置好数据库配置程序BDE,所有对数据库的 ***
作,最后都要通过BDE去完成。下面以最常见的Dbase数据库为例来配置Delphi的数据库引
擎BDE。
1. 进入Delphi的集成开发环境IDE(Integrated Development Environment),在Dat
abase菜单下选择Explore,出现SQL Explorer窗体,在Object菜单下选择BDE Administra
tor。
2. 出现BDE Administrator窗体后在Database页上选择Dbase,在Definition页中将
Type项设为Standard将Default Driver项设为Dbase将Path项设为一工作目录名(如:D
:\MYNAME)。以上过程即为数据库的别名(Aliases)设置,这在以后Delphi的程序开发过程
中要经常用到。
3. 选择Configration页,在Drivers的Native项中选择Dbase,在Definition页中将T
ype项设为File将Langdriver项设为DBASE CHS CP936将Level项设为5。
4. 完成上述工作后,在Object菜单中选择Save as Configration,按出现的对话框要
求将以上的设置保存好。至此,数据库的基本配置工作就完成了,我们就可以进行下面的
工作了。
三、动态创建数据库结构方法
在Delphi中动态创建数据库结构有两种方法。
方法一:使用Table组件的CreateTable方法。步骤如下:
1. 进入Delphi的IDE建立一个新项目文件和新窗体(Form1)单元文件(unit1.pas)。
2. 在Form1上加入Table1、Edit1、Edit2、Button1组件。将Button1组件的Captio
属性设为‘创建’。
3. 用鼠标双击Button1进入Unit1.pas单元文件,在光标处加入下列代码。
with table1 do
egi
active:=false
databasename:=‘dbase'
tablename:=‘my.dbf'
tabletype:=ttdbase
fielddefs.clear
fielddefs.add(edit1.text,ftstring,10,false)
fielddefs.add(edit2.text,ftinteger,0,false)
createtable
end
4. 按F9键编译运行,在Edit1处输入一字段名称:ZD1,在Edit2处输入一字段名称:ZD
2,然后点击"创建"按钮,程序将在D:\MYNAME目录中产生一个名为MY.DBF的数据库文件,用
Database Desktop查看文件结构如下:
FieldName
Type
Size
Dec
ZD1 C 10
ZD2 N 11
方法二:使用Query组件,用结构化查询语言SQL(Structured Query Language)语句创
建,步骤如下:
1. 同方法一之步骤1。
2. 在Form1窗体中加入Query1、Button1组件,将Query1的Database Name属性设为‘
Dbase’将Button1组件的Caption属性设为‘创建’。
3. 在Query1的SQL属性单击,出现Sting List Editor窗口,在该窗体中输入以下SQL
语句:
Create Table My(
ZD1 Char(10),
ZD2 Numeric(10,2))
4. 双击Button1进入Unit1.pas单元,在光标处加入下列代码:
Query1.ExecSQL
5. 按F9键 编译运行,在"创建"按钮处单击即可产生一个名为MY.DBF的数据库文件,
存放在D:\MYNAME目录中,用Database Desktop查看其结构如下:
FieldName Type Size Dec
ZD1 C 10
ZD2 N 10 2
以上所介绍的 *** 作和程序均在Windows98 *** 作系统下,Delphi 3.0 C/S版上调试运行
通过。
用adoquery这个控件先连接好数据库
adoquery1.close
adoquery1.sql.clear
adoquery1.sql.add('create table 表名( 学号 char(20),姓名 char(20),班级 char(20))')
adoquery1.execsql
可以了.
以下是一个示例。供参考。 (它是由 dBASEvierer 自动生成的单元)unit 1
{***********************************************************************}
{ }
{ The following is a function that creates one or more tables in the }
{ folder "aDbase" specified as a parameter. If the tables are }
{ successfully created and opened, True is returned. "AOwner" is a }
{ component that is to own Table0 used to define the various tables. }
{ }
{ This function may be used as is or the appropriate sections may be }
{ copied into code of the writer's choice. }
{ }
{ Code generated by dBASEviewer, written by Douglas P. Baird - }
{ dpbaird@sprynet.com Please give a credit if this code is used. }
{ }
{***********************************************************************}
interface
uses classes
function CreateTables(aDbase: string AOwner: TComponent): Boolean
implementation
uses dbtables, SysUtils, db, Dialogs
function CreateTables(aDbase: string AOwner: TComponent): Boolean
var
Table0: TTable
begin
Table0 := TTable.Create(AOwner)
{ Create 1.DBF }
with Table0 do begin
try
DatabaseName := aDbase
TableName := '1.DBF'
TableType := ttDBase
TableLevel := 7
with FieldDefs do begin
Clear
with AddFieldDef do begin
Name := '自动'
DataType := ftAutoInc
end
with AddFieldDef do begin
Name := '日期'
DataType :=ftDateTime
end
with AddFieldDef do begin
Name := '分类'
DataType :=ftString
Size := 16
end
with AddFieldDef do begin
Name := '知识主题'
DataType :=ftString
Size := 60
end
with AddFieldDef do begin
Name := '索引关键字'
DataType :=ftString
Size := 20
end
with AddFieldDef do begin
Name := '知识内容'
DataType :=ftMemo
end
with AddFieldDef do begin
Name := '提交'
DataType :=ftBoolean
end
with AddFieldDef do begin
Name := 'blob'
DataType := ftTypedBinary
end
with AddFieldDef do begin
Name := 'ext'
DataType :=ftString
Size := 5
end
end
{od with}
IndexDefs.Clear
with IndexDefs.AddIndexDef do begin
Name := '分类'
Fields := '分类'
Options := []
end
{od with}
with IndexDefs.AddIndexDef do begin
Name := '日期'
Fields := '日期'
Options := []
end
{od with}
except
on E: Exception do begin
MessageDlg(E.Message,mtError,[mbOk],0)
Result := False
Exit
end
{od on}
end {try}
Result := True
try
CreateTable
except
on E: Exception do begin
MessageDlg('Error creating table. '+E.Message,mtError,[mbOk],0)
Result := False
end
{od on}
end {try}
end
{od with Table0}
Table0.Free
end
end.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)