上一篇 | 下一篇

在Director中使用数据库(一)

发布: 2007-1-25 14:55 | 作者: Gary Rosenzweig | 来源: 译自director-online.com | 查看: 557次

  原著:Gary Rosenzweig
wQ4H q*P9I[$MRFl   翻译:lovem奥古多媒体5vY2a I3s H(n/SX8w

.dp3z0g5[r])U   我将开始一个关于在Director中使用数据库的系列文章,在这第一部分里,我将告诉你如何让用户(或者你自己)往一个小型的数据库里输入数据,并且如何在数据库里排列项目。奥古多媒体 H ?!C5Y j
奥古多媒体.W1U2PC/|,@u+l f
  我们将创建一个简单的有关地址的数据库,并以此作为我们的例子。切记,数据本身并不重要,你可以改变这个程序或者在数据库里存储你自己想要的数据。
Aal$BN
$r'xT,zj{n ^;c [   我们将在“表”中存储数据。Lingo中表有两种类型:线性表和属性表。线性表是一种简单的项目列表,我们将用这种表存储所有的数据。每个被加到数据库里的人都会在这个线性表里生成一个项目,这就是将在表中初始化的句柄。奥古多媒体9@.c[ l? v[

2|/V8D(A.o"w\ on startNewDatabase奥古多媒体 Af%v;B ]:~V|4jml
  gDatabase = []奥古多媒体 qX%aubE+u:f
end 奥古多媒体 {np4y"XM] _@

-?"@e {4xlGN o 奥古多媒体Z\ O1L:b9z
  我们程序的第一个界面(即舞台)将有两个选项:增加条目和列出数据。在这个专栏的末尾处,你可以看到我们这个例子的Shockwave版本,上面就有这两个选项的按钮。当你按下“增加条目”按钮后,你就会看到一个界面,上面有所有的条目输入框。当我们显示这个界面前,我们得清空所有输入框里的信息。下面的就是实现这个功能的句柄:
#P4G8[GR1i7O
H0R KO8Vvn -- clear entry fields and go to entry screen
'|.{g0fs[ on startNewEntry
5X+s4w#IQ,@@E   member ("entry-name").text = ""
V/Ya"U_   member ("entry-street").text = ""
1`)ayU+y6R'TQc   member ("entry-city").text = ""
9m.h;u)T+l:o _c   member ("entry-state").text = ""奥古多媒体3u$mB6zr4~}BM
  member ("entry-zip").text = ""奥古多媒体7n8A"O*Ac
  member ("entry-phone").text = ""奥古多媒体)I.dc,a S_8B \O!X
  member ("entry-birthday").text = ""
:?X:L-z d#Q9E   go to frame "New Entry"
Q5k W:D&d!q"` end
fw&M:lc/A!D'y3H L
U bQX%A3yS   注意,我们现在所说的这个输入框,用的并不是旧版本Director中的文本域成员。在这部电影中,我们使用文本成员,并将其设置为可编辑状态。这个文本成员远远好于旧的文本域成员,举个简单的例子:文本成员显示的文本可以消除锯齿。
}^kL0pj[f6|(Z3T
x ML1D$n   现在,在输入界面,用户可以按Tab键在两个框中跳转并输入数据,而这并不需要Lingo的支持。当然,你可以加进去一些Lingo语言以限制他的输入。你可以看我以前的文章——《限制文本输入的方式》。奥古多媒体W.v4U3g:x2o aF
奥古多媒体#~ \ t4z [UZk
  这个界面中有三个按钮。第一个允许用户清空所有输入框中的信息,这很简单,只需再次执行startNewEntry命令而已。另一个允许用户返回到主界面,也会清空所有输入框的信息。最后一个按钮则允许将数据输入到数据库里。下面就是实现这个功能的句柄:奥古多媒体C)AY j d&~a'kM
奥古多媒体g&C/N6s1h%[8r X,ub
-- get all fields of entry screen and add to database
&y(b ?Y9D on addNewEntry
0?4| jg#EF1S   newEntry = [:] 奥古多媒体5L Igt'o&^!j
  addProp newEntry, "Name", member ("entry-name").text
}:G$h p2o1L#@D   addProp newEntry, "Street", member ("entry-street").text
,B&NS g CG;a   addProp newEntry, "City", member ("entry-city").text
r/R%d q~4z6}0b   addProp newEntry, "State", member ("entry-state").text奥古多媒体%PX8J#`?3o$C6R6z
  addProp newEntry, "Zip", member ("entry-zip").text奥古多媒体3T1^:U {?
  addProp newEntry, "Phone", member ("entry-phone").text奥古多媒体VIKd J-v
  addProp newEntry, "Birthday", member ("entry-birthday").text
B+|#b0X'v   add gDatabase, newEntry
5d!I'J/Y&]!H0E   go to frame "main menu" 奥古多媒体v6vCl0`4P6{ sv5b
end奥古多媒体x ZD ^6x2S3_0\

\ vMJw7qf   每个条目就是一个属性表。属性表就好像线性表一样,里面一个项目接着一个项目。不过,每个项目都有一个不同的标签。当你用addProp命令往属性表里增加一个项目时,必须包括属性名和属性值。这样,当你想从表中获取信息时,你就可以用其属性名查出所需信息,而不用知道其在表中什么位置。 下面就是属性表的一个例子:奥古多媒体 UB"Oh+Jc
奥古多媒体8?ELn&aNL.\]!g4_.v
["Name": "Gary Rosenzweig", "Street": "123 Clever Rd.", "City": "Denver", "State": "CO", "Zip": "80210", "Phone": "720-555-1212", "Birthday": "2/29/69"]
p a ?@Td 奥古多媒体u+B'^JW7wB(?`
  当这个属性表被编译完后,它就作为一个项目增加到线性表的gDatabase变量中。将表作为一个项目存在另一个表中是可以的。变量gDatabase是一个全局变量,这就意味着它可以一直保留着甚至在句柄中不在使用它了。
2?B(HP/I F!yz 奥古多媒体(G/|pBIHt4}9u
  迄今为止,我们这个程序可以让用户将一个个人的信息输入数据库了。为了证明信息确实输进去了,我们可以按下主界面上的“列出数据”按钮,这样可以在滚动文本框里看到所有输进去的信息。由于普通的文本并不能将数据很方便地列出来,所以我们将使用HTML代码做一个简单的数据表格。接着我们将设置文本成员的html属性以使表格插进去。你可以看我的文章——《表格样式》,从中获得更文本成员的HTML属性信息。
y.v#?Bk(na(a
+{ R{X%y;beC/z#A -- show entire database in HTML list
*FrZ+Wc on listData 奥古多媒体RdG-Z0y
  if gDatabase.count < 1 then
R uisi'w     -- if no data yet, then show message instead
8sMxv(nWJ     member ("list").text = "No data."奥古多媒体8U#q;E%m:q i A
  else奥古多媒体~`[^ h#FS~4tO
    -- start html code
:{v;Y b)jd X4@     html = "<HTML><BODY><TABLE BORDER=1><TR>"
/pxx#HNqB,Y*J     -- create headings row奥古多媒体ao+G dB.E9~*h
    repeat with i = 1 to gDatabase[1].count奥古多媒体g(mU#A!Zn$QoqX p"m
      put "<TD>" & getPropAt (gDatabase[1],i) & "</TD>" after html
7QS(Nv ka     end repeat
&j!Xd$zc"bg     put "</TR>" after html
vT,]_&O r'plG[3C~     -- put each entry in a row奥古多媒体0XsxT$\&u2E*P
    repeat with m = 1 to gDatabase.count奥古多媒体(_8|4k7Ym]8K `
      put "<TR>" after html奥古多媒体"Ik:q,s,M&]
      -- put each item in a column 奥古多媒体a_"S0b6w.^M
      repeat with j = 1 to gDatabase[m].count
h:zV+Lc A;H         put "<TD>" & gDatabase[m][j] & "</TD>" after html奥古多媒体3F-Qw Y.Y#\
      end repeat奥古多媒体V4r R6b(T~1L%]
      put "</TR>" after html奥古多媒体&Ec"v ^ q X
    end repeat
?6MX2~,g*e }0V     -- end html code奥古多媒体&w4t*Cp)^sumQ
    put "</TABLE></BODY></HTML>" after html
:Zu+]Nc7y!W8`Y.Y     -- put html into member奥古多媒体9|u C(K%q|{8M X:}
    member ("list").html = html
4T T'\,` nN3~   end if
Am!d3A%O&t/Uw   go to frame "list data"
E m j'P?y.f |i end奥古多媒体 x!Y8L/Z#Z

]g~hH5\.}F{   好,现在我们已经有了一个基本的数据库程序。在以后的部分里,我将告诉你如何给数据库增加更多的特性,比如说改变和删除输入的数据,保存为一个可读的文件格式。

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


音乐
落叶 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 如果爱能早些说出来
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 为你而活 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 火花 下雨天 小酒窝 樱花草 为你写诗 无可取代 无情的温柔 寂寞才说爱 忘不掉的伤 爱上你是个错 陪你一起看草原 地球人都知道我爱你
城府 假如 花海 兰亭序 爱太痛 舍不得 你若成风 女人如烟 外滩十八号 我们的纪念 摇滚怎么了 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错