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

在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;

专访IBM中国研究院院长沈晓卫博士:全新的物联网来了 《近匠》GYENNO CEO任康:用“勺子”敲开一片新市场 Horde3D——基于C++编写的3D渲染引擎 Maker Faire 2015在深圳正式开幕,关注创客生态系统 Arduino与Seeed Studio达成战略合作——专访Arduino联合创始人Massimo Banzi 免费开源的Bootstrap富文本编辑器bootstrap-wysiwyg使用方法 CCAI2015:首届中国人工智能大会将于7月26-27日在京举行 拥抱互联网+ 用友NC6助力集团企业蜕变数据驱动型公司 《近匠》融云,自主研发真正“不丢消息”的IM云服务 【CTO讲堂】听云CTO Wood:APM实现原理及对IT和产品运营的价值 从7个维度浅析虚拟现实Alpha年 Maker Faire上的微软:将技术与工具带给Maker才是关键 友盟2015年Q1移动互联网报告:车联网App崛起 多面编程语言Scala NEC高可用集群软件EXPRESSCLUSTER X3.3面向中国市场正式发布 【探秘ES6】系列专栏:模版字符串 专访图书作者祁宇:C++11让程序更简洁、更现代、更强大 滴滴打车CTO张博:生死战役,技术和时间赛跑 Qualcomm拥抱创客文化:如何基于DragonBoard 410c创造和创业? 【探秘ES6】系列专栏:剩余参数和默认参数 专访资深程序员庄晓立:我为什么要选择Rust? 主会讲师确认,2015中国人工智能大会火热报名中 容联·云通讯线下沙龙:IM 5.0助力App社交化 【CTO讲堂】全数据驱动产品优化,美国互联网公司A/B测试经验分享 《近匠》易快报:以报销做企业消费场景下的Slack 纷享销客D轮融资1亿美金,启动开放平台战略! 专访4秒源码商城CTO陈杰:扎根互联网的“不安的心” iOS UIView动画实践(一):揭开Animation的神秘面纱 【前端人生】Teambition前端工程师陈涌:非计算机专业,依托社区不断成长壮大 iOS UIView动画实践(二):Spring Animation与人机交互 基因组与数据整合:DNA应用开发正在临近 高分求教 哪儿可以下载InstallShield 6.22(在线等待,急!!!!) 我要installshield 怎样backupwin98的注册表? ****************如何生成安装文件************* 求教这样一个角度算法 征求好网址!大家把收藏夹里的好网址贡献出来吧! 中国队惨了!!!!!!!贝克汉姆已加入土耳其队! 《Applied Cryptography》,这是本什么书? 一个12位的整型,用unsigned long可以容纳吗? Perl以后会变成什么样呢? 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 下面添加用户的代码能运行吗,我怎么运行不起来,50feng VC文本编辑器没有参数提示 在Delphi中如何使图像淡入淡出? 猜猜中国今天输几个,本人大胆预测10-0 为什么我这里总是405错误呀?Method Not Allowed……The requested method POST is not allowed ADO技术问题! HOOK还是不行! 在ocx中如何使用一个ActiveX,不算使用IMPORT,还有没有别的方法呢?(大送100分) API中的SETTEXTCOLOR函数! 部署实体bean的问题(jbuilder6+weblogic6)??? 怎么样自动增加一列在select UserID,AreaCode from table 。在先等候,先答来的100 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 调查:各位都用哪里的主页空间? 猜猜中国今天输几个,本人大胆预测10-0 我不喜欢南美球队,球风太差,犯规隐蔽,演戏一流!!! 请问这段代码哪里有误?我用的asp+access。急急急急急急急急急急急急急急! 我想做一个类,提供ONMOUSERMOVE事件给用户接口,怎么做,在线等候? 请问关于软件架构,框架和构架的问题 看看别人吧!!!再看看我们!!! 怎么样自动增加一列在select UserID,AreaCode from table 。在先等候,先答来的100 全民健身 有谁使用过水晶报表? 求线段作另一线段的垂足 请问哪里有Delphi 6的控件下载? 怎么调用api画多边形? 求线段作另一线段的垂足 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 如何把一个文本文件的内容赋值给一个char* 大连高程何时报名? 需要这样功能的远程控制工具.... 谁知道广州搞php OR asp一月多少钱? 如何给JButton响应Enter键. W2K2000中的 SP 是干什么? 问题整理:求教关于Bezier的方程!!! 关于DJGPP和NASM 请问用什么样的方法可以令win98每隔两个小时死一次机或重启?谢谢 交论文的日子快到了--- 请问关于网站建设方面的,有哪些可写的? 50分,请问ms sql2000可以设置只显示用户表,隐藏系统表, JRE?JAVA 运行环境,指的是什么?要如何配呀? 如何写实验报告以及科学小论文?具体点的 蒸馏水怎么做 原核生物的细胞壁有什么成分? 科技小论文格式 H-为什么有较强还原性 金属镍的杨氏弹性模量,和泊松比,跪求大神帮忙指点~急~~~ 动物没有细胞壁,为什么植物要有 什么生物有细胞壁 求50Crnimo的弹性模量和泊松比! 小学科学四年级《空气里有什么》实验报告单 科学小论文格式科学小论文,超过450字,格式怎么写?可不可以顺便发一篇范文供我参考一下,最重要的是格式! “按照还原性从强到弱.应该是:还原剂>氧化产物>还原产物>氧化剂”怎么推导 主要是氧化产物>还原产物、 小学科学分组实验报告中实验者填什么啊,是填一个人,还是几个人,还是就写哪个班?急! 有细胞壁的动物哪些?没有细胞壁的植物哪些? 如何制取无氨蒸馏水 小学科学实验报告:颜色与吸热 动物细胞有没有细胞壁 什么叫蒸馏水?他的作用是什么 小学科学实验报告怎么写?要小学的…… 如果把艾滋病病毒注入到植物中,植物的细胞壁是否会被破坏,成为所谓的"动物" 如何检验蒸馏水不含NH3,N02-,NO3- 聚丙烯酰铵和葡聚糖凝胶分离蛋白质 分子量越大跑的快还是慢这两种是不是都有分子筛效应 跑的快慢和分子量什么关系 另外还和什么有关 原理是什么 动物细胞和植物细胞是不是都含有细胞壁?细胞壁的主要成分和功能又是什么? 环境检测中氨测定实验用买的蒸馏水,空白实验值是不是会偏高? 所有高等植物细胞都具有细胞壁么?所有的植物(包括低等植物)呢? Na2CO3和CaCO3的热稳定性比较? 电解池中,为什么阴极一定是溶液中的阳离子放电在电解池中,阴极无论是惰性电极还是活泼电极,电极反应为什么都是溶液中的阳离子放电 低等植物有无细胞壁? 碳酸钙和硅酸钙谁热稳定性好?说明根据, 电解池阳离子放电顺序中,为什么Pb2+,Sn2+,Fe2+,Zn2+的浓度很大时放电顺序排在H+之前?为什么? 低等植物有细胞壁吗? CaCO3与Na2CO3的热稳定性比较: 什么叫做电解池放电?阳离子得电子也叫放电吗? 用惰性电极电解混合溶液时,在阴极先放电的阳离子的______性较强,在阳极先放电的阴离子的________性较强.我有答案,但不知道怎么思考这道题目,谁能帮我填上这个空,并说出解题的思路理由啊? 电镀阳离子放电的顺序是什么? KHSO4溶于水会被破坏共价键吗? 请问氧化铜、铜绿、氢氧化铜三者的热稳定性的大小?为什么?问题补充:答案是铜绿大于氢氧化铜,请问为什么? 热稳定性:NA2CO3>CACO3>NAHCO3>H2CO3,在先等 酒精溶于水,共价键是否会被破坏 氢氧化铜和氢氧化铁谁的热稳定性强要十分确定哦~ 为什么电解的阳离子放电顺序与电镀的不完全一样? 初中科学实验拜托给我一篇这样的作文 下列氢氧化物:1.氢氧化铜2.氢氧化钙.3.氢氧化银.4.氢氧化铁 的热稳定性由大到小的顺序正确的是() 阳离子放电顺序是如何确定的?是否是根据在同浓度情况下不同阳离子的氧化性强弱排出来的?我想问的是,该放电顺序是否是在各离子浓度相同的情况下得出的? 初中科学,关于实验我想写一篇关于课堂演示实验的改进的案例,各位大侠帮忙取个名字?谢谢! 铜和氢氧化铜混合物在空气中加强热,铜完全氧化,氢氧化铜完全分解,反应前后质量相等,求氢氧化铜的质量分数.麻烦做一下啦~谢谢谢谢 原电池和电解两极的放电顺序如何判断 制备氢氧化铁胶体时能否用氯化铁溶液与氢氧化钠反应? 碱式碳酸铜怎样直接反应得到氢氧化铜?Rt 蒸馏水机哪有卖的石家庄同惠公司的不错! 郭萌 15511631996 植物细胞细胞壁与原核生物的细胞壁有何不同之处? 下图是实验室制蒸馏水的装置,冷凝管上a、b两口分别为进水口和出水口,其中________是进水口,_________是出水口,这样做的优点是什么?在实验过程中,往往在蒸馏瓶中加入几粒沸石(或碎瓷片),其目 比如说问植物细胞大小,是算细胞壁以内的还是细胞膜以内(此时细胞已失水皱缩). 原核生物都有细胞壁吗 实验室蒸馏水哪里有卖 原题是:吡罗红,甲基绿染色剂的成分是什么:1.吡罗红,甲基绿.2.吡罗红,甲基蓝.3.清水.4.蒸馏水.5.0.9%NaCl溶液.6.乙酸钾.7.乙酸.8.乙酸钠.9.盐酸.A.1367 B.2489 C.2378 D.1478 原核生物有细胞壁吗?化学成分与植物细胞壁相同吗? 实验室用蒸馏水,那个牌子的好一点 什么是蒸馏水 纤维素为什么是植物特有 那原核生物的细胞壁是什么组成的呢?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘