Delphi开发工具中如何访问数据库结构[2]

Delphi开发工具中如何访问数据库结构[2],第1张

获取数据域和索引信息

在取得了数据表信息后 应使用TTable对象访问该数据表的具体信息 对应函数如下

以下是引用片段 procedure TDataSet GetFieldNames(List: TStrings)procedure TTable GetIndexNames(List: TStrings)

GetFieldNames用来取得数据表中的各个域名 GetIndexNames用来取得数据表中的各个索引名

另外 可以进一步使用TDataset和TTable中的两个属性TDataSet FieldDefs Items[] 和 TTable IndexDefs Items[]来访问具体的数据域信息和索引信息 它们分别是由TFieldDef和TIndexDef组成的数组

TFieldDef描述如下

TIndexDef描述如下

TFieldType定义如下

以下是引用片段 TFieldType = (ftUnknown  ftString  ftSmallint  ftInteger  ftWord  ftBoolean ftFloat ftCurrency  ftBCD  ftDate  ftTime  ftDateTime  ftBytes  ftVarBytes ftAutoInc ftBlob  ftMemo  ftGraphic  ftFmtMemo  ftParadoxOle  ftDBaseOle ftTypedBinary ftCursor)

TIndexOptions定义如下

以下是引用片段 TIndexOptions = set of (ixPrimary  ixUnique  ixDescending  ixExpression  ixCaseInsensitive)

它们的具体意义可以参见Delphi帮助

应用实例

使用下面的程序片段即可获得指定数据库中指定表的域定义和索引定义 ListBox ListBox 和 ListBox 为Form 中定义的三个列表框 用于显示结果

以下是引用片段 Var  Alias TableName:String Table :TTable Begin Alias:= fjs   TableName:= d*     //初始化 Session GetTableNames(Alias {别名}                       TableName {过滤器}                       True {是否显示文件扩展名(对DBF) }                       False {是否显示系统表}                       ListBox Items) If ListBox Items Count= then   Begin     MessageDlg( 数据库 +Alias+ 中没有数据表 +TableName mtError [mbOK] )   Exit End Table :=TTable Create(nil) Table DatabaseName :=Alias Table TableName := ListBox Items Strings[ ] {取得表中字段名及索引名} Table Open if Table Active then begin Table GetFieldNames(ListBox Items)    Table GetIndexNames(ListBox Items) end //… 此时结果在ListBox 和ListBox 中 // Table Destroy end

小结

通过上面讨论和实例证明 利用Delphi语言开发数据库软件管理系统 关键技术都已得到解决

参考文献

[ ] (李维 编著) 《DELPHI 高效数据库程序设计》机械工业出版社

[ ] 郭旭等 著 《Delphi 应用开发指南》清华大学出版社

[ ] 大富翁 // delphibbs /

收稿日期 月 日 修改日期 月 日

作者简介 于海生 男 年生于辽宁省丹东市 黑龙江大庆人 年毕业于辽宁化工大学计算机科学与技术专业 助理工程师 研究方向为钻井计算机软件开发与应用

lishixinzhi/Article/program/Delphi/201311/8543

var

 a,b:Pbyte

 i

:integer

 ResultBuffer

:array

[1..Max]

of

byte

begin

 for

i

:=

1

to

Sizeof(Buffer)

div

8

do

 begin

a

:=

@Buffer[(i-1)*8+1]

b

:=

@ResultBuffer[(i-1)*8+1]

Des(a^,b^,true) //这里使用DES加解密处理

 end

end

多使用WSASend,WSARecv等WinSocket

2函数,不要使用Send,Recv函数

这个主要看你的服务器运行在什么系统中了,如果运行在WIN系统里,最好使用WSA系统的函数,因为Microsoft毕竟将它们都优化了

高效的服务器一定要使用线程池技术,使用多少线程合理,需要线程处理什么样的数据。我个人认为如果要使用线程池的技术,一定要处理那些最费时的 *** 作,如数据库的查询 *** 作。

如果服务器使用了“池”的概念,这就又出现了一个问题,如何高效的分配池呢?

我在程序中大量的使用池,如线程池,数据池等。当数据到达的时候,如何分配池呢?这里就不告诉大家了,以后再专门写一篇关于池的文章。详细的介绍如何使用池。大家也可以自己考虑一下。

使用高效的字符串 *** 作函数

因为服务器一定要进行大量的字符串运行,如果使用Delphi自带的函数来 *** 作,就比较费时,所以这里推荐大家使用QStrings.pas字符串 *** 作函数集,相信会对大家有帮助的。

优化你的SQL查询语句

你可以一方面优化SQL查询语句来提高运行效率,另一方面你还可以使用存储过程来更大的提高运行效率。(这些知识你需要看数据库的内容,这里具体如何优化就不说了。) 


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存