说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi中自动检测、建立数据库别名和表格

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi中自动检测、建立数据库别名和表格

Delphi3 内 建 的Borland 数 据 库 引 擎(BDE), 使Delphi3 程 序 能 通 过 数 据 库 别 名(Database Alias) 十 分 方 便 地 访 问 各 种 类 型 的 数 据 库。然 而, 数据库别名的建立、修改、删除等维护工作,需 要 在 BDE Administrator 中 进 行, 数 据 库 中 实 际 表 格 结 构 的 建 立 和 维 护, 有 时 也 要 在DataBase Desktop 中 完 成, 这 给 用 户 增 加 了 不 少 困 难。 有 没 有 办 法 让 用 户 不 去 执 行BDE Administrator 和DataBase Desktop 这 两 个 应 用 程 序, 就 可 直 接 检 测、 建 立 数 据 库 别 名 和 库 中 的 表 格 呢 ? 笔 者 通 过 探 索, 得 到 了 一 种 可 行 的 方 案, 现 以 笔 者 所 开 发 的 一 个 单 机 版 的 图 书 资 料 管 理 系 统 为 例, 简 要 加 以 说 明。

一、 数据库别名(Alias) 的定义和检测方法

当Type 为STANDARD 时

别 名 定 义 最 为 简 单, 这 时 仅 能 采 用PARADOX

DBASE

ASCIIDRV 三 种 数 据 库 作 为 缺 省 的 驱 动 程 序(DEFAULT DRIVER)。

另 外, 还 要 定 义 数 据 库 存 放 路 径(PATH) 和ENABLE BCD, 才 能 建 立 一 个 完 整 的 数 据 库 别 名。

Delphi 的 数 据 库 应 用 程 序 能 自 动 提 供 一 个Session 组 件, 这 个 Session 组 件 即 为 应 用 程 序 与BDE 的 接 口。

1. 检 测 别 名

通 过 调 用Session.GetAliasNames(list:Tstrings) 方 法, 可 将 当 前BDE 配 置 中 的 所 有 数 据 库 别 名 的 名 称 存 放 到List 字 符 串 列 表 中。 list.IndexOf(' 需 要 检 测 的 别 名') 的 值 会 告 诉 我 们 这 个 别 名 是 否 存 在 ( 其 值 为-1 时 不 存 在)。

2. 增 加 一 个 新 的 别 名

Session 组 件 的 过 程AddStandardAlias(const Name

Path

DefaultDriver: string)

可 以 增 加 一 个 标 准 类 型 的 数 据 库 别 名。 例 如 增 加 一 个 名 为Cntssamp, 缺 省 数 据 库 驱 动 程 序 为PARADOX、 存 放 路 径 为c:\delphp11 的 别 名:

Session.AddStandardAlias('Cntssamp'

'c:\delphp11'

'Paradox');

3.BDE 配 置 文 件 存 盘

Session.SaveConfigFile;

二、 数据库中表格的定义和检测方法

数 据 库 中 表 格 的 定 义、 维 护 和 使 用, 只 有 在 数 据 库 别 名 正 确 设 置 的 情 况 下 才 有 意 义。 以TTable 组 件 为 例, 必 须 设 置 其DatabaseName 为 一 个 实 际 存 在 的 别 名。

1. 检 测 表 格 是 否 存 在

通 过 调 用Session.GetTableNames(const DatabaseName

Pattern: string; Extensions

SystemTables: Boolean; List: TStrings) 方 法, 可 将 当 前 指 定 数 据 库 别 名 中 所 有 表 格 的 名 称 存 放 到 List 字 符 串 列 表 中。list.IndexOf(' 需 要 检 测 的 表 格 名') 的 值 会 告 诉 我 们 这 个 表 格 是 否 存 在( 其 值 为-1 时 不 存 在)。

2. 建 立 一 个 表 格

第 一 步, 设 置TTable 组 件 的DataBase Name( 别 名)、TableName ( 表 格 名)、TableType( 数 据 库 类 型);

第 二 步, 调 用Table.FieldDefs.Add(const Name: string; DataType: TFieldType; Size: Word; Required: Boolean) 增 加 表 格的 各 个 字 段, 其 中Name 为 字 段 名,DataType 为 字 段 类 型( 常 用 的 有 ftInteger

ftString

ftDate

ftBoolean 等)

Size 为 字 段 长 度, Required 为 该 字 段 是 否 允 许 有 空 值。

第 三 步, 调 用Table.IndexDefs.Add(const Name

Fields: string; Options: TIndexOptions) 方 法 增 加 表 格 的 索 引 文 件, 其 中 Name 为 索 引 文 件 名,Fields 为 索 引 字 段,options 为 索 引 参 数 的 集 合, 常 用 的 索 引 参 数 有ixPrimary( 主 键)、 ixDescending( 降 序)、 ixUnique( 具 有 唯 一 值) 等。

第 四 步, 调 用Table.CreateTable 建 立 表 格。

三、一个实例

在Form1.Formcreate 事 件 中 写 入 如 下 代 码, 程 序 启 动 时, 将 自 动 检 测 是 否 存 在 数 据 库 别 名Cntssamp, 如 果 没 有 则 建 立 之; 自 动 检 测 别 名Cntssamp 中 是 否 存 在 表 格TSK( 图 书 库), 如 果 没 有 则 自 动 建 立 表 格TSK。 procedure TForm1.FormCreate(Sender: TObject);

var

ap:TStringList; {字符串列表变量}

answer:Integer;

begin

ap:=TStringlist.Create;

Session.GetAliasNames(ap); {取得别名列表}

if (ap.IndexOf('Cntssamp')=-1) then {判断别名是否存在}

begin

answer:=Application.MessageBox('别名Cntssamp不存在,现在创建吗?'

'BDE信息窗口'

mb_OKCancel);

{增加一个名为Cngzsamp的数据库别名}

if answer=IDCANCEL then

begin

ap.Free;

Exit;

end;

Session.AddStandardAlias('Cntssamp'

'c:\delphp11'

'Paradox');

Session.SaveConfigFile; {BDE配置文件存盘}

end ;

ap.Clear; {取得别名Cngzsamp中的所有表格名称列表}

Session.GetTableNames('Cntssamp'

''

False

False

ap);

if (ap.IndexOf('TSK')=-1) then {判断表格是否存在}

begin

answer:=Application.MessageBox( '别名Cntssamp中不存在表格TSK

现在创建吗?'

'表格信息窗口'

mb_OKCancel);

if answer=IDCANCEL then

begin

ap.Free;

Exit;

end;

with table1 do

begin

Active:=false;

DatabaseName:='Cntssamp'; {数据库别名}

TableName:='TSK'; {表格名}

TableType:=ttParadox; {数据库类型}

with FieldDefs do

begin {增加字段}

Clear;

Add('SH'

ftString

30

False); {书号 String(30)}

Add('SM'

ftString

30

False); {书名 String(30)}

Add('CBS'

ftString

20

False); {出版社 String(20)}

Add('CBRQ'

ftDate

0

False); {出版日期 Date}

Add('YS'

ftInteger

0

False); {页数 Integer}

end;

with IndexDefs do

begin {增加索引}

Clear; {按书号字段建立主索引}

Add('SHSY'

'SH'

[ixPrimary

ixUnique]);

end;

CreateTable; {创建表格}

end;

end ;

ap.free; {释放变量ap}

end;

用VB实现“百叶窗”的图形特效 用VB实现托盘动画图标 用Visual Basic 定制BMP文件 用Visual Basic的Move方法实现动画效果 用Visual Basic与MS-Draw开发通用作图软件 在VB中获取可执行文件及Windows 95快捷方式的图标 在VB中进行各种图形切换的方法 在VB中制作可滚动的图像显示 在图片上平滑移动文字 -VB资料 VB怎样使程序的标题条闪烁? VB制作图像的Mask图 CWinInetConnection-一个封装了WinInet API函数的类 -VB资料 MODEM通讯意外处理-VB资料 MsComm 文字传输-VB资料 PING一个IP地址(向它发送一个数据包并等待回应) -VB资料 SMTP协议简介 (Simple Mail Transfer Protocol) -VB资料 VB5.0 中远程数据库的访问 VB下如何编写CRC校验程序 Visual Basic 6中发送邮件的新方法 Visual Basic通信程序设计 Whois 示例程序-VB资料 Winsock Terminal示例程序 -VB资料 WinSock断开导致客户端问题-VB资料 把Outlook信箱中的附件另存为 -VB资料 保证连网计算机时间同步-VB资料 编写网络寻呼机 -VB资料 编制自已的电话录音小程序-VB资料 程序中如何启动默认的拨号连接-VB资料 打开浏览器并进入指定网址-VB资料 得到用户的IP地址 -VB资料 电话拨号 -VB资料 小弟才學 JavaMail 安書上的例子寫了下面的代碼 編譯通過但是 運行不了 幫忙看看!!!! 虚函数是什么意思。 delphi5的sql语句 请教。Windows CE Services 怎么用。我有一张盘,不知用法。 [老问题]如何对并口进行操作?300分。----------------- 请问Java TM Programming Language中的TM(在Java的右角上)是什么意思啊? 这样的程序界面应该如何做?紧急求助!!! HelloImpl err: Cannot connect to ORB 是怎么回事呢? Source Insight3.1使用问题?正确解答者150分 哪儿有《The art of computer programming》下载? C++編程思想 各位情场高人,帮小弟一把,怎么把这个MM约出来,出个主意,俺先谢谢大家了!!! 我需要JAVA-JDBC打开数据库的例子.................... 谁有Delphi编译错误信息对照表,有中文注解的最好---50分 请问在SQLSERVER2000中如何在检索数据是将两个字段合并成一个字段,用“||”吗? 数据库的重定向问题! 关于使用资源 QRRichText 打印如果页数很多(2页以上),就打印不完全,但打印预览中可以看到全部,为什么? 我有一个弱弱问题要问。。。 在C#中如何做ToolWindow属性的WinForms?????????? 怎样才能将静态文本框的背景色设置为透明的? 实时错误“480”,不能创建AUTOREDRAW图象,如何解决?把PICTUREBOX定义太大会产生这个错误,不能绘图! COOL!COOL! 序列的一系列问题 劳烦各位介绍一下业界最流行实用的汇编,C语言编译器,我是在校生急需指导! Rebar 移动的问题!烦死我了! 高手留步:请问VC中获取当天日期的函数是???还有比较两个日期所差天数用什么函数??? 请问怎样才能将vb中的date型的内容转化为sql server的datetime型呀,谢谢大家了 请问,怎样在 FLAH5 中直接插入 MP3,并改变 MP3 的音质? 利用delphi连接远程sybase数据库,在多用户操作情况下为什么会产生数据库死锁 看了一下SL275(2001年5月)的课程概述,发现里面没有了Applet了,SCJP是不是舍弃了它了? 有关JAVA的Package,ClassPath的讨论,诸位看过来 COOL!COOL!COOL! what's wrong with the SOCKET define? 使用vb通过NotesSQL for odbc连接过domino数据库时总出现如下错误“ [Microsoft][ODBC 驱动程序管理器] 驱动程序的 SQLAllocHandle on SQL_HANDLE_ENV 失败”,有谁遇到过吗?如何解决? 在SDK中,如何判断对话框中的CheckBox是否选中? 请教如何修改如何提交数据(一对多的表) 如何在delphi里实现文件(比如文本文件)从一台机器传递到另一台机器?比较急! 不知道主板集成声卡的型号,又没有驱动程序?怎么办?主板是ASUS CUSL2,I815E CHIPSET 想问问大家pb自带的例子中有没有关于权限的例子 怎么样吧jpg图片转成ico?????? 听说程序员结婚生孩子多数会是女孩,是不是真的?,好像与辐射有关哦 那里有windoes版的ftp源码 不知道主板集成声卡的型号,又没有驱动程序?怎么办? 主板是ASUS CUSL2 ,I815E CHIPSET 请问哪里有编写多线程安全对象的资料?(72分) 通过界面输入大量数据,界面如何设计??? 在Red hat 7.1如何安装GBK字符集! Focus(老鱼)回答得50分 请教网站的建设计划如何写呀? 请问下面的DELPHI程序如何转为CB 帮忙测试! (X/10)(X/10)=(6-X*X)/36 学信网可以查英语四级网考成绩吗看好了是四级网考成绩哟 已知x+y=3,xy=1,a+b=5,ab=3,且m=ax+by,n=bx+ay 求m^3+n^3的值 小白加小白等于什么? 设A=根号5-根号6,B=根号6-根号7,A,B的大小关系 已知x+y=5,xy=2.a+b=3,ab=3,m=ax+by,n=ay+bx,求n/m+m/n的值 小白加小白等于啥? 小白加小白等于什么呢? 2进制如何转化为10进制,请用一个简单明了的办法说明下,本人很愚笨,一般的理解不了, 三次根号9与根号3的大小 求含字母的绝对值化简 2道 快 2进制转10进制 11012进制1101 转10进制 在有理数中,最小的正整数是什么?,最大的负整数?,绝对值最小的数是? 化简有绝对值的带字母的式子的规律 2进制11111111转10进制 十进制数转换成八进制数正数我会转换,主要是十进制的负数 转换成八进制数.例如十进制数-111转成8进制数.本人菜鸟,请写出计算过程.请问,八进制数、十六进制数,在计算机里占两个字节的空 初一的化简绝对值题目(带字母的) 快点啊,多谢啦! 最新的英语六级高频词汇和词组(发给我一份吧, 如何将十进制数转换成八进制数? 已知b=根号(a-3)+根号(3-a)+根号8 试比较a、b的大小 十进制转二进制的公式 1、十进制数59转换成八进制数是 (4)有一个数是123,它与十六进制数53相等,那么该数值是A)八进制数; B)十进制数; C)五进制 ; D)二进制数A 二进制与十进制转换公式? 八进制转十进制怎么转啊?八进制数1507 一个数是123,它与十六进制数53相等那么该数是几进制的?怎么个算法? 2进制转10进制最简便方法?(公式) 英语四级成绩证明什么样子 有一个数是123,它与十六进制53相等的数值是多少?我很着急,计算过程也要, 10进制转16进制公式,这种结果对吗三、十进制数十六进制 如:76521转为十六进制 16|76521 4726 ――5 第一位(个位) 295 ――6 第二位 18 ――6 第三位 1 ―― 2 第四位 最后得1276516 二进制与十六 3倍的根号0.2+4倍的根号125+根号27分之1—根号75 比较大小 π和22/7 根号3和5/3 (ax+by)^2-(ay+bx)^2 谁能帮我解答灵异事件?昨天晚上做梦梦到左手的玉镯子碎了,今天老公下班回家告诉我他今天抽完烟仍烟头市烟头居然立住了,他觉得很有意思还拍了照片留纪念呢,但是我很忐忑.上网查了我 比较大小:根号22___5(填“大于”或“小于”求值 ±根号4又25分21= 小白加小白等于? 计算0.75^-1×(根号下3/2)^1/2×(27/4)^1/4+10(根号下3-2)^-1+1 小白加小白等于什么 通过估算,比较根号2分之根号5-1与8分之5的大小 是个灵异事件 有人问我小白加小白等于什么 小白加小白等于多少 如果x+5=10.那x是多少, 小白加小白等于什么呢? 八进制数0123的值相当于十进制的83;十六进制数0x123的值相当于十进制数的291.我不明白那83和291的结...八进制数0123的值相当于十进制的83;十六进制数0x123的值相当于十进制数的291.我不明白 (x+3):5=10:5 小白加小白等于……… 多元函数f(xy,x-y)=x²+y²,则af(x,y)/ax+af(x,y)/ay=? 英语六级要比英语四级难很多么?我还想知道英语六级的 具体做题顺序 是不是还像四级一样 分AB卷 而且是分开收 2013年十月网考四级成绩怎么查询? 化简(x²+xy+y²)(x²-xy+y²)=? 介绍一下英语四级的考法.本人大学本科自考,现要考英语四级.但我英语实在是不行.有没有社会考生的考法,或者是其他有效可行的途径. 2012年5月份的四级网考成绩怎么查?官网说7月15出成绩,怎么查?是五月四级网考! 比较根号2+根号7与根号3加根号五的大小 评析我的英语四级,望指教我的英语4级的成绩总分是:464听力:169阅读:157综合:47写作:91,哪位可以帮我分析下我的薄弱项吗?我对四级的评分不是熟悉-想继续考6级-望各位能给我些建议,先 网考四级怎么查啊是网考,希望大侠不要弄混了 英语谜语,可能是脑经急转弯how many feet are there in a yard 如何解(x-0.3)分之36-x分之36=4 大学英语四级网考能查成绩吗怎莫不能查啊 这是10进制转几进制的?6bb8121b3db2771a65daeacb29342c429ec1d948dc1841b1340d239b4b04d41a复原成十进制是什么?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn