📄 sqlserver实例-1.htm
字号:
<P class=boe_text><font color="#FFFFFF"><IMG height=393 src="SQLSERVER实例-1.files/cs_5.jpg" width=591
border=0></font></P>
<P class=boe_text><font color="#FFFFFF"><B><SPAN lang=EN-US
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-fareast-font-family: 宋体; 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">图
5. 连接设计器</SPAN></B></font></P>
<P class=boe_head3><font color="#FFFFFF">连接属性的设定</font></P>
<P
class=boe_text><font color="#FFFFFF">从连接设计器的画面上我们可以发现很多连接属性,他们代表什么意思呢?在讲述这些问题之前,我想告诉大家:所有这些属性的设定都可以通过DBSETPROP()函数,所有这些属性值的获取都可以通过DBGETPROP()函数得到。下面,我们简要介绍几个属性:</font></P>
<TABLE width="74%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC">
<OL>
<LI>
<P class=boe_list><font color="#000000">异步执行。默认值为 .F.。同步执行是指:通过连接传送到后端的命令会被一句一句地执行,前一句没有执行完毕后一句就不会被执行;而同步执行是指:当通过连接发出命令后,不管后端是否完成并返回结果,客户端程序可以继续往下走。
</font></P>
<LI>
<P class=boe_list><font color="#000000">超时间隔-空闲(分)。默认值是 0。设定一个非 0
值时,一个连接如果在这段时间内没被使用,Visual FoxPro 将使它休眠,再次使用该连接时 Visual FoxPro会激活它。注意使用该属性,因为它常常使您的应用程序产生不明不白的错误,如"Connectivity
error: unable to retrieve specific error information. Driver is
probably out of resources."实际上现在 ODBC 提供了 POOL 的功能,这些问题可由 ODBC 自行解决,我们不用操心。
</font></P>
<LI>
<P class=boe_list><font color="#000000">超时间隔-连接(秒)。默认值是 0。设定一个非 0
值时,指在这个时间段内Visual FoxPro将试图连接到服务器,如果不成功,Visual FoxPro将产生一个错误。 </font></P>
<LI>
<P class=boe_list><font color="#000000">显示 ODBC 登录提示。在应用程序中,我们总不希望有系统弹出登录窗口,这样于形象不利、于程序的安全性不利,特别是设计
COM 对象时,由于无人看护,更不希望登录窗口的弹出,Visual FoxPro 为我们提供了三种选择,笔者经常使用“从不显示”。
</font></P>
<LI>
<P class=boe_list><font color="#000000">显示错误信息。如果设定为 .t.,任何 ODBC 错误将以
Messagebox 窗口显示出来;反之,ODBC 错误有用户自行处理。显然我们基本上使用默认设置 .f.。 </font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
<P class=boe_note><font color="#FFFFFF">提示:在Visual FoxPro中很多关于数据处理方面的设定,(如:set
delete)都是限于数据工作期的,而连接被激活后可以在多个数据工作期内公用。 </font></P>
<P class=boe_head2><font color="#FFFFFF">远程视图</font></P>
<P class=boe_head3><font color="#FFFFFF">弱水三千,取一瓢饮——条件视图</font></P>
<P class=boe_text><font color="#FFFFFF">在前文我们已经建立了两个远程视图,您也许发现这种整个把远程表读取过来的做法执行效果很好,其实不然。我有两大理由:</font></P>
<TABLE width="75%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC">
<OL>
<LI>
<P class=boe_list><font color="#000000">设想如果后端表很大(Customers 只有 91
条记录),有几万、几十万条记录,结果会这样? </font></P>
<LI>
<P class=boe_list><font color="#000000">设想如果网络用户很多,网路很繁忙,结果会怎样? </font><font color="#FFFFFF">
</font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
<P
class=boe_list><font color="#FFFFFF">Client\Server设计的一个重要的课题就是使网络流量最小化,所以在设计远程视图时就要考虑这一解决问题。我们的想法是使远程视图仅下载有必要的信息,这就叫:弱水三千,取一瓢饮。例如:</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW VCustomers <BR>
REMOTE CONNECTION Northwind SHARE ;<BR>
AS SELECT * FROM Customers <BR>
WHERE customerid LIKE 'ALFKI'</font></P>
<P class=boe_list><font color="#FFFFFF">我们在 WHERE子句中加入条件“customerid LIKE 'ALFKI'”,现在我们发现只有一条记录从远端被下载。您也与已经发现这中间的不足:这个远程视图太死板了——只能为
Customerid 类似于'ALFKI'的记录提供服务,是不是可以把 'ALFKI'作为一个参数,供使这个远程视图更灵活,服务面更广。</font></P>
<P class=boe_list><font color="#FFFFFF">可以,Visual FoxPro支持这样的远程视图:</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW VCustomers ;<BR>
REMOTE CONNECTION Northwind SHARE ;<BR>
AS SELECT * FROM Customers ;<BR>
WHERE customerid LIKE ?cCustomerID </font></P>
<P class=boe_list><font color="#FFFFFF">如果您打开远程视图或对已打开的远程视图执行REQUERY()、REFRESH()函数,Visual
FoxPro会查找是由存在名为cCustomerID的变量。如果存在,Visual FoxPro 自动把变量值填入远程视图的SQL语句中;如果变量不存在,Visual
FoxPro将弹出如下窗口询问变量值。</font></P>
<P class=boe_list><font color="#FFFFFF"><IMG height=124 src="SQLSERVER实例-1.files/cs_6.jpg" width=488
border=0></font></P>
<P
class=boe_list><font color="#FFFFFF">在实际开发应用程序中,我们会经常实现设定远程视图参数,在需要其它信息时,改变参数值,再用REQUERY()函数刷新客户端的数据;远程视图参数不仅可以填入普通数据,还可以使用统配符,如下:</font></P>
<P class=boe_code><font color="#FFFFFF">cCustomerID='ALFKI'<BR>
USE Vcustomers<BR>
BROWSE<BR>
cCustomerID='%B%'<BR>
REQUERY('Vcustomers')<BR>
BROWSE</font></P>
<P class=boe_list><font color="#FFFFFF">这里有以下问题点大家必须注意:</font></P>
<TABLE width="73%" border=0 bgcolor="#CCCCCC">
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC">
<OL>
<LI>
<P class=boe_list><font color="#000000">远程视图参数只能在WHERE字句中设定,其他的连接子句、分组字句、排序子句都不支持这一特性。比如不可以出现
Order by ?cOrder。(有传言说 Visual FoxPro 7 支持参数加入排序子句,但笔者还未及尝试)。 </font></P>
<LI>
<P class=boe_list><font color="#000000">一个远程视图可以设定多个参数。实例见下面的代码。 </font></P>
<LI>
<P class=boe_list><font color="#000000">远程视图的SELECT-SQL语句必须是以后端数据库的语法为标准。例如,SQL
Server以单引号确认字符串,而Visual FoxPro可使用双引号、方括号、单引号确认字符串,那么如下语句是错误:<BR>
CREATE SQL VIEW VCustomers REMOTE CONNECTION Northwind SHARE ;<BR>
AS SELECT * FROM Customers WHERE customerid LIKE "ALFKI"<BR>
又如,Visual FoxPro中删除字符型字段的空格可使用ALLTR()函数,但远程视图的SELECT-SQL中不能用任何Visual
FoxPro的函数,所以要实现上述功能,应如下使用SQL Server的函数:<BR>
CREATE SQL VIEW VCustomers REMOTE CONNECTION Northwind SHARE ;<BR>
AS SELECT customerid,LTRIM(RTRIM(CompanyName)) FROM Customers
WHERE customerid LIKE 'ALFKI' </font></P>
<LI>
<P class=boe_list><font color="#000000">第三点中我们强调了远程视图构建时必须使用后端数据库认识的Select-SQL。当远程视图被打开,成为Visual
FoxPro的光标时,就可以对它使用Visual FoxPro的命令与函数。 </font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW VEmployees;<BR>
REMOTE CONNECTION Northwind SHARE<BR>
AS SELECT EmployeeID,Birthdate FROM Employees<BR>
WHERE BirthDate >?dBirthdate1 AND BirthDate <?dBirthdate2<BR>
dBirthdate1='19540101'<BR>
dBirthdate2='19601231'<BR>
USE VEmployees<BR>
BROWSE<BR>
*本例对日期型字段Birthdate使用了两个参数,并请注意日期型参数的传递。<BR>
CREATE SQL VIEW VEmployees1;<BR>
REMOTE CONNECTION Northwind SHARE;<BR>
AS SELECT EmployeeID, BirthDate, Country FROM Employees;<BR>
WHERE birthDate > ?dBirthdate AND Country = ?cCountry<BR>
dBirthdate='19601231'<BR>
cCountry='uk'<BR>
USE VEmployees1<BR>
BROWSE<BR>
*本例对两个字段设定了参数</font></P>
<P class=boe_head3><font color="#FFFFFF">只下载有用的字段</font></P>
<P class=boe_list><font color="#FFFFFF">上文中我们使用 SELECT * 从远端一古脑儿把所有列都下载到客户机,这样做不好。原因如下:</font></P>
<TABLE width="74%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC">
<OL>
<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对远程数据表的版本控制。如果使用
SELECT *,那么只有在远程数据表增加字段时Visual FoxPro才知道,其他如减少、变更列的结构Visual FoxPro都不会知道。
</font><font color="#FFFFFF"> </font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
<P
class=boe_list><font color="#FFFFFF">例如:远程表中有FirstName,LastName列,我们在制作报表时只需要全名就可以了,那么我们解可以将它们相加成为一个新的列。</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW VEmployees1 ;<BR>
REMOTE CONNECTION Northwind SHARE ;<BR>
AS SELECT EmployeeID, FirstName +' '+ LastName AS Name, Title ;<BR>
FROM Employees</font></P>
<P class=boe_head3><font color="#FFFFFF">多表连接形成的远程视图</font></P>
<P class=boe_text><font color="#FFFFFF">远程视图不仅支持远程一个表的操作,它还支持多表连接,如下:</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW VEmployeeTerritories ;<BR>
REMOTE CONNECTION Northwind SHARE ;<BR>
AS SELECT Territories.TerritoryID, Territories.TerritoryDescription, Employees.EmployeeID,;<BR>
Employees.LastName, Employees.FirstName;<BR>
FROM Territories INNER JOIN;<BR>
EmployeeTerritories ON ;<BR>
Territories.TerritoryID = EmployeeTerritories.TerritoryID INNER JOIN;<BR>
Employees ON EmployeeTerritories.EmployeeID = Employees.EmployeeID</font></P>
<P class=boe_text><font color="#FFFFFF">远程视图还支持自连接,如下:</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW VEmployeeReportTO ;<BR>
REMOTE CONNECTION Northwind SHARE ;<BR>
AS SELECT Employees.EmployeeID as 领导工号,;<BR>
Employees.FirstName+' '+ Employees.LastName as 领导,;<BR>
Employees_a.FirstName +' '+ Employees_a.LastName as 下属,;<BR>
Employees_a.ReportsTo as 上级领导工号;<BR>
FROM Employees Employees INNER JOIN;<BR>
Employees Employees_a ON ;<BR>
Employees.EmployeeID = Employees_a.ReportsTo;<BR>
ORDER BY Employees_a.ReportsTo</font></P>
<P class=boe_note><font color="#FFFFFF">从上面的语句大家可以发现:Visual FoxPro中的 SQL 与SQL
Server 中的 SQL 十分相似,这方便了学习,但千万别陷入了“温柔陷阱”!</font></P>
<P class=boe_text><font color="#FFFFFF"> </font></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -