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

建立自己的数据字典库-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
建立自己的数据字典库-Delphi资料

当开发一个稍大一点的数据库程序时,往往会涉及许多表。这些表的

管理就成为一个问题了。Delphi3(C/S)提供了数据字典的功能,

但有一定的局限性,而且该数据字典的功能中有BUG。我一般都自己

建一个数据字典库来管理一个工程中的许多表,工程中所有的表在字

典库中都有详尽的描述,便于管理和维护。这样不论时过多久,工程

中所有的表都能尽在掌握之中的。若对数据库结构只作很小的改动时,

只在数据字典库中进行,然后由程序来动作创建表,既快而又不容易

出错。可以详尽地描述一个字段的名称、类型、显示名称,提示数据

库,提示字段、是否为索引字段、是否允许修改等等。用户可以随时

修改字段的显示标题(Title)

提示内容等而不必修改程序本身。

对于使用DBGrid控件来说,完全可以由程序来实现各个Colum的标

题、提示等内容的填写。不必很麻烦地一个个地去设计DBGrid的每

一个Column,也不会因为失误或结构的修改或其他原因导致要重新

将DBGRid的各个Column设计一遍这种麻烦而又可能导致新的错误

的重复性劳动。由于能自动填写显示标题,提示内容等功能,就不

用在屏幕上放很多TTable的可视化小方块图形了,只要处理过程

不冲突,就可以共用一个TTable控件,也就可以相对地节约一些

系统资源了。总之我认为采用数据字典库好处很多的。我这里有一

个实际的字典库使用的例子,该例子是为了给指定的DBGrid控件填

写各个字段的显示标题(DiplayLabel),提示内容(PickList)的

供参考:

procedure TFMlrxz.GetDisplayName( pform:tform; PDB:TTable; PGD:TDBGrid );

var

i: integer;

fdnm: String[25];

fdnma: array[0..40] of Char;

fdnmp: PChar;

lktb

rgstart

rgend

rgfd: String[12];

lkfd: string[20];

tskm

tszd: Variant;

begin

amkey := "";

asubkey := "";

for i := 0 to 40 do

azdxwm[i] := "";

with pdb do

begin

fdnm := upperCase(Pgd.Fields[0].FieldName);

if lowercase(pform.name) = "fmlrsj" then

jskm := xzzkm

else

jskm := xzkm;

if locate("bxwm; zdxwm"

VarArrayOf([jskm

fdnm])

[loCaseInsensitive] ) then

begin

keycount := fieldbyname("keycount").asinteger;

for i:=0 to Pgd.FieldCount-1 do

begin

fdnm := upperCase(Pgd.Fields[i].FieldName);

Pgd.Fields[i].DisplayLabel := FieldByName("zdhzm").AsString;

PGD.Columns[i].Title.Alignment := taCenter;

azdxwm[i] := fdnm;

if lowercase(pform.name) = "fmlrxz" then

begin

if (azdxwm[i]="DX") or (azdxwm[i]="XT") or (azdxwm[i]="RW") then

PGD.Columns[i].field.OnChange := Fmlrsj.dbxhDXChange;

azbbh[i] := fieldbyname("zbbh").asstring;

if length(fieldbyname("gjz").asstring)<> 0 then

amkey[i] := fieldbyname("gjz").asstring[1];

end;

if (lowercase(pform.name) = "fmlrsj")

and (length(fieldbyname("gjz").asstring)<> 0) then

asubkey[i] := fieldbyname("gjz").asstring[1];

{ ************************************************************ }

lktb := FieldByName("LookTable").AsString;

lkfd := FieldByName("LookField").AsString;

if (Length( lktb ) <> 0) then

begin

DBtemp1.Active := False;

if FieldByName("tbname").AsString = "ZD" then

DBtemp1.DatabaseName := "jzglzd"

else

DBtemp1.DatabaseName := "jzgl";

DBtemp1.TableName := lktb;

DBtemp1.Active := True;

DBtemp1.First;

PGD.Columns[i].PickList.Clear;

{ ************************************************************** }

if lktb = "tsdict.db" then

begin

// tskm := xzkm;

tszd := fdnm;

with dbtemp1 do

if (locate("tszdxw"

tszd

[loCaseInsensitive]))

and (length(FieldByName("tsnr").AsString) <> 0 ) then

begin

fdnm := FieldByName("tsnr").AsString;

PGD.Columns[i].PickList.Add(fdnm);

next;

while (length(FieldByName("tszdxw").AsString) = 0)

and (not eof) do

begin

fdnm := FieldByName("tsnr").AsString;

PGD.Columns[i].PickList.Add(fdnm);

next;

end;

end;

end {end of "tsdict"}

else

begin

if (dw <> "k00") and ((lktb = "dwdzdict.db") or (lktb = "zdming.db")) then

begin

{if lktb = "dwdzdict.db" then

begin

rgstart := "-0000";

rgend := "-9999";

rgfd := "dwdz";

end; }

if lktb = "zdming.db" then

begin

rgstart := "00";

rgend := "99";

rgfd := "zddz";

end;

with DBtemp1 do

begin

SetRangeStart; { Set the beginning key }

FieldByName(rgfd).AsString := dw + rgstart;

SetRangeEnd; { Set the ending key }

FieldByName(rgfd).AsString := dw + rgend;

ApplyRange; { Tell the dataset to establish the range }

end;

end; {end of "dw <> k00 }

while not DBtemp1.Eof do

begin

fdnm := DBtemp1.FieldByName(lkfd).AsString;

PGD.Columns[i].PickList.Add(fdnm);

DBtemp1.Next;

end;

end;{ end of else}

PGD.Columns[i].ButtonStyle := cbsAuto;

PGD.Columns[i].DropDownRows := 10;

end; {end of length(lktb)<>0}

next;

end; {end of for i:=0 to Pgd.FieldCount-1}

end {end of if locate}

else

begin

fdnmp := @fdnma;

StrPcopy(fdnma

fdnm);

StrCat(fdnmp

:不在字段名库中

);

Application.MessageBox( fdnmp

提示信息

mb_OK );

end;

end;

end;

基于DuiEngine的开源DirectUI图形界面库SOUI 【CTO讲堂】工具类、新闻类、视频类等不同类型App的积分体系该如何搭建? 浏览器的改进应来自用户诉求而非商业诉求 《近匠》Moxtra:可内嵌的一站式移动协同解决方案 互联网时代的无栈开发 SDCC 2015参会感——无法计算的价值 英特尔中国研究院开放日 多个研究项目齐亮相 阿里王晶昱谈淘宝双11分布式数据库实战 为什么移动化对企业级应用如此重要? 移动App图标设计的最佳实践 在Node应用中实施Web认证的四大方法 如何在Swift中使用LLVM API? 七麦科技王东:搜索优化与数据支撑打破App推广困局 Android国外学习资源汇总 【CTO讲堂】揭秘高效协作工具背后的技术架构 TIOBE 2015年12月编程语言排行榜:Java正处巅峰 “Atlassian—敏捷就这么简单“沙龙在京落幕,百度、京东专家秘技公开 《近匠》奇点机智创始人邬霄云:用DeepShare打通App间的信息孤岛 如何使用HBase构建NewSQL? 《近匠》极验验证:基于“行为沙盒”主动框架的安全验证 C语言实现拉格朗日插值 C语言实现快速傅立叶变换 新手学Android开发经常出现的问题 Windows环境下SVN项目迁移的方法 C# Winfrom控件绘制边框 ASP.NET FormsAuthentication.SignOut()无法退出登录的解决方法 百度UEditor编辑器提示错误:后端配置项没有正常加载,上传插件不能正常使用! Font Awesome字体图标的使用方法 Bootstrap响应式导航菜单栏的实现方法 C#调用百度翻译API接口实现英汉互译 VisualSVN Server免费版和企业版的区别? 用xml做数据库是不是不安全 关于setwindowlong的问题!!! 关于WINSOCK 通信的问题 Query Analyzer怎么刪不了多筆記錄﹖ getchar ()的问题 ◆→访问csdn会让我“死机”! 纯技术咨询,请大家踊跃发言 一个串口通讯的问题。 一个庞大的计算计划,求解素数的间隔的 那句效率高点? 有没有sql server+asp开发的朋友,怎样把sql server数据库上传到服务器上,分绍有分! 如何注册使用控件,急!!! CView类中如何实现浮动的提示信息? 怎样给对话框创建一个视1? 报表计时用table,不用query,报表已设计好了,在显示预览时如果将一些不符合条件记录筛选择掉呢? 请问流是个什么概念? 我是初学,请指点 送分求购api用法及中文说明! asp页面可否设置关键字,使文章能被搜索引擎搜索到? ~~谁想做世界杯活力宝贝~~? 如何将StringGrid 中的数据保存为Html格式的表格 关于断点续传,请问大家 php中有没有 与 asp response.clear等同函数 单片机高手请看:中断中的中断,麻烦中的麻烦。 怎一个难字了得?挑战高手 如何改变LISTVIEW中各项的宽度 求《C++ Primer》中文版电子书下载;ejian@21cn.com 请问:在Asp中如何使用ODBC和SQL 注册表help... ListCtrl控件设为ICON属性,请问是否有subitem属性? Win2000系统去访问WIN98系统的服务器 PING的通 但打开的时候报参数出错! vb调用vc编的activex oem怎么老是连不上阿? 简单的入门问题:如何让菜单变灰? how add icon to one popup menu ? 怎么判断一个form对象变量为空呢? 发送和接收数据包问题? ActiveX问题,微软专家请进.<------------- 急 *.idc不能运行了,请问这是为什么? dbcontrols(泰山__抛砖引玉) 怎样才能够把ado记录集写到EXECL并进行打印呢? 如何判断字符串中,有几个指定的字符? xml数据文件倒入数据库,有什么好方法。 检查数据的有效性,最好是在哪一个事件中检查?怎样写,可否给点例子。 如何在DELPHI中调用FLASH图片。谢谢!有帮助的给分! 一个有关串列的question!HELP.. 怎样让对话框总在最前? 今天一个女孩脸红的对我说声谢谢 为什么dll调试跟踪不进去 菜鸟提问:请解释一下.vbs好吗?里面可以放那些东西,怎么引用.......等等 Delphi 2 BCB的问题:BCB中的"::", ".","->"有什么区别? *.idc不能运行了,请问这是为什么?谢谢 简单的数据库问题 腌鸭蛋的盐,水,蛋的比例是多少? 一束与水平地面成30度的入射光线射的地面,现在利用平面镜将光线沿水平方向反射出去,画出光路图并计算平面镜应与水平方向成多少度的夹角位置?(写出计算过程) 矩形花圃一面靠墙,另外三面围的栅栏的总长度是19米,如果花园的面积是24m²,求花园的长和宽.总觉得 但是我是原封不动的 打上去的 总长度是19米 已知半圆的直径AB=18厘米,AC弧所对的圆心角为30度,求阴影部分的周长一个半圆,左边突出一个角,这个突出的角和半圆的斜上半部分有阴影突出的角上面左边的顶点为C点,半圆最下面的一天 四年级上册寒假学伴P9括展天地怎麽写 腌咸鸡蛋时,很长时间鸡蛋才会变咸;而煮茶叶蛋时,鸡蛋很快就变咸了,为什么? 在初中第一次月考,成绩很不好作文 某玩具加工厂最近生产一批福娃向外出口,他们计划每天生产x箱,每箱装有福娃50个,供给5个商店销售.请你用式子表示平均每个商店日进货量是多少. 家长会后作文 《月考》 四年级数学同步下册冀教版10页拓展练习怎么做 关于怎样爱护树木的作文 种7棵树,使其中的3棵树在一条直线上,共排成6行(每一行只有3棵树)你设计种树的位置 第一题第二题请在?处填上合适的小数,使每横行 竖行 斜行三个数相加的和都相等 找篇爱护树木人人有责的作文不要小学生的! 7棵树排6行每行3棵该怎么排? 利用长12cm的旧围墙以及总长度为24的栅栏围成一个长方形花圃ABCD、 1、若长方形花圃ABCD的面积为64平方米1、若长方形花圃ABCD的面积为64平方米,求AB2、能不能围成面积为80平方米的长方形花圃 求一篇爱护树木的作文 一套桌椅的价格是105元,其中椅子的价格是课桌的3分之4.椅子每把是多少? 如图,在一面靠墙的空地上用长为24米的篱笆,围成中间隔有两道篱笆的长方形花圃,设宽AB为x米,面积为S平方米(1)求S与x的函数关系式及自变量的取值范围;  (2)若从设计角度出发墙的最小利 一个楼梯的水平长度为5米,垂直高度为4米,若在楼梯上铺地毯,至少需要多少米? 冬天爱护树木作文600 一套480元的桌椅,椅子的价格是课桌的七分之三,课桌和椅子的价格各是多少元?用两种方法!一种解方程一种列式 如图,一个楼梯的水平长度为5米,垂直高度为4米,若在楼梯上铺地毯,至少需要多少米? 四年级寒假学伴全部答案要2011年的!赶紧! 有7棵树苗,每3棵种在一条直线上,只能种6行.画图,两种方式. 如图,一个楼梯的水平长度为5米,垂直高度为4米,若在楼梯上铺地毯,至少需要多少米? 四年级上册寒假学伴P18页全部答案 7棵树分别摆成3,4,5,6行,每行3棵,怎么摆?画图最好! 海峡出版发行集团 鹭江出版社 一个圆形喷水池,他的周长是12.56米,求这个喷水池的面积?如果喷水池周围围绕一条宽1米的环形绿化带,求绿化带的面积是多少? 把7棵树栽成6行,每行3棵,应该怎样栽?请画图表示 鹭江出版社寒假学伴20面答案是什么?只要能一一填进空里就行, 描写花草树木的作文 我要300多字哦 有的请快发哦 北师版小学数学四年级下册第二单元第二课三角形分类,谁有比较新颖的设计?我要讲课,急需这节课的教学设计,最好是比较新颖的, 六年级寒假学伴19页 鹭江出版社国产汽车品牌 de 标志图 de 生产地区 【5种】厦门的海上交通——空中交通——陆地交通——我的感受—— 《我来说说家长会》这篇作文怎么写啊?请大家说说对家长会的见解,看怎么写这篇作文才好。明天之前给我一点有用的意见。 急求冀教版四年级数学下册教案? 鹭江出版社四年级寒假学伴第10页第四题 小弟弟像_____________,妈妈___________. 关于家长会的作文怎么写 光线AO为入射光线,要使光线的方向改变60度,平面镜该如何放置怎么花 四年级下寒假作业鹭江出版社的答案 一个圆形的水池,半径3m,在它周围有一条宽5m的环形绿化带,绿化带的面积是多少平方米? 寒假学伴 鹭江出的 五年级上册 答案 为爱种一片森林阅读答案 在一个直径为16米的圆形水池四周修一条2米宽的小路,这条小路的面积是多少? 五年级上册寒假学伴鹭江出版社的第24页第五题能力广角怎么做? 家长会后作文600字左右 一个圆形水池,半径三米,在它的周围有一条宽五米的环形绿化带,绿化带的面积是多少平方米? 在 两棵树 中本文通过描写什么和什么这两件事,向我们展示了什么道理 如何获得新知识 福尔摩斯英文书重庆哪里卖就是上面 读了两棵树的境遇你悟出了什么道理 家长会以后【作文】写语文的就好了...班上第四名的语文成绩,..老师对我的评价还好..给我一篇例文今天上午之前就要啊.重谢 初一第一次月考会考什么作文 农夫种的两棵树农夫在地里同时栽了两棵同样大小的果树苗.第一棵树拼命地从地下吸收养料,并将它储备起来,用它滋润每一根枝干.另一棵树也拼命地从地下吸收养料,打算早点开花结果.第二 腌咸鸭蛋放多少盐? 一束光线垂直射到水平放置的镜面上,若入射光线的方向不改变,而把平面镜转动10度则反射光线与入射光线的夹为多少 一条比直的大道两旁种树时,先定下两棵树的位置,然后其他树的位置就容易确定下来了,这说明?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘