ich habe noch ein paar Probleme mit Datenbankabfragen. Ich habe die Idee mit einem zweiten Fenster eine Datenbankabfrage zu machen. Im folgenden Beispiel ist nur die Prozedur Station wichtig. Alles was beim Fenster nicht mit dieser Prozedur zusammenhängt ist nicht wichtig. Ich möchte eine ähnliche Prozedur wie die Station-Prozedur, nur soll eine ganze Tabelle aus der Datenbank abgefragt werden.
Code: Alles auswählen
Procedure.s Station()
OpenWindow(110,0,0,500,500,"Bahnhof wählen ...",#PB_Window_ScreenCentered)
TextGadget(111,10,10,100,20,"Bahnhof:")
StringGadget(112,120,10,300,20,"")
ListViewGadget(113,120,35,300,200)
ButtonGadget(114,10,250,100,20,"Übernehmen")
cla = 0
Repeat
eventa = WaitWindowEvent()
If eventa = #PB_Event_Gadget
Select EventGadget()
Case 112
If EventType() = #PB_EventType_Change And Len(GetGadgetText(112)) > 2
ClearGadgetItems(113)
sql$ = "SELECT DISTINCT stop_name FROM stops WHERE stop_name LIKE '%"+GetGadgetText(112)+"%';"
If DatabaseQuery(0, sql$)
While NextDatabaseRow(0)
AddGadgetItem(113,-1,GetDatabaseString(0,0))
Wend
EndIf
EndIf
Case 113
If GetGadgetState(113) > -1 And EventType() = #PB_EventType_LeftClick
SetGadgetText(112,GetGadgetItemText(113,GetGadgetState(113)))
EndIf
Case 114
cla = 1
bhf$ = GetGadgetText(112)
EndSelect
EndIf
Until cla = 1
CloseWindow(110)
ProcedureReturn bhf$
EndProcedure
OpenWindow(100,0,0,1000,600,"Fahrplan",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(101,10,570,100,20,"Fahrtverlauf...")
ButtonGadget(102,120,570,100,20,"Bahnhofstafel ...")
PanelGadget(103,10,10,980,550)
CloseGadgetList()
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
gadget = EventGadget()
Select gadget
Case 101
tid$ = InputRequester("Trip ID","Bitte geben Sie eine Trip-ID ein.","")
sql$ = "SELECT arrival_time, departure_time, stop_id FROM stop_times WHERE trip_id = "+tid$+" ORDER BY stop_sequence;"
If DatabaseQuery(0, sql$)
OpenGadgetList(103)
AddGadgetItem(103,-1,tid$)
fahrt + 1
lig = 2000+10*fahrt
ListIconGadget(lig,10,40,900,450,"Bahnhof",250,#PB_ListIcon_FullRowSelect)
AddGadgetColumn(lig,1,"Ankunft",80)
AddGadgetColumn(lig,2,"Abfahrt",80)
ButtonGadget(lig+9,10,500,100,20,"Schließen")
CloseGadgetList()
While NextDatabaseRow(0)
AddGadgetItem(lig,-1,Bahnhof(GetDatabaseString(0,2))+Chr(10)+Uhrzeit(GetDatabaseString(0,0))+Chr(10)+Uhrzeit(GetDatabaseString(0,1)))
Wend
SetGadgetItemText(lig,0,"",1)
SetGadgetItemText(lig,CountGadgetItems(lig)-1,"",2)
Else
MessageRequester("Fehler","Fehlerhafte Dateneingabe",0)
EndIf
Case 102
bhf$ = Station()
sql$ = "SELECT stop_id FROM stops WHERE stop_name = '"+bhf$+"';'"
bnr$ = ""
If DatabaseQuery(0, sql$)
While NextDatabaseRow(0)
bnr$ = bnr$ + GetDatabaseString(0,0) + ","
Wend
sqla$ = "SELECT s.trip_id, s.departure_time, s.stop_sequence, t.route_long_name, t.trip_end FROM stop_times AS s JOIN trips AS t ON s.trip_id = t.trip_id WHERE s.stop_id IN ("+Mid(bnr$,1,Len(bnr$)-1)+") ORDER BY s.departure_time;"
If DatabaseQuery(0, sqla$)
OpenGadgetList(103)
AddGadgetItem(103,-1,bhf$)
tafel + 1
lig = 1000+10*tafel
ListIconGadget(lig,10,40,900,450,"Abfahrt",80,#PB_ListIcon_FullRowSelect)
AddGadgetColumn(lig,1,"Trip-ID",80)
AddGadgetColumn(lig,2,"Linie",80)
AddGadgetColumn(lig,3,"Richtung",250)
ButtonGadget(lig+9,10,500,100,20,"Schließen")
CloseGadgetList()
While NextDatabaseRow(0)
If Bahnhof(GetDatabaseString(0,4)) <> bhf$
AddGadgetItem(lig,-1,Uhrzeit(GetDatabaseString(0,1))+Chr(10)+GetDatabaseString(0,0)+Chr(10)+GetDatabaseString(0,3)+Chr(10)+Bahnhof(GetDatabaseString(0,4)))
EndIf
Wend
EndIf
Else
MessageRequester("Fehler","Fehler bei Dateneingabe",0)
EndIf
Case 1000 To 3000
If gadget % 10 = 9
RemoveGadgetItem(103,GetGadgetState(103))
EndIf
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
CloseDatabase(0)
End