文章作者 : cfans [ agazhang@eastday.com ] Web URL : http://www.lovease.com
上载日期 : 2000-12-16
情况: 当用户提交表单form的时候,你得到了下列的变量:
form.fName
form.lName
form.city
form.salary
form.SpouseName
form.Birthdate
form.spicyInfo
你需要把fName, lName 和 city的值添加到数据库Users表,以及把其他值添加到数据库Secrets表中.
Users表结构如下:
userID (primary key主键)
fName
lName
city
Secrets表结构如下:
secretID
userID
salary
spouseName
birthdate
spicyInfo
首先,我们先要把相关信息添加至Users表.
解决方案:使用SQL添加语句(Insert)把数据插入Users表
<cfquery datasource="myDS">
INSERT INTO Users(fName,lName,city)
VALUES('#form.fName#','#form.lName#','#form.city#')
</cfquery>
注意:如果你碰上问题,我猜想是没有对User表中userID列设定自动编号Autonumber属性. 在这种情况下,你的方法是需要添加记录之前,先得到userID号。有关内容你可以查阅一些关于数据库方面的书籍或其他CF技巧参考.
当你添加记录的时候,而表中设定了自动编号的主键.可以自动得到userID值,然后把一条新记录插入表中,建立基本关系,我们再来看一下.
<!--- 添加新记录 --->
<cfquery datasource="myDS" name="myQ">
INSERT INTO Users(fName,lName,city)
VALUES('#form.fName#','#form.lName#','#form.city#')
</cfquery>
当Users表成功添加记录后,我们需要再往Secrets表添加记录.这时候userID的值必须是正确的.但INSERT INTO语句执行后,不能返回userID号.需要由你把userID的值抓出来.如果你确定插入的记录是唯一的(在记录中没有重复的名字),你可以如下查看userID的值.
<cfquery datasource="myDS" name="getQ">
SELECT userID
FROM Users
WHERE fName = '#form.fName#'
AND lName = '#form.lName#'
AND city = '#form.city#'
</cfquery>
另外,你还可以用一个小技巧,找到最后一个userID号。可以使用MAX(primary_key)SQL语句.
<cfquery datasource="myDS" name="getQ2">
SELECT MAX(userID) as lastID
FROM Users
</cfquery>
但在同一时刻,如果有其他人同时添加新记录,你会得到一个不正确的userID值.为了防止这个问题发生,请一起使用<cflock>和<cftransaction>标签, 锁住进程, 直到完成查询.
<cflock name="#CreateUUID()#" timeout="20">
<cftransaction>
<cfquery datasource="myDS" name="myQ">
INSERT INTO Users(fName,lName,city)
VALUES('#form.fName#','#form.lName#','#form.city#')
</cfquery>
<cfquery datasource="myDS" name="getLastID">
SELECT MAX(userID) as lastID
FROM Users
</cfquery>
</cftransaction>
</cflock>
现在你有一个userID号了,你可以执行另一条SQL添加语句,把其余的信息插入Sectets表中.
<cfquery datasource="myDS">
INSERT INTO Secrets(userID,salary,spouseName,birthdate,spicyInfo)
VALUES(#Val(getLastID.lastID)#,#Val(form.salary)#,'#form.spouseName#','#form.birthdate#','#form.spicyInfo#')
</cfquery>
|