获取数据域和索引信息
在取得了数据表信息后 应使用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/8543var
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查询语句来提高运行效率,另一方面你还可以使用存储过程来更大的提高运行效率。(这些知识你需要看数据库的内容,这里具体如何优化就不说了。)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)