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

📄 sqlserver实例-2.htm

📁 微软数据库开发梦工场多媒体教学-sql server篇.rar,是多媒体教学的
💻 HTM
📖 第 1 页 / 共 4 页
字号:
    <TR> 
      <TD width="100%" bgcolor="#CCCCCC"> <LI> 
          <P class=boe_list><font color="#000000">执行成功,返回:1;反之,函数返回:0。 </font></P>
        <LI> 
          <P class=boe_list><font color="#000000">执行成功,记录指针将停在首记录,因为本函数就如同重新打开远程视图。 
            </font></P>
        <LI> 
          <P class=boe_list><font color="#000000">由于是重新下载数据,本函数对缓冲进行全部刷新。 </font></P>
        <LI> 
          <P class=boe_list><font color="#000000">行缓冲下,如果修改了一行记录,但未发送更新时,使用本函数,Visual 
            FoxPro将先发送更新,如果没有更新冲突,才重新下载数据光标;如果发生更新冲突,本函数不被执行,返回 0。 </font></P>
        <LI> 
          <P class=boe_list><font color="#000000">表缓冲下,如果修改了任何记录,但没有发送更新,本函数将不被执行,出现如图11的提示,返回0。 
            </font></P>
        </LI>
        <font color="#FFFFFF">&nbsp;</font></TD>
    </TR>
  </TBODY>
</TABLE>
<P><font color="#FFFFFF"><IMG height=138 src="SQLSERVER实例-2.files/cs_11.jpg" width=464 
border=0></font></P>
<P><font color="#FFFFFF"><B>图 11。 <SPAN lang=EN-US 
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">表缓冲下更新没有被确认,不能使用REQUERY()函数</SPAN></B></font></P>
<P><font color="#FFFFFF">发送更新成功,只刷新被更新记</font><font color="#000000">录的相关字段的缓冲</font></P>
<P><font color="#FFFFFF">也许这个标题很难理解,那么我们就分析一下:</font></P>
<TABLE width="100%" border=0>
  <TBODY>
    <TR> 
      <TD width="100%" bgcolor="#CCCCCC"> <LI> 
          <P class=boe_list><font color="#000000">无论是行缓冲还是表缓冲模式,发送更新成功,Visual 
            FoxPro将已更新字段的新值填入缓冲。也就是说,没有被更新字段的缓冲区不被刷新。 </font></P>
        <LI> 
          <P class=boe_list><font color="#000000">行缓冲下发送更新成功,只刷新当前记录地被更新字段的缓冲。 
            </font></P>
        <LI> 
          <P class=boe_list><font color="#000000">表缓冲下发送更新成功,只刷新被更新的若干记录的各自被更新字段的缓冲。 
            </font></P>
        </LI>
        <font color="#FFFFFF">&nbsp;</font></TD>
    </TR>
  </TBODY>
</TABLE>
<P><font color="#FFFFFF">我认为,Visual FoxPro所谓刷新缓冲,只不过是Visual FoxPro自己的行为而与远程数据源无关,也就是由Visual 
  FoxPro生成UPDATE-SQL语句时,Visual FoxPro自动将新值填入缓冲,Visual FoxPro再发送此SQL描述。所以被刷新的就是被更新的字段的缓冲,并且无论更新是否成功!</font></P>
<P><font color="#FFFFFF"> </font></P>
<P class=boe_head2><font color="#FFFFFF">远程视图的其他属性</font></P>
<P><font color="#FFFFFF">远程视图的高级属性可以通过可视工具设定,下面我们就讲解一下:</font></P>
<P><font color="#FFFFFF"><IMG height=420 src="SQLSERVER实例-2.files/cs_12.jpg" width=443 
border=0></font></P>
<P><font color="#000000">FetchASNeed 和 FetchSize 即:取得远端所需的数据和每次提取的记录数</font></P>
<P><font color="#FFFFFF">这两个属性是成对工作的,默认设定是:</font></P>
<P><font color="#FFFFFF">DBSETPROP("ViewName","View","FetchSize",100)<BR>
  DBSETPROP("ViewName","View","FetchAsNeed",.F.)</font></P>
<P><font color="#FFFFFF">表示远程视图打开时,每批下载100条记录,当第一批100条记录被下载完毕后,Visual FoxPro将把控制权还给用户或继续往下执行程序。这样就有问题了:如果几个远程视图共享一条连接,接可能造成连接堵塞。如下:</font></P>
<P><font color="#FFFFFF">CREATE SQL VIEW VOrders ;<BR>
  &nbsp; REMOTE CONNECTION Northwind SHARE;<BR>
  &nbsp; AS SELECT * FROM Orders<BR>
  CREATE SQL VIEW VCustomers ;<BR>
  &nbsp; REMOTE CONNECTION Northwind SHARE;<BR>
  &nbsp; AS SELECT * FROM Customers<BR>
  *在命令窗口选中以下命令,按回车键<BR>
  Use VOrders in 0<BR>
  Use VCustomers in 0<BR>
  *弹出“连接 Northwind忙" 的提示窗口</font></P>
<P><font color="#FFFFFF">让我们分析原因:当VOrder的一批100条记录被下载完毕后,Visual FoxPro就执行打开VCustomers表的命令,这时对于连接Northwind将面临两项任务:继续下载VOrder的第二批100条记录、下载VCustomers的第一批记录,一个连接无法同时应付两项任务,所以“连接忙”。</font></P>
<P><font color="#FFFFFF">解决以上问题,可以这样设置:</font></P>
<P><font color="#FFFFFF">DBSETPROP("VOrder","View","FetchSize",-1)<BR>
  *表示一次下载所有记录,完成</font><font color="#000000">此任务才将控制权交回或继续执行程序。</font></P>
<P><font color="#FFFFFF">如果你这样设置:</font></P>
<P><font color="#FFFFFF">DBSETPROP('VOrder',"View","FetchSize",100)<BR>
  DBSETPROP("ViewName","View","FetchAsNeed",.T.)</font></P>
<P><font color="#FFFFFF">USE VOrder<BR>
  *下在100条记录,并将控制权交还用户,由于FetchAsNeed=.T.,不像刚才——Visual FoxPro自动控制继续下载数据。这时VOrder"霸占"连接Northwind,时刻等待用户指令,已决定是否下载剩余数据<BR>
  go 100<BR>
  *第100条记录已经下载,所以VOrder不下载任何数据,但依然霸占连接<BR>
  go 105<BR>
  *第105条记录还没有下载到客户端,所以VOrder下载5条数据以满足用户的需要,但依然霸占连接<BR>
  go bottom<BR>
  *下载所有记录,释放连接</font></P>
<P><font color="#FFFFFF">MaxRecords 即:要提取的最大记录数</font></P>
<P><font color="#FFFFFF">这个属性是指远程视图光标最多可以下载的记录数,并且它的优先级比上两个属性高。也就是说无论上两个属性怎样设置,客户端就只能拥有小于等于MaxRecords条从远端下载的记录,并且达到这个数量后,“霸占”连接就被释放、可以供其它视图使用。这个属性可以这样设定:</font></P>
<P><font color="#FFFFFF">DBSETPROP("ViewName", "View", "MaxRecords", 25)</font></P>
<P><font color="#FFFFFF">FetchMemo 即:取备注字段</font></P>
<P><font color="#FFFFFF">如果远程视图中包含备注字段,一般认为:一次性下载这些数据到客户端是很没有意义的、也是没有效率的,而且猛增了网络流量。比较好的做法是:用的时候才下载。所谓用的时候就是指:明显或隐含的Modi 
  Memo命令。可以这样设置它的属性:</font></P>
<P><font color="#FFFFFF">DBSETPROP("ViewName", "view", "FetchMemo", .F.)</font></P>
<P><font color="#FFFFFF">CompareMemo 即:在 Where 子句中包含备注字段</font></P>
<P><font color="#FFFFFF">当远程视图包含备注字段或是通用字段时,这个属性非常重要的。这个属性的默认值是.T.,即在检测更新冲突时把这两种字段与其它类型的字段同等看待。笔者认为,这种设置有一个不合理、一个错误,请听我道来:</font></P>
<P><font color="#FFFFFF">先说错误,当一个通用型(不包括“备注型字段”)字段被设定为可更新,并使用了“关键字与可更新字段”或“关键字与已更新字段”的更新冲突检测方式,Visual 
  FoxPro 不允许这种设定。在视图设计阶段,Visual FoxPro 不会指出这个错误,但当实际发送 UPDATE-SQL 时会出现错误提示。</font></P>
<P><font color="#FFFFFF">在讲“不合理”。我刚才指出,备注字段是可以参与更新冲突检测的,但是这样对服务器的压力很大、对网络的压力也很大。</font></P>
<P><font color="#FFFFFF">所以一般应用中,我们会把该值设定为 .F.,即当更新冲突检测方式为“关键字与可更新字段”或“关键字与已更新字段”的时候,即使有关备注字段或通用型字段客户端程序被更改,Visual 
  FoxPro 发送 UPDATE-SQL 会把这两类字段从 Where 子句中挖去。这样可以避免以上我提出的“一个错误、一个不合理”。</font></P>
<P><font color="#FFFFFF">可以这样设定:</font></P>
<P><font color="#FFFFFF">DBSetProp('VEMPLOYEES', 'Vie</font><font color="#000000">w', 
  'CompareMemo', .F.)</font></P>
<P class=boe_head2><font color="#FFFFFF">字段属性</font></P>
<P><font color="#FFFFFF">DefaultValue</font></P>
<P><font color="#FFFFFF">如果您希望对远程视图执行Append命令时,系统自动填列有关字段,那么就有必要设定该属性:</font></P>
<P><font color="#FFFFFF">DBSETPROP("myview.myfield", "field", "DefaultValue", 
  ".T. ")<BR>
  DBSETPROP("myview.myfield", "field", "DefaultValue", "'Bob'")<BR>
  DBSETPROP("myview.myfield", "field", "DefaultValue", Date())</font></P>
<P><font color="#FFFFFF">DataType</font></P>
<P><font color="#FFFFFF">以下是Visual FoxPro字段类型与SQL Server字段类型的比较:</font></P>
<TABLE width="100%" border=0>
  <TBODY>
    <TR> 
      <TD bgcolor="#CCCCCC"> <TABLE border=1>
          <TBODY>
            <TR> 
              <TD vAlign=top width="50%"><font color="#FFFFFF"><B> 
                <P>SQL type</P>
                </b></font></TD>
              <TD vAlign=top width="50%"><font color="#FFFFFF"><B> 
                <P>Visual FoxPro type</P>
                </b></font></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">binary, varbinary</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Memo</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">bit</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Logical</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">char, varchar</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Character</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">datetime, smalldatetime</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Datetime</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">decimal</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Numeric</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">float</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Double</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">image</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">General</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">int, smallint, 
                  tinyint</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Integer</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">money, smallmoney</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Currency</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">numeric</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Numeric</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">sysname</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Character</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">text</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Memo</font></P></TD>
            </TR>
            <TR> 
              <TD vAlign=top width="50%"> <P><font color="#000000">timestamp</font></P></TD>
              <TD vAlign=top width="50%"> <P><font color="#000000">Memo</font></P></TD>
            </TR>
          </TBODY>
        </TABLE></TD>
    </TR>
  </TBODY>
</TABLE>
<P><font color="#FFFFFF">您可以这样设置:</font></P>
<P><font color="#FFFFFF">DBSETPROP("Vemployees.birthdate", "field", "DataType", 
  "D")</font></P>
<P><font color="#FFFFFF">UpdateName</font></P>
<P><font color="#FFFFFF">这个属性在多表连接是很重要,在多个表中许多列可能有相同的名称,所以必须明确的告诉远程视图,视图中的列与数据源表的列的对应关系。如:</font></P>
<font color="#FFFFFF">DBSETPROP("VCustomers.postalcode", "field", "UpdateName", 
"customers.postalcode")</font> 
<P align=center>&nbsp;</P>
</font>

⌨️ 快捷键说明

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