" adult_member_no " + ;
"From member, adult, juvenile " + ;
"Where member.member_no = juvenile.member_no " + ;
" And adult.member_no = " + ;
" juvenile.adult_member_no " + ;
" And member.member_no = " + ;
" AllTrim(ThisForm.txtMemberID.Value)
If SQLExec(ThisForm.nHandle, lcSQL, "c_member") < 0
<略去的代码>
如果 c_member 游标为空则没有输入的 ID 成员存在。否则所有成员信息都在游标中。游标设置了行缓存,且表单控件用游标中的成员信息填充。
Union 允许你发送一个 Select 到服务器并获取该成员的所有信息。在早期的示例中,需要对两个或三个视图进行重查询(requery) 而不是象这里一样只需要一个 SQLExec()。注意,如果你使用视图设计器,你不能创建一个带 Union 的远程视图。但你可以用 Create SQL View 命令来创建这种视图。
添加一个成人
当用户按下 Add 按钮时,一条空白的记录添加到 c_member 游标中。这与早期的视图示例不同。
Select c_member
= TableRevert()
Append Blank
仅出于可读性的原因,添加新成员的代码位于表单的 AddMember 方法中。因为添加一个成员包括向两个表添加记录,因此开始一个事务处理。只在使用视图的表单中,使用 SQLSetProp() 函数来开始事务处理。
= SQLSetProp(ThisForm.nHandle, "Transactions", 2)
当用视图来访问远程数据时,你可以依靠 Visual FoxPro 来为你处理大多数的后台工作。例如,在早期的表单中,你看到了要发送一个 Insert 或 Update 到服务器,你只需要发布一条 TableUpdate()。Insert 或 Update 的语法都由 Visual FoxPro 为你做了。
这里的表单合作 SQLExec() 函数来发送 SQL 语句到服务器。这就意味着你必须自己构造 SQL 语句。在开始事务处理后,构造一个 Insert 语句来添加新记录到 Member 表中。
* 添加新成员到 member 表
lcSQL = "Insert member (lastname, firstname, " + ;
"middleinitial, photograph) " + ;
"Values ('" + ;
AllTrim(ThisForm.txtFirstName.Value) + ;
"', '" + ;
AllTrim(ThisForm.txtLastName.Value) + ;
"', '" + ;
AllTrim(ThisForm.txtMiddleInitial.Value) + ;
"', " + "NULL)"
If SQLExec(ThisForm.nHandle, lcSQL) < 0
ThisForm.ShowError
* Rollback the transaction
= SQLRollback(ThisForm.nHandle)
Return
Endif
你现在需要知道 SQL Server 为新成员指定的 member_no。代码与早期表单相似。
* 找出新成员的 member_no
If SQLExec(ThisForm.nHandle, "Select @@identity") < 0
<略去的代码>
nNewMemberID = sqlresult.exp