📄 readmevb.htm
字号:
<!------------------------------------------------------------------->
<!-- Data Access Issues and DataBinding Tips -->
<!-- -->
<h3>有关数据访问的问题和数据绑定的技巧</h3>
<br>
<!------------------------------------------------------>
<!-- DataBind1 -->
<!-- -->
<h4><a name="DataBind1"></a>数据环境设计器代码示例中的错误</h4>
<p>在主题中,“在数据环境设计器中通过编程来访问对象
“执行一个带有多个参数的 Command 对象”中的例子错误地使用了 <b>Open</b> 方法:
<pre><font face="Courier">
MyDE.Commands("InsertCustomer").Parameters("ID").value = "34"
MyDE.Commands("InsertCustomer").Parameters("Name").value = "Fred"
MyDE.Commands("InsertCustomer").<b>Open</b>
</font></pre>
<b>Commands</b> 对象根本没有 <b>Open</b> 方法。必须改为使用 <b>Execute</b> 方法。
</p>
<br>
<!------------------------------------------------------>
<!-- DataBind2 -->
<!-- -->
<h4><a name="DataBind2"></a>与数据绑定控件不兼容的情况</h4>
<P>由于 Visual Basic 6.0 的一些改变,使得并不是所有的数据绑定控件都能够与所有的数据源兼容。这种不兼容性是由于 ADO 和 DAO/RDO 的内部绑定机制存在不同而造成的。为与 DAO/RDO 一起使用而专门创建的控件就不能绑定到一个 ADO 数据控件;而为与 ADO 一同使用而创建的控件则不能被绑定到标准的数据控件或者远程数据控件。</P>
<P>这种不兼容的情况主要存在于复杂绑定的控件,诸如grids 或者 lists 这些需要绑定到一个数据源的多个字段的控件;简单绑定的控件,诸如文本框或者标签这样的绑定到单个字段的控件能够和每种数据源兼容。以下是一些示例: </P>
<UL>
<LI>Microsoft 数据绑定 Grid 控件 (Dbgrid32.ocx) 可以被绑定到 DAO 或者 RDO 数据控件;但是不能被绑定到 ADO 数据控件。</LI>
<LI>Microsoft DataGrid 控件 (Msdatgrd.ocx) 可以被绑定到 ADO 数据控件;但是它不能被绑定到 DAO 或 RDO 数据控件。</LI>
<LI>Microsoft Masked 编辑控件 (Msmask32.ocx) 可以被绑定到任何一种数据控件。</LI>
<LI>内部控件 (文本框、图片框、标签,等等) 可以被绑定到任何一种数据控件。</LI>
<LI>第三方控件和用 Visual Basic 编写的用户控件应该针对每种情况进行测试。</LI></UL>
<P>在设计阶段,当试图将一个控件绑定到一个数据源的时候,开发者可能会碰到一条“没有兼容的数据源”的出错消息。 在这种情况下,就需要用另外一个与数据源兼容的控件来替换该控件。</P>
<!------------------------------------------------------>
<!-- DataBind3 -->
<!-- -->
<h4><a name="DataBind3"></a>绑定到对象的属性可能会产生不可预料的结果</h4>
<P>尽管有可能将任何对象绑定到任何别的对象,但是这样做的结果并不总是所预期的那样。有些属性是只读可绑定的,并不会更新相应的绑定源。</P>
<P>例如,如果将一个 Frame 控件的 Caption 属性绑定到一个 ADO 记录集对象中名为 Foo 的字段,当在记录集中进行滚动的时候, Caption 将随之改变以便反映 Foo 的值。然而,如果通过编程来改变 Caption 属性 (Frame1.Caption = "Bar"), Foo 的值就不会进行更新。因为 Frame 的 Caption 属性是只读可绑定的,它不会发出通知来说明其数据已经被改变。</P>
<P>对于用 Visual Basic 编写的对象来说,这并不是一个问题,因为开发人员可以在其对象的代码中调用 PropertyChanged 方法。对于其它的对象来说,可以通过检查 DataBindings 集合来确定一个属性是否是更新可绑定的。如果一个属性被列举在 DataBindings 集合中,那它就是更新可绑定的,且数据源将接收到对数据的更新;反之,如果没有被列出来,该属性就是只读可绑定的。</P>
<!------------------------------------------------------>
<!-- DataBind4 -->
<!-- -->
<h4><a name="DataBind4"></a>复杂绑定到一个 ADO 记录集需要 CursorType</h4>
<P>当将一个 ADO 记录集对象绑定到一个复杂绑定的控件(比如一个 Grid 控件)时,需要显式地将 CursorType 属性设置为 adOpenStatic 或者 adOpenKeyset。如果不设置此属性,将不会显示任何的数据。下面的代码显示了 CursorType 属性的使用方法。</P>
<pre><font size = 2><BLOCKQUOTE>Private Sub DataClass_Initialize()
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
rs.CursorType = adOpenStatic
cn.Open "northwind"
rs.Open "customers", cn
End Sub
</BLOCKQUOTE></font></pre><P>绑定到一个简单绑定的控件 (诸如一个文本框)不需要一个特定的 CursorType。</P>
<!------------------------------------------------------>
<!-- DataBind5 -->
<!-- -->
<h4><a name="DataBind5"></a>创建 Visual Basic 数据源:对于SQL Server 和 Access 数据库请将字段类型定为 adVarChar 而不是 adBSTR</h4>
<P>如果要向一个 ADO 记录集对象添加字段以便与一个 SQL Server 或者 Access 数据库一起使用,请将字段的类型定义为 adVarChar 而不是 adBSTR (正如一些示例代码中所示的那样)。当从 SQL Server 或者 Access 数据库中读出数据的时候,ADO 将使用 adVarChar 类型。</P>
<!------------------------------------------------------>
<!-- DataBind6 -->
<!-- -->
<h4><a name="DataBind6"></a>有关创建 OLE DB 提供程序的参考信息的错误</h4>
<P>VB 文档错误地指出可以将一个类模块的 <B>DataSourceBehavior</B> 属性设置为 <I>2 - vbOLEDBProvider</I> 以便创建一个 OLE DB 数据提供程序。 <B>DataSourceBehavior</B> 属性的正确值是 <I>0 - vbNone</I> 和 <I>1 - vbDataSource</I>。 </P>
<P>VB 文档还错误地提到了一个名叫 OnDataConnection 的事件,实际上类模块中根本不存在这个事件。</P>
<P>最后,在“创建 MyDataSource 类”主题中,逐步实现的示例错误地指出应该将 <B>DataSourceBehavior</B> 设置为 <I>2 - vbOLEDBProvider</I>。恰恰相反,应该将 <B>DataSourceBehavior</B> 属性设置为 <I>1 - vbDataSource</I>。</P>
<P>要利用 Visual Basic 创建一个 OLE DB 数据提供程序,请使用 OLE DB SDK 中所包含的提供程序编写工具包(Provider Writer Toolkit)。有关的详细信息,请参看 MSDN 上 Platform SDK 文档中的 OLE DB 简单的提供程序工具包(Simple Provider Toolkit)。</P>
<!------------------------------------------------------>
<!-- DataBind7 -->
<!-- -->
<h4><a name="DataBind7"></a>查找有关 ADO 对象的帮助</h4>
<P>在使用 ADO 对象的时候, (例如,记录集、连接、命令、参数、ADOR、RDS、以及 RDS 服务器对象),开发人员不能获得这类对象或者其属性、事件或方法的上下文相关的帮助。也就是说,如果开发人员引用一个对象并使用了这个对象的功能,当选择相应的代码并按下 F1 时并不会显示一个帮助主题。相反,将显示一个错误的主题或者一个“关键词未找到”的主题。</P>
<P>不过,通过使用联机文件索引,就可以找到该对象的任何属性、事件或方法的帮助信息: </P>
<ol>
<li>如果没有打开 MSDN 文档查看器,请在<B>帮助</B>菜单上单击<B>内容</B>。</li>
<li>单击<B>索引</B>选项卡。</li>
<li>键入属性、事件或者方法的名称,如果合适的话,请在名称中包括“集合”、“属性”、“事件”或者“方法”等字。</li>
<li>从可选的主题列表中,选择标题中包括“ADO”的主题。</li>
</ol>
<blockquote><b>Note</b> 通过 MSDN 的查看器目录,在 ADO 主题中还可以找到其他帮助信息,例如 ADO 对象模型:打开<B> SDK 平台</B>,以及<b>数据库和信息服务</b>,到<B>Microsoft 数据访问 SDK</B>.</blockquote>
<!------------------------------------------------------>
<!-- DataBind8 -->
<!-- -->
<h4><a name="DataBind8"></a>SQL Server 的 OLE DB 提供程序需要新的 instcat.sql</h4>
<P>在使用 SQL Server 的 OLE DB 数据提供程序之前,必须运行随 Microsoft Visual Basic 6.0 on SQL Server (6.5 版以及更新版本)一起发布的新版本的 instcat.sql。Instcat.sql 与 Visual Basic 6.0 一起发布,完成安装后可以在 \winnt\system32 目录下找到这个文件。</P>
<P>如果 Instcat.sql 没有在 SQL Server 上运行,数据提供程序就不能从 SQL Server 处检索元数据(metadata),因而也就不能连接到该服务器。</P>
<!------------------------------------------------------>
<!-- DataBind9 -->
<!-- -->
<h4><a name="DataBind9"></a>在 Windows 95/98 上安装数据访问应用程序可能会失败</h4>
<P>当重新发布包含数据访问组件的 VB 6.0 应用程序时,如果 Windows 95 和 Windows 98 的 DCOM 没有出现在客户机的 Windows 9x 上安装会失败。</P>
<P>如果工程包含对 ADO, OLEDB,或 ODBC 的引用(可在向导的 Included 文件页中进行核实),可通过软件包 &展开向导将文件 Mdac_typ.exe 增加到安装软件包中。这一文件将 MDAC 2.0 文件安装到客户机上。 MDAC 2.0 正常工作需要 Windows 95 和 Windows 98 的 DCOM ,然而在安装时它并不检测这一点。如果 Windows 95 和 Windows 98 的 DCOM 没有出现在客户机的 Windows 9x 上安装会失败。一些旧的数据访问组件将在失败前被覆盖,可能引起客户机上旧的数据访问应用程序失败。</P>
<P>重新发布 Windows 9x 版的数据访问应用程序时,需要确认 Windows 95 和 Windows 98 的 DCOM 安装到客户机上。DCOM98.EXE 是自释放可执行文件,这个文件将更新版的 Windows 95 or Windows 98 的 DCOM 安装到客户机上。不能在 Visual Basic 6.0 CD 的 DCOM98 目录中找到该文件。此文件可免费随 Visual Basic 应用程序一同发布。</P>
<!------------------------------------------------------>
<!-- ChsOnly1 -->
<!-- -->
<h4><a name="ChsOnly1"></a>关于安装时的“联机注册”</h4>
<P>在安装中文VB6的过程中,安装向导会提示您通过Web注册,由于联机注册网页正在构造中,目前联机注册功能还无法使用,请填写附在产品包中的产品注册卡并寄往微软(中国)有限公司。</P>
<!------------------------------------------------------>
<!-- ChsOnly2 -->
<!-- -->
<h4><a name="ChsOnly2"></a>关于“Microsoft Visual Basic 6.0 中文标准版”的名称</h4>
<P>Microsoft Visual Basic 共有三个版本:企业版,专业版和标准版。Microsoft Visual Basic 5.0 的学习版实际上就是标准版。MSDN Library Visual Studio 6.0 版中所指的学习版就是 Microsoft Visual Basic 6.0 中文标准版。
</P>
<br>
<hr align="left" size="2" width="320" color="Black">
<!------------------------------------------------------------------->
<!-- Controls Issues -->
<!-- -->
<h3>有关控件的问题</h3>
<!------------------------------------------------------>
<!-- Controls1 -->
<!-- -->
<h4><a name="Controls1"></a>轻量控件必须是无边界的</h4>
<P>当通过将 Windowless 属性设置为 True 来创建一个轻量用户控件时,该控件的 BorderStyle 属性就被置成无效。根据定义,轻量控件是没有边界的。</P>
<P>如果首先将 BorderStyle 属性设置为非 0 - None 的任何值,随后又将 Windowless 属性改变为 True,这样就会接收到一条出错消息“Windowless 用户控件只支持 BorderStyle = None”。 </P>
<!------------------------------------------------------>
<!-- Controls2 -->
<!-- -->
<h4><a name="Controls2"></a>运行时错误 711:编译过的 .Exe 中不包含与未被引用的控件有关的信息从而导致 Controls.Add 失败</h4>
<B><P>问题: </P></B>
<ol>
<li>创建一个新的标准的 Exe 文件。</li>
<li>向项目中添加一个用户控件。</li>
<li>添加下列代码: </li>
<pre><blockquote><FONT FACE="Courier" SIZE=2>
Dim WithEvents x as VBControlExtender
Private Sub Form_Load ()
Set x = Controls.Add ("Project1.Usercontrol1", "XX")
x.Visible = True
End Sub
</FONT></blockquote></pre>
<li>在<B>文件</B>菜单上,单击<B>生成 Project1.exe </B>(不要运行该项目。)</li>
<li>运行该 exe 文件。</li>
</ol>
<B><P>结果:</B>导致了一个错误(711),指出 Project1.Usercontrol1 是一个无效的 ProgID 因为在这个 exe 找不到任何与其相关的信息。</P>
<B><P>解决办法:</B>在编译该项目之前,在<B>项目</B>菜单下,单击 <B>Project1 属性</B>。在<B>生成</B>选项卡上,取消对“删除与未使用的 ActiveX 控件相关的信息”复选框的选择。</P>
<B><P>说明</P>
</B><P>在默认情况下,如果在设计阶段 ActiveX 控件被引用而又没有被放置到任何一种窗体上,那么该 ActiveX 控件对运行时或可执行文件中的 Controls.Add 来说是不可用的。</P>
<!------------------------------------------------------>
<!-- Controls3 -->
<!-- -->
<h4><a name="Controls3"></a>分层的 FlexGrid 控件: ColWordWrapOption、ColWordWrapOptionBand、ColWordWrapOptionFixed、ColWordWrapOptionHeader 属性</h4>
<P>下面这些属性是分层的 FlexGrid 控件的一系列特征中的一部分,但是这些属性没有被归档到该控件的帮助信息中: ColWordWrapOption、ColWordWrapOptionBand、ColWordWrapOptionFixed、ColWordWrapOptionHeader。以下部分给出了这些属性的描述和语法。所有属性可用的设置值是一样的,这些设置值位于本主题的底部。</P>
<B><P>ColWordWrapOption 属性</P>
</B><P>返回或者设置一个值,这个值指出了在指定的列中文本如何进行换行。</P>
<B><P>语法</P>
</B><P><I>object</I>.<B>ColWordWrapOption </B>(<I>Index</I>) = <I>integer</I></P>
<P> <B>ColWordWrapOption </B>属性的语法包括以下这些部分:</P>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=559>
<TR><TD WIDTH="20%" VALIGN="TOP">
<P>部分</TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>说明</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>object</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>一个对象表达式,其值为分层 FlexGrid 控件。</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>Index</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>长整数. 要获得或者设置其自动换行信息的列号。这个值必须在 -1 和 Cols - 1 之间。如果将这个值设置为 *1,那就将选择所有的列。</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>integer</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>一个数值表达式,决定了自动换行的方式,如设置部分中所示。</TD>
</TR>
</TABLE>
<B><P>ColWordWrapOptionBand 属性</P>
</B><P>返回或者设置一个值,这个值指出了特定的带区中文本自动换行的方式。</P>
<B><P>语法</P>
</B><I><P>object</I>.<B>ColWordWrapOptionBand (</B><I>BandNumber</I>, <I>BandColIndex</I><B>)</B> = <I>integer</I></P>
<P> <B>ColWordWrapOption </B>属性的语法包括下列这些部分: </P>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=559>
<TR><TD WIDTH="20%" VALIGN="TOP">
<P>部分</TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>说明</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>object</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>一个对象表达式,其值为分层 FlexGrid 控件。</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>BandNumber</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>长整数。要获得或者设置其自动换行信息的带区号。这个值必须在 0 到 Bands - 1 的范围之内。</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>BandColIndex</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>长整数。要获得或者设置其自动换行信息的列号。这个可选参数的默认值是 *1,指出该带区中的所有列。有效值为 *1 到 Cols *1。</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>integer</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>一个数值表达式,决定了自动换行的方式,如设置部分中所示。</TD>
</TR>
</TABLE>
<B><P>ColWordWrapOptionFixed 属性</P>
</B><P>返回或者设置一个值,这个值指定了在特定的固定列中文本自动换行的方式。</P>
<B><P>语法</P>
</B><I><P>object</I>.<B>ColWordWrapOptionFixed(</B><I>index</I><B>)</B> = <I>integer</I></P>
<P> <B>ColWordWrapOptionFixed </B>属性的语法包括下列这些部分: </P>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=559>
<TR><TD WIDTH="20%" VALIGN="TOP">
<P>部分</TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>说明</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>object</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>一个对象表达式,其值为分层 FlexGrid 控件。</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>index</I></TD>
<TD WIDTH="80%" VALIGN="TOP">
<P>长整数。要获得/设置其自动换行信息的列号。这个可选参数的默认值是 *1。有效值为 *1 到 Cols *1。</TD>
</TR>
<TR><TD WIDTH="20%" VALIGN="TOP">
<I><P>integer</I></TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -