📄 db6qa.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=bg2312">
<meta name="Author" content>
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<title>VB6 与资料库程式设计 - Q&A</title>
</head>
<body bgcolor="#FFFFFF" text="#202020" link="#FF0000"
vlink="#000080" alink="#FF0000">
<h2 align="center"><font color="#0000FF">VB6 数据库程序设计</font></h2>
<p align="center"><font color="#800000" size="5"><b>Q & A</b></font></p>
<hr>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td>07/03</td>
<td><a href="#Q7">使用键盘操作 p.101 的
Valid04.vbp, 结果会避开验证程序,
如何解决?</a></td>
</tr>
<tr>
<td><font color="#800000">06/26</font></td>
<td><a href="#Q6">如何动态设置数据库的所在路径?</a></td>
</tr>
<tr>
<td><font color="#800000">06/20</font></td>
<td><a href="#Q5">VB5 的数据库程序可以直接在
VB6 执行吗?</a></td>
</tr>
<tr>
<td><font color="#800000">06/13</font></td>
<td><a href="#Q4">VB5 使用 DBGrid 开发的数据库程序不能使用于 VB6?</a></td>
</tr>
<tr>
<td><font color="#800000">05/18</font></td>
<td><a href="#Q2">对数据库来说,如何处理已经删除的数据记录空间?</a></td>
</tr>
<tr>
<td><font color="#800000">05/18</font></td>
<td><a href="#Q3">JPG或GIF格式的图片是否可以插入于
mdb数据库?</a></td>
</tr>
<tr>
<td valign="top"><font color="#800000">03/27</font></td>
<td valign="top"><a href="#Q1">如何使用 VB6 的 ADO
打开含有密码的 mdb 数据库?</a></td>
</tr>
</table>
<hr>
<h3><a name="Q7"><font color="#800000"></font></a><font
color="#800000">使用键盘操作 p.101 的 Valid04.vbp,
结果会避开验证程序, 如何解决?</font></h3>
<hr>
<blockquote>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td valign="top">Q:</td>
<td valign="top">我使用您附在书中之程序范例
valid04.vbp, 依您书中所述应该会使错误数据回复;
但我在Datagrid1中对 "收盘价" 栏目输入0, 而屏幕出现警告信息,
但我使用键盘移至下一笔数据时,错误数据仍旧没有回复.</td>
</tr>
<tr>
<td valign="top">A:</td>
<td>经测试, 发现 DataGrid 将数据写入数据库之前, 并不会产生
Adodc1_WillChangeRecord,
这听起来有点不合理, 但却是事实。
目前解决的方法, 是增加以下程序:<blockquote>
<pre>Private Sub DataGrid1_<strong>BeforeUpdate</strong>(Cancel As Integer)
Dim pRecordset As Recordset
Set pRecordset = Adodc1.Recordset
If pRecordset("收盘价") < pRecordset("最低价") Or _
pRecordset("收盘价") > pRecordset("最高价") Then
Cancel = True
End If
End Sub</pre>
</blockquote>
<p>其中 BeforeUpdate 事件会发生于 DataGrid 将数据写入数据库之前。</p>
</td>
</tr>
</table>
</blockquote>
<hr>
<h3><a name="Q6"></a><font color="#800000">如何动态设置数据库的所在路径?</font></h3>
<hr>
<blockquote>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td valign="top">Q:</td>
<td valign="top">编写程序时,
都是在自己的机器进行测试, 如果想把执行文件安装到其他电脑 (安装之后 .mdb 文档的所在路径可能与原机器不同),
此时程序如何正确地打开数据库?</td>
</tr>
<tr>
<td valign="top">A:</td>
<td>这个问题很好, 当我们利用 ADODC 设置好数据库时, ADODC会记录数据库文档的绝对路径,
所以当然程序移植到其他机器之后, 路径就可能变得不正确。
修改的方法如下: <font color="#008040">(注:设计时,ConnectionString
及 DataGrid 的 DataSource 属性要先清成空白)</font><blockquote>
<pre>Private Sub Form_Load()
S = "Provider=Microsoft.Jet.OLEDB.3.51; Persist Security Info=False;"
S = S & "Data Source=" & <font
color="#0000FF"><strong>Mdb数据库的路径</strong></font>
Adodc1.ConnectionString = S
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
End Sub</pre>
</blockquote>
<p>以上的“Mdb数据库的路径”可以在进行安装时,
将其写入Windows的Registry (例如执行SaveSetting语句 ),
然后才在程序中利用GetSettting语句 读取“Mdb数据库的路径”。</p>
</td>
</tr>
</table>
</blockquote>
<hr>
<h3><a name="Q5"></a><font color="#800000">VB5 的数据库程序可以直接在 VB6 执行吗?</font></h3>
<hr>
<blockquote>
<p>如果您的程序没有使用到 DBGrid 及 Crystal
Report, 则可以直接在 VB6 执行。</p>
<p>如果您的程序使用了 DBGrid,请参考 Q&A“<a
href="#Q4">VB5 使用 DBGrid 开发的数据库程序不能使用于 VB6?</a>”的说明。</p>
<p>如果您的程序使用了 Crystal Report, 很抱歉<font
color="#008000">(我干吗说抱歉,
说抱歉的应该是微软)</font>, VB6 不再附带这个控件,
因此您必须先安装 VB5(同时也安装 Crystal Report),
再安装 VB6, 接着才可以在 VB6 之中使用 Crystal
Report。</p>
</blockquote>
<hr>
<h3><a name="Q4"></a><font color="#800000">VB5 使用 DBGrid 开发的数据库程序不能使用于 VB6?</font></h3>
<hr>
<blockquote>
<p><font color="#000080"><em>我在 VB5 底下所开发的数据库程序使用了 DBGrid
控件, 后来我在另一台全新的机器中安装了VB6, 然后执行这些使用 DBGrid
控件所开发的程序, 结果却出现“找不到DBGRID32.OCX”的错误,
该如何解决?</em></font></p>
</blockquote>
<blockquote>
<hr>
</blockquote>
<blockquote>
<p>方法有二: </p>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td>(1)</td>
<td>先安装VB5、再安装VB6。</td>
</tr>
<tr>
<td valign="top">(2)</td>
<td>如果不想安装VB5, 首先从VB6第一片光盘中寻找DBGrid32.*
文档 (只有专业版及企业版才找得到),
结果至少可以找到DBGrid.reg及DBGrid32.ocx这两个文档,
接下来在VB6底下安装DBGrid的步骤如下:</td>
</tr>
</table>
<ol>
<li>请将DBGrid32.ocx复制到硬盘中,通常是复制到Windows底下的System目录。</li>
<li>双按DBGrid.reg文档将DBGrid所需登录的信息汇入系统的登录数据库。</li>
<li>启动VB6,然后选取菜单的“工程/ 部件”,接下来在“部件”窗口里面按下“浏览”钮将DBGrid32.ocx引用进来。</li>
</ol>
<p>经过以上步骤之后,凡是使用DBGrid所开发的数据库程序都可以在VB6底下执行了。</p>
</blockquote>
<hr>
<h3><a name="Q3"></a><font color="#800000">JPG 或 GIF
格式的图片是否可以插入于 mdb 数据库?</font></h3>
<hr>
<blockquote>
<p>VB 程序可以将 JPG 或 GIF 格式的图片插入于mdb数据库,
而 VB 的作法是直接读取图片(形)控件 (例如
Image 或 PictureBox 控件) 的 Picture 属性, 然后插入于图片栏目,
但由于Picture属性存放图片的格式一律采用Bmp格式,
所以原本有经过压缩的 JPG 或 GIF 图片, 储存到数据库之后, 会变成没有经过压缩的
Bmp 图片, 所以数据库可能会急速膨胀。</p>
</blockquote>
<hr>
<h3><a name="Q2"></a><font color="#800000">对数据库来说,
如何处理已经删除的数据记录空间?</font></h3>
<hr>
<blockquote>
<p>我们几乎可以不必担心数据库这方面的问题, 数据库本身会判断是否有被删除的空间,
如果有, 还会继续使用他们。 所以,
除非我们真的不断地新增数据记录,
否则在有删除有新增的情况下, 数据库并不会一直长大。</p>
</blockquote>
<blockquote>
<p>当然, 数据库文档也跟其他文档一样, 有“数据区段”的问题,
对同一数据表而言, 过多的数据区段(数据记录分散在不同位置)势必影响执行效能,
为了解决这个问题, MDB数据库允许我们重整数据库(也就是将同一数据表的数据记录放在一起),
至于如何重整数据库呢? 如果您有 Access 软件, 那么选取其菜单的<font color="#800000">“</font><font color="#800000">工具/数据库公用程序/压缩数据库”</font>即可达到此一目的。</p>
</blockquote>
<hr>
<h3><a name="Q1"></a><font color="#800000">在 VB6 里面,如何打开含有密码的 mdb 数据库?</font></h3>
<hr>
<blockquote>
<p>在使用 ADODC 或 DataEnvironment 设置好连线之后,直接利用属性窗口修改
ConnectionString 属性(附属于 ADODC) 或 ConnectionSource
属性(附属于 DataEnvironment 的 Connection 对象),修改的方法是在属性之后增加以下参数:</p>
</blockquote>
<blockquote>
<blockquote>
<p>;<font color="#0000FF">Jet OLEDB:Database Password</font>=密码</p>
</blockquote>
</blockquote>
<blockquote>
<p>除了 ADODC 及 DataEnvironment 之外, 直接使用
ADO 对象来打开含有密码的 mdb 数据库,设置参数的方法也是相同的。</p>
</blockquote>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -