上一篇 | 下一篇

在Director中使用数据库(四)

发布: 2007-1-25 15:01 | 作者: Gary Rosenzweig | 来源: 译自director-online.com | 查看: 256次

  原著:Gary Rosenzweig奥古多媒体X LvX!t dI:u9ZG6f
  翻译:lovem
*} I9\ n X1v!O'@ 奥古多媒体^)["k;xu#p9ja/r;t9R,A Q
  这个星期我们将给前三篇文章所做的一个数据库下一个最终的结论。我同样会讨论在Director中存储数据的可选择的方法。虽然以前的版本能够列出数据库中的所有项目, 但我们仍然需要它能列出我们所选的项目。当数据库增大时这将变得很重要。我们只需要将现有的代码略作改动就可以很容易的增加一个search功能。以前的listData句柄可以生成一个包含数据库中所有数据的HTML表格。但是当我们在传递一个列表到这句柄中时该告诉它哪些数据该列出来呢。举个例子,如果我们传递数值[1,3]到句柄,那么它将只列出数据库中的第一和第三条记录。同时, 让我们使得listdata的句柄足够强大从而我们不需要再去对它的调用进行任何地修改。如果没有列表被传递到句柄中,它就会假设我们想要列出所有的数据。
9@!?(zHr 奥古多媒体|u7D!aY/P
  下面就是这个新的句柄。除了在声明后的参数列表外;在“--”后新增的几行可以查看是否在注释后面有一个列表。它将首先检查列表的值是不是VOID。如果不是,它就会接着检查数据是否在列表中。如果它不在列表中,那么它就会利用接着的循环来略过这个数据。 奥古多媒体!H*O9G {,kbQ}m

4n;J8K?n*m*kj-w -- show entire database in HTML list
5s%q%g4WQ!w}7M on listData list 奥古多媒体 ^*XU,v|
  if gDatabase.count < 1 then奥古多媒体SiOQTb1Oh ]
    -- if no data yet, then show message instead奥古多媒体 C_.c^Dw4D
    member ("list").text = "No data."奥古多媒体-tb-Z\.YlR"S
  else
p T,L,nrd&I;hL[     -- start html code奥古多媒体{M?4r/[\wh,D
    html = "<HTML><BODY><TABLE BORDER=1><TR>"
/nDa)V#q |(J-w     -- create headings row奥古多媒体A2vU [aV [\M5f
    repeat with i = 1 to gDatabase[1].count奥古多媒体+H{9n9\E5Kh#K
      put "<TD>" & getPropAt (gDatabase[1], i) & "</TD>" after html
K$[&X e0@3{     end repeat奥古多媒体P_ ^&n6FF
    put "</TR>" after html奥古多媒体In3W8F7j$C7V @
    -- put each entry in a row
*x&sT/_&GeH     repeat with m = 1 to gDatabase.count
MW3CU7p h       -- see if there is a list to follow奥古多媒体2meo @/@0lO
      if not voidP (list) then
m+t7\*avB         -- skip if not in list奥古多媒体W1@#H1}gO5jt
        if not getOne (list, m) then next repeat奥古多媒体A jOzNQvB
      end if奥古多媒体8rh L P u4b
      put "<TR>" after html
S2~;~-I2I@ W       -- link to edit record奥古多媒体.v]0qSL:Si
      put "<TD><A HREF=』" & i & "』>EDIT</A></TD>" after html
5iO]5yXK8A `Y       -- put each item in a column
i0dN.ju       repeat with j = 1 to gDatabase[m].count
7l mI3Y9lO N p         put "<TD>" & gDatabase[m][j] & "</TD>" after html
wJ t%_$[ R8A       end repeat奥古多媒体U0J G%NUb6s1m
      put "</TR>" after html
tT-k't[6J s     end repeat
Qe2[s{     -- end html code奥古多媒体 ]^,_(I/c&L
    put "</TABLE></BODY></HTML>" after html奥古多媒体Xy%u0b*G9pAam,Nz
    -- put html into member
7sL9T%lK} m$aB     member ("list").html = html
4zZZ ~WL(c;X   end if
-fr"?Dh   go to frame "list data"
g;Smn!z#}6^9x end 奥古多媒体e%w|VI

,T_9})?H){ZVgz   为了调用这个新的listData句柄,我们首先需要以某种方式建立数据的列表。我在程序的主菜单中加入了一个新的搜索按钮。当用户按下这个按钮后, 就会跳到一个有文本域的“search”帧,在这里,用户需要往文本域里填入搜索的项目。接着他们就可以按下GO按钮来运行搜索句柄。
0zX&OW)X*kGPn+?9_ 奥古多媒体x-{T*qvS$H1fj
  搜索句柄获得了用户输入的文字并通过在所有的数据域中循环来寻找它。它将使用包含功能来辨别他们是否符合。所以搜索"gar"时会搜索到"gar"或者"gary"。 奥古多媒体Y _;[*Y3|1E
奥古多媒体6R Ckr[}Y9F
on search 奥古多媒体 M kW&e-uBZ$YKk%n
  -- get text to search for
b)D|Kyr?`2s   searchText = member ("search text").text 奥古多媒体DCr8{.X ue;~!y%C8ox
  -- init list of found records
q6~"N b-Oi*Tn n   list = []
/GpVdAO&\N,d   -- loop through all records奥古多媒体 ^U'y#W/rI&j
  repeat with m = 1 to gDatabase.count奥古多媒体8O`]+Ss.Sbr[
    -- loop through all fields奥古多媒体.jLr p}0Y
    repeat with j = 1 to gDatabase[m].count
3EHE!Q1iyP5s4D#H       -- see if the search text was found in the field奥古多媒体JUD&Uk^
      if gDatabase[m][j] contains searchText then
q0R7E(kF:V:V         -- add record number to list
p6q/o7}-R8{Rw.Ci3Z         add list, m
6| e*mno`)Wgp         next repeat奥古多媒体:S6R"ed OM3yYX
      end if
Qam6C l d$z     end repeat奥古多媒体+Q%Y"p6{2]5jF
  end repeat 奥古多媒体]2Q/fR{|
  -- only list found records
Xbk$`xu|c4Jn   listData (list)
!p2t+^W*_S7Ah} end
*ZR Mm)w%g 奥古多媒体hc4bR{0P0|G {Z1O]
  这种搜索方法是比较全面。它将发现记录中的任何字符串。你可能只是想要搜索一个特定的字符串,或者可能是用比较而不是用包含来实现精确的匹配。 奥古多媒体K \#FCb ~!X

b;fH[7D2q%t)}] j!xW   搜索的结果将会像是把所有数据都列了出来,除了那些没必要显示出来的数据。这个程序现在是一个拥有全部功能的数据库了。你可以使用这些代码作为建立你自己的特殊的应用程序的基础。然而,如果你准备存储很多数据,我将给你一些让你更好地储存它们的建议。 奥古多媒体 EM1M8`(t$R ?5H
奥古多媒体YD:|X4J Gi
  过去我曾经成功使用过的一种方法是:每个数据存储在它自己的文本成员里,然后我使用一个外部的成员库来作为数据库,这样每个号码都被记录了。你也可以在每个成员里储存一个改变过的字符串列表, 或者用数据的号码对应的那一行来记录数据。如果你对分列的字符感到满意的话, 你可以生成你自己的置标语言并以它们各自的文本成员来储存数据,或者, 你甚至可以用XML插件来储存XML数据,但是我没有尝试过它。

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


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