关于DELPHI动态数据库

关于DELPHI动态数据库,第1张

在Delphi中动态建立数据库结构

--------------------------------------------------------------------------------

一、问题的提出

在程序运行过程中动态建立数据库结构是我们编写功能通用的数据库管理系统常见

的问题。通用数据库管理系统开发的基本思路是:系统允许用户自行设定管理对象的数据

库结构,然后通过算法和编程技巧,在用户设定完成后动态创建管理对象的数据库结构和

完成系统功能的一些其它数据,这样可以满足不同用户对管理系统管理项目的不同要求,

进而达到通用的目的。因此,通用数据库管理系统开发的关键是系统能否动态地创建数据

库结构。我们熟悉的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.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6702878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存