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

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

Java程序优化的一些最佳实践 Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具 Anchora鲁为民:PaaS是我的兴趣 次世代IDE Light Table 0.4发布 带来众多更新和改进 别再设计易碎的Web API! LinkedIn:55人支持2700位员工,2亿用户的大数据分析 Brian Krzanich是谁?这位新CEO预示英特尔未来怎样? HTML5开发者心声:浏览器兼容性成最大问题 传微软6月下旬将发布第二代Surface 7到9英寸全有 Turbulenz:HTML5 2D和3D游戏引擎开源 携程开放平台总经理夏天:内容+高转化率成就开发者 直接拿来用!最火的Android开源项目(一) Qunar 谌振宇:旅游行业的移动化如何布局? 大数据分析“铁三角”: Teradata数据仓库、Teradata Aster与Hadoop Teradata专业服务:打造行业企业的“数据科学家” Xamarin Evolve 2013:竭尽全力让C#服务iOS与Android 史上最全!57个Web框架4轮横向对比 回顾银行数据的可用性和一致性历史 Qubole:托管在AWS平台上的Hive服务 自由操作系统 Debian 正式发布7.0版本 4月份浏览器份额:IE 8仍居第一,IE 10翻番 亚马逊正式在华推Android应用商店 收入3:7分账 不要男孩,只允许女生参加的四所编程学校 下一波App机会在哪里? JS1K 2013优胜作品公布 3D蜜蜂仅获亚军 专访:前新浪网架构师徐佳转行卖水果背后的故事 FBI密码挑战,你能解开吗? 从0到1只需一天:Twitter后PC时代物联网“敏捷”开发之路的探索 机械生物已经面世 只少个“大脑”而已 百度正式宣布3.7亿美元收购PPS视频业务 比尔·盖茨:iPad让人失望 用户需要Surface 请问微秒级的延迟在C语言中如何实现? 请问为什么在COM中总是使用双重值针,即指针的指针? 用过,销售,触摸屏的兄弟姐妹给个建议 关于C里面的setjmp()和longjmp()函数的使用。 一个用VB偏的“图片批量转换软件”!带源代码!!! 多伦多穷人欢庆申奥失败 有人注意到了吗???directX的资源释放不干净! 谁能帮我做一个小型帐务管理(用C)??? 用delphi编程,用什么触摸屏比较好啊? 怎样在程序运行时增加子菜单(要增加的数目是未知的) 关于Sprite动画 出售代码 ACCESS的FORMS DLL调用函数问题 VB在ACCESS中应用的一个小问题! ACCESS中的FORMS问题? 再普通不过的一个问题 delphi6中还有BDE和ADO吗?它们被淘汰了吗?现在还有必要用它们来学数据库的开发吗? 50分答谢!!!---这个css定义为什么会出现这样的效果??? 各位:怎么判断表里某个字段是否存在? 纯技术问题:精通“书签“与“层“的大虾请进!!!! 一个奇怪的现象,请教高手这是怎么回事? 哪里有破解清华五行卫士密码的软件? vc++7.0好用吗? 吃完晚饭了... 可不可以让 CppWebBrowser1的背景不是白色? 热热热!!!热疯了!!! 我的喇叭哪儿去了? 我的PB程序出了问题了!!! sql server中哪个函数是用于字符串与整型之间转换的? 我想限定文本输入框只能输入10个汉字或20个英文字符,但文件输入框却只能输入10个英文字符,如何解决? 当我将这样的字符串“dsdsdsdfsdffsdsdfsdfsfdsdfsdfsfsfdsdffs.....”放入我的表格中时,无论怎样设置也不折行,影响了部局,如何解决? MFC中视图(view)是怎样随着主窗口的大小改变而改变的。 急!请教!!猫猫连接,用数据管道同时访问两库,访问不到对方的网络库(sybase) 关于电影下载 我已经把一个exe文件加入到我自己的程序中了,请问在我的程序中应该样调用该exe文件呢? 哪位高手知道RTF格式的含义?或者更好,知道Rxlib中的RXRICHEDIT控件中识别RTF格式的方法? Delphi编写的DLL在VC下不能使用 请问哪儿有电工的<>的电子版下载?我只有这么多了 msdn2001年4月版的讨论 请问哪儿有电工的<>的电子版下载? 请教高手!!!! 请进 各位:周末愉快!为何我的多表查询用updatebatch提交时总是报错? 我不明白!!!! 请问,BAS 与 VBJ 有什么区别吗?为何他们安装在同一个目录呢? 如何得到系统进程的列表? vi下如何撤销操作? 我们知道MFC中的对象序列化做得很好,不知在DELPHI中怎样来实现对象的序列化? 我已经学过C++,想学VC++请问哪本书入门比较好啊? 欢迎使用技巧酷skillstore beta 1.00 有个可以显示IP的QQ,很不可思议,讨论一下好吗? 科学题 (20 21:0:21)          把5毫升质量分数为98%的浓硫酸(密度为1.84克/厘米3).加入到25毫升水里进行稀释,求所得溶液的溶质质量分数. 求初二物理试题 关于声音的特性吉他是众多人喜爱的一种乐器.吉他用久了,发生走调,必须请专业的乐师调试.乐师主要是调节琴弦的_________.吉他一般有六根琴弦,这六根琴弦的_________、_________大致一样,琴弦的 (26 15:54:30)一艘船在河中逆流而上,河水流速为3米/秒,经过一座桥时,船上的一只木箱掉落水中,5分钟后船员才发现,立即掉头追赶,同时将航速(船相对与静水的速度)提高到原来的1.5倍,则可在 初二物理练习题我刚升初二请问有没有好题目分享给我些呢(用多 初二物理声音的特性2学案上的 (26 15:39:30)甲、乙两物体都做匀速直线运动,速度之比是4:3,所用时间之比是5:2,则路程之比为 将一边长是10CM的实心立方体木块轻轻放入盛满水的大烧杯中,待木块静止时.从杯中益出600g的水.求:(1)木块受到的浮力(2)木块的密度. 初二物理题,声音的特性.将齿轮固定在玩具电动机的转轴上,启动电动机,使齿轮敲打塑料片,注意这时塑料片发出声音的高低.使玩具电动机的转速逐渐增大,塑料片发出的声音有什么变化?速度 初二科学题(关于水的浮力的) (7 15:53:16)武汉号满载时重7.5*10^7N,求满载时军舰排开海水的体积. (  ρ海水=1.03*10^3kg/m^3  g=10N/kg      结果保留两位小数) 初二物理试题 密度 (5 17:20:35)若把打气筒的出气口封住,再将活塞向下压的过程中,被封闭在气筒内的空气的质量,体积,密度3个物理量中,不变的是?变大的是?变小的是? 初二 物理 初二科学 请详细解答,谢谢! (5 15:45:30)铝球的体积为400立方厘米,质量为810克,问,该球是实心的还是空心的?(铝的密度:2.7×103千克/立方米) (1)一天刚下雨,地上出现一个个小水坑,但月光非常明亮,小英要去朋友家玩,走之前妈妈告诉她:路灯坏了,亮的地方是水坑,小英果然没踩到水,小英从朋友家回来时,朋友告诉她:不亮的地方 密度 (5 17:19:40)如果水结成冰的话,密度是变小还是变大 科学 (24 20:53:14)下列几种用电器正常工作时,电流最大的是(  )A.42寸液晶电视机   B.MP3       C.电子手表            D.100瓦 如图所示,MN是平面镜,A为发光点,B为反射光线上的一点,试画出经过B点的反射光线、这条反射光线对应的入射光线和法线. 水的密度 (5 12:1:17)有一枚奥运会的纪念币,它的质量是16.1克.为了测量它的体积,把它放入一盛满水的量筒中,侧得溢出的水重为1.8×10-2牛.〔1〕求制作纪念币的金属密度;〔2〕盛满水的量筒在 桌子上放着一个空烧杯,烧杯内有——A氮气 B氧气 C空气 D包括ABC 一道初二物理光的反射题深夜,没有灯光,小明用手电筒照在白墙上高处的镜子,竟然发现镜子是黑的,墙是白的,为什么? 求解,15.17.18.19 急,好评的 科学 (24 21:49:28)下列几种用电器正常工作时,电流最大的是(  )A.42寸液晶电视机   B.MP3       C.电子手表            D.100瓦 初二物理题(关于光的反射)急~1.你能让一束平行光线的传播方向改变180度吗?如果能,请你写出需要的器材和具体的做法(画图说明即可,用两种方案做).2.有人用“伸手不见五指”来形容很 水的沸腾 (13 18:15:37)水沸腾时为何响声比沸腾前小,沸腾时的气泡为何上面比下面大,沸腾前的气泡为何下面比上面大. 科学 (24 16:22:14)T℃时,氯化钠的溶解度是n克,将m克氯化钠投入到n克水中,充分搅拌,若得到不饱和溶液,则溶液的溶质质量分数为(   ).如果m克氯化钠不能完全溶解在n克水中,则溶液的溶 光的反射--题 17.18 某同学质量为60㎏,每只脚与地面的接触面积150cm²,当他站在水平地面上时,对地面的压强多大?若他想使自己对地面的压强增大一倍,他可以怎样做? 1.冰块中包有石块,冰块在装睡的杯中处于漂浮状态,当冰块完全融化后,石块沉入底,则杯中的高度将( ).2.一个漂浮在小型也泳池水面上的小船,一个人从池里捞下面物体放入船中,其中能使池 刚倒完热水的热水瓶,立即盖上盖子,冷却后却不易拔出塞子,请你说明其中的道理.答案上写的是水冷却后使瓶内气体减少,为什么气体会减少啊? 初中物理压强计算题初中物理的压强计算题 1.小车在一段光滑的水平面上运动,若它的自重为20N,速度为3米每秒,则该物体作匀速直线运动所需要的推力为( )N;当它运动到一段平直的粗糙面上时,将会由( )变为( ),原因是受到( ) 问一道初二关于大气压的物理题(微难)“把空罐头瓶的瓶口朝下,并将其按入水中,可见始终不能使瓶内充满水.”这句话答案上说是错的,我问老师时她推理了一下然后说应该是瓶内一滴水都 几道初中物理计算题 压强1.动物保护组织成员测量出野牛在水平沙地上站立时留下的一个脚印的面积为0.025立方米,深度为1.8CM,并对该沙地进行抗压实验发现使沙地达到相同深度的压强为2x10x10 1.运动员把铅球掷出去后(不考虑空气影响),铅球仍要受到___力的作用,受力物体是_____,施力物体是_____.2.一个质量为80KG的重物放在水平面上,人施400N的水平拉力就可以使这个重物在地面匀速滑 一物理大气压问题,初二的~在吸管中间剪一水平切口(吸管未剪断)从切口处折弯吸管,使两段大致成直角,把吸管一端放进水里,从另一端用力吹气,观察到的现象是( )1.切口处有水向上喷出 2.切 30和35的公因数有哪些 一位体重为50千克的中学生每只脚与地面的接触面积为200平方厘米,那么他双脚站在水平面上,对地面的压强是多少? 初二物理期末试题.请详细点,谢谢. 科学 (26 19:5:8)一位同学用天平和量筒测定不规则木块的密度,已知木头的密度小于水的密度.请写出所需实验器材和实验步骤,并写出木块密度表达式.  一道初中物理压强计算题把一个长方体平放、侧放、立放在水平桌面上,物块对水平桌面的压强分别是0.8×1000Pa、2×1000Pa、5×1000Pa,已知ρ物=2000kg/立方米,计算这个物块的体积(g取10牛/千克) 初二物理试题,急求,谢谢 1、将干燥纯净的氯酸钾13.25KG与3.25KGMNO2混合后装入大试管知趣氧气,反应一段时间后得到11.7固体物质.(1)制的的氧气质量是多少?(2)反应后固体物质是什么?质量是多少?(1)4.8KG  (2) 求初二物理关于固体压强的两道试题及解答.要有详细的过程哦.谢谢大家咯.我需要的是计算题和过程。不是填空之类的哦。 一束光线与水平面成30度角要使光沿水平方向传播,可用平面镜将光反射来改变它的传播方向,则平面镜与水平方向所成的角应为多少度? 科学家用_、_及_来描述与研究运动. 初二物理光现象试题和答案.过程.最好有实验 光现象的 初二物理光的反射小明同学用如图所示的装置来探究光的反射规律,M是一块平面镜,镶在一块木板上,白色光屏F可以绕垂直于镜面的ON轴转动,E、F屏上面有以O为圆心的圆弧,上面标有刻度,实验如 科学题 (23 21:41:24)1.水晶是晶体吗?2.晶体一般具有______、________,而非晶体一般不具有这些特性.3.无水硫酸铜粉末是____色的,遇水后形成的硫酸铜晶体是____色的,把其溶解在水中形成的硫酸铜溶 人站在水平地面上时,保持静止,受到__力和____力的作用,这两个力的施力物体分别是_____和 _____.这两个力的关系是__________.悬挂在楼板下的电灯,受到地球对它的_____和电线对它的_____作用,这两 小明和小红坐在教室内两个相距不远的座位上,一束阳光照射到教室里较光滑黑板上,小明说看不到黑板上的字迹,小红却说能清晰看到.你认为这种情况可能吗?为什么? 科学 (23 16:47:21)一辆长30m的大型平板车,整两车匀速通过70m长的桥,所用的时间是10s,它以同样的速度通过另一座桥,花了20s时间.那么,另一座桥长多少? 〈声现象〉声音的特性和 噪音的危害和控制 如图所示,两平面镜MP,PN相交,夹角为60°,一束光线AO斜射到MP上,经两平面镜反射后与入射光线AO重合,则AO与MP的夹角α为( ),并作出光路图.请画出光路图,并写出解题过程, 科学 (23 21:28:35)有一铝球,体积是60cm2,质量是108g,判断该球是空心还是实心?如果该球是空心,那么球内的中空部分的体积是多大?如果在中空部分铸满铁,那么这个球的质量为多少?(铝的密度:2.7 求一套初二物理期末试题 一定要有答案啊,两套最好了.直接复制到下面,急 ,这套题不太好,还有没有啊 有关光的反射在水平桌面上有一点光源S,在桌面正上方一米处有一水平放置的平面镜.要使光源发出的光经平面镜反射后,照亮桌面上离光源1m远的B点,平面镜应如何转动?试做图说明. 生活中遇到的科学问题 (21 21:17:30)春节前几天家里的墙壁都很潮湿,这是为什么?那卫生么有有些地方不这样呢? 帮忙找几道初二物理练习题吧,最好有答案 声音的特性一部分吹气球的时候一不小心会把祈求吹破,这时会听到很响的“啪”的一声,对于产生很响的原因,小华有以下猜想:A这时由于气球吹破时引起空气急剧振动而发出的声音B这时由
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn