Hallo Christof,
ich versuch mal den aufbau der datenbank so einfach wie möglich darzustellen:
es gibt eine v12-datenbank: datenbank.v12
diese ist in mehrere tabellen aufgeteilt (ich schreib dir nur mal zwei auf). die verschiedenen tabellen sind auch die verschied. suchkriterien:
dbo_lebensmittel (mit den fields: lebensmittel_id, lebensmittel_name, lebensmittel_marke_id)
dbo_marke (mit den fields: marke_id, marke_name)
nun soll die suche ein "lebensmittel"-suchfeld beinhalten (wo man z.b. pizza) suchen kann. alle lebensmittel sind in der dbo_lebensmittel aufgeführt.
man soll aber auch zusätzlich über die "marke" suchen können. das soll ein drop-down-menu werden, in dem man die marke auswählen kann.
über die "lebensmittel_marke_id" der "dbo_lebensmittel" und der "marke_id" der "dbo_marke" sind diese über zahlencodes miteinander verknüpft.
ich weiss jetzt nicht wie ich diese ansprechen kann?
also z.b. pizza hat in der dbo_lebensmittel die "lebensmittel_marke_id": 15
in der dbo_marke ist diese nummer unter "marke_id" :15 aufgeführt. so kann die marke mit dem lebensmittel verknüpft werden.
mein lingo-script lautet nun:
main script (global):
--------------------------------------------
Global gDB, gTable, gFirstRec, kPageLength
on startMovie
set kPageLength = 16 page
set gFirstRec = 1
if not validateV12() then halt
--die felder, in denen das ergebis eingetragen wird
put "Text to search..." into field "kwd"
put "" into field "HitList"
put "" into field "txt"
put "" into field "txt02"
put "" into field "txt03"
end
on FindIt kWord
put "Searching..." into field "hitList"
if not ObjectP(gTable) then
clearGlobals()
openDataBase()
end if
mSetCriteria(gTable, "lebensmittel_name", "WordStarts", kWord)
CheckV12Error()
StartTimer()
mSelect(gTable)
CheckV12Error()
put "mSelect: " & (the timer / 60.0) & " secs"
put mGetSelection(gTable, "LITERAL",1, mSelectCount(gTable), TAB, RETURN, "lebensmittel_name") into field "HitList"
put mGetSelection(gTable, "LITERAL",1, mSelectCount(gTable), TAB, RETURN, the moviePath & "dbo_marke" & "marke_name") into field "txt"
CheckV12Error()
put "mGetSelection: " & (the timer / 60.0) & " secs"
SelectRec(1) -- select first record in list (as if user clicked on it)
end FindIt
on SelectRec recNum
set the forecolor of field "HitList" to 255
set the forecolor of line recNum of field "HitList" to 35
mGo(gTable, recNum)
--put mGetField(gTable, "food_cat_id") into field "txt"
CheckV12Error()
colorCodeOccurrences("txt", field "kwd", 35) -- color 35 is a red in the Mac palette
end SelectRec
on TrackAndSelectLine
pointer is on
global gTable
set ml = -999
repeat while the mouseDown
if (the mouseLine>0) and (the mouseLine <> ml) then
set ml = the mouseLine
SelectRec(ml)
else if (the mouseline<0) then
pass
end if
end repeat
end TrackAndSelectLine
on ColorCodeOccurrences memberName, yourText, theColor
set the forecolor of field memberName to 255
set totalLen = length(field memberName)
set len = length(yourText)
set startAt = 1 -- crawling pointer, points at 1st char of text chunk to look into
set i = offset(yourText, field memberName)
repeat while i>0
set the forecolor of char i+startAt-1 to i+startAt-1+len-1 of field memberName to theColor
set startAt = startAt+i+len
set i = offset(yourText, char startAt to totalLen of field memberName)
end repeat
end ColorCodeOccurrences
-------------------------------------------------
utilities-script (global):
-------------------------------------------------
Global gDB, gTable, gFirstRec, kPageLength
on openDatabase
ClearGlobals()
set gDB = new(XTRA "V12dbe", the pathname&"datenbank.V12", "ReadWrite", "")
if CheckV12Error() then exit
set gTable = new(XTRA "V12table", mGetRef(gDB), "dbo_lebensmittel",)
CheckV12Error()
end openDatabase
-------------------------------------------------
das ist jetzt ziemlich kompliziert.
wenn du lust hast ;) kannst du dir das ja mal anschauen und vielleicht fällt dir ne lösung ein, wie ich mehrere suchkriterien einbauen kann, und die tabellen der datenbank über diese "id" verknüpfen kann.
vielen dank!
simone
als Antwort auf: [#37980]