翻译:lovem
我将开始一个关于在Director中使用数据库的系列文章,在这第一部分里,我将告诉你如何让用户(或者你自己)往一个小型的数据库里输入数据,并且如何在数据库里排列项目。
我们将创建一个简单的有关地址的数据库,并以此作为我们的例子。切记,数据本身并不重要,你可以改变这个程序或者在数据库里存储你自己想要的数据。
我们将在“表”中存储数据。Lingo中表有两种类型:线性表和属性表。线性表是一种简单的项目列表,我们将用这种表存储所有的数据。每个被加到数据库里的人都会在这个线性表里生成一个项目,这就是将在表中初始化的句柄。
on startNewDatabase
gDatabase = []
end
我们程序的第一个界面(即舞台)将有两个选项:增加条目和列出数据。在这个专栏的末尾处,你可以看到我们这个例子的Shockwave版本,上面就有这两个选项的按钮。当你按下“增加条目”按钮后,你就会看到一个界面,上面有所有的条目输入框。当我们显示这个界面前,我们得清空所有输入框里的信息。下面的就是实现这个功能的句柄:
-- clear entry fields and go to entry screen
on startNewEntry
member ("entry-name").text = ""
member ("entry-street").text = ""
member ("entry-city").text = ""
member ("entry-state").text = ""
member ("entry-zip").text = ""
member ("entry-phone").text = ""
member ("entry-birthday").text = ""
go to frame "New Entry"
end
注意,我们现在所说的这个输入框,用的并不是旧版本Director中的文本域成员。在这部电影中,我们使用文本成员,并将其设置为可编辑状态。这个文本成员远远好于旧的文本域成员,举个简单的例子:文本成员显示的文本可以消除锯齿。
现在,在输入界面,用户可以按Tab键在两个框中跳转并输入数据,而这并不需要Lingo的支持。当然,你可以加进去一些Lingo语言以限制他的输入。你可以看我以前的文章——《限制文本输入的方式》。
这个界面中有三个按钮。第一个允许用户清空所有输入框中的信息,这很简单,只需再次执行startNewEntry命令而已。另一个允许用户返回到主界面,也会清空所有输入框的信息。最后一个按钮则允许将数据输入到数据库里。下面就是实现这个功能的句柄:
-- get all fields of entry screen and add to database
on addNewEntry
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
add gDatabase, newEntry
go to frame "main menu"
end
每个条目就是一个属性表。属性表就好像线性表一样,里面一个项目接着一个项目。不过,每个项目都有一个不同的标签。当你用addProp命令往属性表里增加一个项目时,必须包括属性名和属性值。这样,当你想从表中获取信息时,你就可以用其属性名查出所需信息,而不用知道其在表中什么位置。 下面就是属性表的一个例子:
["Name": "Gary Rosenzweig", "Street": "123 Clever Rd.", "City": "Denver", "State": "CO", "Zip": "80210", "Phone": "720-555-1212", "Birthday": "2/29/69"]
当这个属性表被编译完后,它就作为一个项目增加到线性表的gDatabase变量中。将表作为一个项目存在另一个表中是可以的。变量gDatabase是一个全局变量,这就意味着它可以一直保留着甚至在句柄中不在使用它了。
迄今为止,我们这个程序可以让用户将一个个人的信息输入数据库了。为了证明信息确实输进去了,我们可以按下主界面上的“列出数据”按钮,这样可以在滚动文本框里看到所有输进去的信息。由于普通的文本并不能将数据很方便地列出来,所以我们将使用HTML代码做一个简单的数据表格。接着我们将设置文本成员的html属性以使表格插进去。你可以看我的文章——《表格样式》,从中获得更文本成员的HTML属性信息。
-- show entire database in HTML list
on listData
if gDatabase.count < 1 then
-- if no data yet, then show message instead
member ("list").text = "No data."
else
-- start html code
html = "<HTML><BODY><TABLE BORDER=1><TR>"
-- create headings row
repeat with i = 1 to gDatabase[1].count
put "<TD>" & getPropAt (gDatabase[1],i) & "</TD>" after html
end repeat
put "</TR>" after html
-- put each entry in a row
repeat with m = 1 to gDatabase.count
put "<TR>" after html
-- put each item in a column
repeat with j = 1 to gDatabase[m].count
put "<TD>" & gDatabase[m][j] & "</TD>" after html
end repeat
put "</TR>" after html
end repeat
-- end html code
put "</TABLE></BODY></HTML>" after html
-- put html into member
member ("list").html = html
end if
go to frame "list data"
end
好,现在我们已经有了一个基本的数据库程序。在以后的部分里,我将告诉你如何给数据库增加更多的特性,比如说改变和删除输入的数据,保存为一个可读的文件格式。