然后构造一个 Insert 来添加新记录到 Adult 表。从服务器获取的 @@Identity 值用于该 Insert 中来正确地连接 Adult 和 Member 中的记录。
* 添加新成员到 adult 表
lcSQL = "Insert adult (member_no, street, city, state, " + ;
"zip, phone_no, expr_date) " + ;
"Values (" + AllTrim(Str(nNewMemberID)) + ", '" +;
AllTrim(ThisForm.txtStreet.Value) + ;
"', '" + ;
AllTrim(ThisForm.txtCity.Value) + ;
"', '" + ;
AllTrim(ThisForm.txtState.Value) + ;
"', '" + ;
AllTrim(ThisForm.txtZip.Value) + ;
"', '" + ;
AllTrim(ThisForm.txtPhoneNumber.Value) + ;
"', "'" + ;
TToC(DToT(GoMonth(Date(),12))) + "' )"
If SQLExec(ThisForm.nHandle, lcSQL) < 0
<略去的代码>
如前所述,如果一切正常,则提交事务处理否则回滚。
保存修改
保存已存在的成员的信息的代码在表单的 UpdateMember 方法中。要保存信息,发送一条 Update 语句到服务器。表单中的更新语句如下:
Update <table> Set <column1> = <value1>,
<column2> = <value2>,
等等...
这相当地直截了当,虽然构造一个要发送到服务器的 Update 语句看起来有些庞大。你知道表的字段名和表单上的控件中的值。你可以一个字段接一个字段地生成 Update 的 Set 部分。但是,象上面这样书写可以使程序更清晰。你也可能不想浪费 SQL Server 的时间来更新没有修改的字段。这里的代码使用了 OldVal() 函数,使用游标缓存使这样做变为可能,要将游标中各字段的值与原始的值进行比较。只有当它被修改了时才让它成员 Update 语句的一部分。另外,远程视图自动地这样做了。
lcSQL = ""
* 更新该成员到 member 表
If c_member.firstname <> OldVal("c_member.firstname")
lcSQL = lcSQL + "firstname = '" + ;
AllTrim(ThisForm.txtFirstName.Value) + "', "
Endif
If c_member.lastname <> OldVal("c_member.lastname")
lcSQL = lcSQL + "lastname = '" +;
AllTrim(ThisForm.txtLastName.Value) + "', "
Endif
<略去的代码>
如果 Member 表中没有字段被修改,变量 lcSQL 中将没有内容且不会保存信息到表中。如果有要保存的数据,构造剩下的 Update 语句并发送到服务器。