⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 016.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML>
<a href="index8.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">在Delphi3程序中自动检测、建立数据库别名和表格</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<center><p class="tt2"><span></center><br>
----Delphi3内建的Borland数据库引擎(BDE),使Delphi3程序能通过数据库别名(Database
Alias)十分方便地访问各种类型的数据库。然而,数据库别名的建立、修改、删除等维护工作,需要在BDEAdministrator中进行,数据库中实际表格结构的建立和维护,有时也要在DataBaseDesktop中完成,这给用户增加了不少困难。有没有办法让用户不去执行BDEAdministrator和DataBaseDesktop这两个应用程序,就可直接检测、建立数据库别名和库中的表格呢?笔者通过探索,得到了一种可行的方案,现以笔者所开发的一个单机版的图书资料管理系统为例,简要加以说明。<br>
<br>
----一、数据库别名(Alias)的定义和检测方法<br>
<br>
----当Type为STANDARD时,别名定义最为简单,这时仅能采用PARADOX,DBASE,ASCIIDRV三种数据库作为缺省的驱动程序(DEFAULTDRIVER)。<br>
<br>
----另外,还要定义数据库存放路径(PATH)和ENABLEBCD,才能建立一个完整的数据库别名。<br>
<br>
----Delphi的数据库应用程序能自动提供一个Session组件,这个Session组件即为应用程序与BDE的接口。<br>
<br>
----1.检测别名<br>
<br>
----通过调用Session.GetAliasNames(list:Tstrings)方法,可将当前BDE配置中的所有数据库别名的名称存放到List字符串列表中。list.IndexOf('需要检测的别名')的值会告诉我们这个别名是否存在(其值为-1时不存在)。<br>
<br>
----2.增加一个新的别名<br>
<br>
----Session组件的过程AddStandardAlias(constName,Path,DefaultDriver:string),可以增加一个标准类型的数据库别名。例如增加一个名为Cntssamp,缺省数据库驱动程序为PARADOX、存放路径为c:\delphp11的别名:<br>
<br>
----Session.AddStandardAlias('Cntssamp','c:\delphp11','Paradox');<br>
<br>
----3.BDE配置文件存盘<br>
<br>
----Session.SaveConfigFile;<br>
<br>
----二、数据库中表格的定义和检测方法<br>
<br>
----数据库中表格的定义、维护和使用,只有在数据库别名正确设置的情况下才有意义。以TTable组件为例,必须设置其DatabaseName为一个实际存在的别名。<br>
<br>
----1.检测表格是否存在<br>
<br>
----通过调用Session.GetTableNames(constDatabaseName,<br>
<br>
----Pattern:string;Extensions,SystemTables:Boolean;List:<br>
<br>
----TStrings)方法,可将当前指定数据库别名中所有表格的名称存放到List字符串列表中。list.IndexOf('需要检测的表格名')的值会告诉我们这个表格是否存在(其值为-1时不存在)。<br>
<br>
----2.建立一个表格<br>
<br>
----第一步,设置TTable组件的DataBaseName(别名)、TableName(表格名)、TableType(数据库类型);<br>
<br>
----第二步,调用Table.FieldDefs.Add(constName:string;<br>
<br>
----DataType:TFieldType;Size:Word;Required:Boolean)增加表格的各个字段,其中Name为字段名,DataType为字段类型(常用的有ftInteger,ftString,ftDate,ftBoolean等),Size为字段长度,Required为该字段是否允许有空值。<br>
<br>
----第三步,调用Table.IndexDefs.Add(constName,Fields:string;Options:TIndexOptions)方法增加表格的索引文件,其中Name为索引文件名,Fields为索引字段,options为索引参数的集合,常用的索引参数有ixPrimary(主键)、ixDescending(降序)、ixUnique(具有唯一值)等。<br>
<br>
----第四步,调用Table.CreateTable建立表格。<br>
<br>
----三、一个实例<br>
<br>
----在Form1.Formcreate事件中写入如下代码,程序启动时,将自动检测是否存在数据库别名Cntssamp,如果没有则建立之;自动检测别名Cntssamp中是否存在表格TSK(图书库),如果没有则自动建立表格TSK。<br>
<br>
</span>procedure TForm1.FormCreate(Sender: TObject);<br> 
var<br> 
&nbsp; ap:TStringList;&nbsp;&nbsp; {字符串列表变量}<br> 
&nbsp; answer:Integer;<br> 
begin<br> 
&nbsp; ap:=TStringlist.Create;<br> 
&nbsp; Session.GetAliasNames(ap);&nbsp;&nbsp; {取得别名列表}<br> 
&nbsp; if (ap.IndexOf('Cntssamp')=-1) then&nbsp;&nbsp; {判断别名是否存在}<br> 
&nbsp; begin<br> 
&nbsp;&nbsp;&nbsp; answer:=Application.MessageBox(<br> 
'别名Cntssamp不存在,<br> 
现在创建吗?','BDE信息窗口',mb_OKCancel);<br> 
&nbsp;&nbsp;&nbsp; {增加一个名为Cngzsamp的数据库别名}<br> 
&nbsp;&nbsp;&nbsp; if&nbsp; answer=IDCANCEL then begin<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ap.Free;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br> 
&nbsp;&nbsp;&nbsp; end;<br> 
Session.AddStandardAlias<br> 
('Cntssamp','c:\delphp11','Paradox');<br> 
&nbsp;&nbsp;&nbsp; Session.SaveConfigFile;&nbsp;&nbsp;&nbsp; {BDE配置文件存盘}<br> 
&nbsp; end ;<br> 
<br> 
&nbsp; ap.Clear;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {取得别名Cngzsamp中的所有表格名称列表}<br> 
&nbsp; Session.GetTableNames<br> 
('Cntssamp','',False,False,ap);<br> 
&nbsp; if (ap.IndexOf('TSK')=<br> 
-1)&nbsp; then&nbsp; {判断表格是否存在}<br> 
&nbsp; begin<br> 
&nbsp;&nbsp;&nbsp;&nbsp; answer:=Application.MessageBox(<br> 
&nbsp;&nbsp;&nbsp;&nbsp; '别名Cntssamp中不存在<br> 
表格TSK,现在创建吗?','表格信息窗口<br> 
',mb_OKCancel);<br> 
&nbsp;&nbsp;&nbsp;&nbsp; if answer=IDCANCEL then begin<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ap.Free;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br> 
&nbsp;&nbsp;&nbsp;&nbsp; end;<br> 
&nbsp;&nbsp;&nbsp;&nbsp; with table1 do begin<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Active:=false;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DatabaseName:='Cntssamp';&nbsp;&nbsp;&nbsp; {数据库别名}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableName:='TSK'; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {表格名}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TableType:=ttParadox; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {数据库类型}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with FieldDefs do begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {增加字段}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clear;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add('SH',ftString,30,False);&nbsp; {书号 
String(30)}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add('SM',ftString,30,False);&nbsp; {书名 
String(30)}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add('CBS',ftString,20,False); {出版社 
String(20)}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add('CBRQ',ftDate,0,False);&nbsp;&nbsp; {出版日期 
Date}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add('YS',ftInteger,0,False);&nbsp;&nbsp; {页数 
Integer}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with IndexDefs do begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {增加索引}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clear; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{按书号字段建立主索引}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add('SHSY','SH',[ixPrimary,ixUnique]);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CreateTable;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {创建表格}<br> 
&nbsp;&nbsp;&nbsp; end;<br> 
&nbsp; end ;<br> 
&nbsp; ap.free;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {释放变量ap}<br> 
end;<br> 
<br> 
---- 四、 本 程 序 在Pwin95,Delphi3 环 境 下 调 试 通 过。</p> 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -