翻译:lovem
这周,我们将上两个专栏所建的数据库程序进一步完善。以前我们遗漏了一个关键的功能,就是修改和删除已记录的数据。
为了实现这两个功能,你必须允许用户选择数据。我们已经可以将数据以HTML表格的形式列出来了,那么,要让用户选择数据,我们就可以简单地给每行加上一段超文本语言,这样他们就可以单击选中并修改了。这只需要在listData句柄中加一行代码,这将会增加一个字“EDIT”,这个字与链接数据的编号链接在一起。
在listData句柄重有一行额外的代码,你可以检查我们的例子程序,看看它到底在哪。
-- link to edit record
put " " after html
现在,当用户在主界面点击了“List Data”按钮后,可以看到在表的每一行前都有一个超链接“EDIT”。点击这个超链接后,程序将发送一个信息给hyperlinkClicked。这将以字符串形式传递超链接数据,我们将其转换为一个数字再传递给一个新的句柄:editRecord。
on hyperlinkClicked me, href
recordNum = value (href)
editRecord (recordNum)
end
editRecord句柄则将数据从数据库读取出,并放到与“New Entry”帧处相同的输入框中,但是,我们却不在那一帧,而是跳到一个新的帧“Edit Record”。这里“RECORD”按钮和“DELETE”按钮分别代替了“CLEAR”按钮和“ADD THIS”按钮。句柄用了一个全局变量——gEditRecord,用以存储被编辑数据的编号,这个当新数据代替旧数据时能用得上。
on editRecord n
-- remember which is being edited
gEditRecord = n
-- get record from database
record = gDatabase[gEditRecord]
-- put fields from record onto screen
member ("entry-name").text = record["Name"]
member ("entry-street").text = record["Street"]
member ("entry-city").text = record["City"]
member ("entry-state").text = record["State"]
member ("entry-zip").text = record["Zip"]
member ("entry-phone").text = record["Phone"]
member ("entry-birthday").text = record["Birthday"]
go to frame "Edit Record"
end
用户可以选择和编辑任何一个框中数据。当编辑完成后,按下“RECORD”按钮就会激活下面的句柄,这个看起来挺像“addNewEntry”句柄的,但是其中从gDatabase替换gEditRecord所显示的项目这一功能代替了增加数据到gDatabase功能。
on recordChanges
-- get all fields and make a new record
newEntry = [:]
addProp newEntry, "Name", member ("entry-name").text
addProp newEntry, "Street", member ("entry-street").text
addProp newEntry, "City", member ("entry-city").text
addProp newEntry, "State", member ("entry-state").text
addProp newEntry, "Zip", member ("entry-zip").text
addProp newEntry, "Phone", member ("entry-phone").text
addProp newEntry, "Birthday", member ("entry-birthday").text
-- replace old record with new one
gDatabase[gEditRecord] = newEntry
-- return to list view
listData
end
deleteRecord句柄也使用gEditRecord变量,这样就可以从gDatabase识别并删除正确的项目。
on deleteRecord
-- remove record from database
deleteAt gDatabase, gEditRecord
-- return to list view
listData
end
当deleteRedord和recordChanges执行完返回时都会调用listData,以将数据列出。这将使用户可以快速的更改或删除一些数据而无需每次都返回主界面。
现在这个数据库程序已经有了不少功能了,它也接近完成了。下一步,我们将添加一个搜索功能。这将改变那个仅仅是显示数据的listData句柄。小型数据库也许不需要,但大型数据库却是必须得。我将在下个星期继续介绍。