kaskadierte Datenbankabfrage (Access)

Anfängerfragen zum Programmieren mit PureBasic.
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

kaskadierte Datenbankabfrage (Access)

Beitrag von HoDam »

Hallo

gibt es irgendwo ein Beispielcode, wie man eine kaskadierte Abfrage erstellt.

Beispiel.

Felder: Stadt; Sportart; Verein

Der Anwender soll die Möglichkeit haben, entweder über Stadt oder Sportart auszuwählen.

Wählt er Stadt an, sollen nur noch die Sportarten ausgewählt werden können, die in dieser Stadt möglich sind. Danach soll er aus dieser Liste auswählen können, die Vereine, die in dieser Stadt, diese Sportart anbieten.

Das Ganze über Sportart entsprechend:

Sportart/Städte/Vereine.


Dankeschön
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag von DataMiner »

Schaue dir mal die MDB-Lib von Paul Leischow an. Die Lib findest du auf PureArea.net im Bereich User-Libs. Enthalten ist auch ein Beispielcode. Da die ganz normale SQL-Syntax benutzt wird ist auch eine kaskadierende Abfrage kein Problem.
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

Beitrag von HoDam »

So, die Datenbankanbindung hat funktioniert.

Kann auch eine Selectanweisung durchführen. Wie kann ich mir den Inhalt der Anfrage anzeigen lassen (kein debugger) und diese neue Liste als weiteres Auswahlkriterium für eine weitere Abfrage nutzen.

Beispiel:
1. Selectbefehl auf Feld Stadt.
Diese Liste möchte ich nutzen, damit der Anwender eine Stadt auswählen kann. Wie kann ich diese Information verfügbar machen in einem Listfeld
Als nächstes soll eine Selectanweisung des Feldes Sportart durchgeführt werden mit der ausgewählten Stadt.

Jetzt sollen alle Sportarten angezeigt werden, die in dieser Stadt verfügbar sind.

Der Anwender soll seine Sportart auswählen.

Mit diesen beiden Kriterien Stadt/Sportart sollen jetzt alle Vereine gefiltert werden, die diese Sportart in der entsprechenden Stadt anbieten.


Danke

PS: Gibt es eigentlich Literatur (englisch, deutsch) zur PureBasic.
Das Handbuch ist ehe ein Nachschlagewerk und nicht didaktisch nicht so sinnvoll zum erlernen einer Sprache.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

sowas?

Code: Alles auswählen

; PureBasic Visual Designer v3.92 build 1460

;- Constants
;
Enumeration
  #Window_0
  #Text_0
  #Combo_0
  #Text_1
  #Combo_1
  #Combo_2
  #Text_2
  #Listview_0
  #Database
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 591, 293,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Calmund's Freund")
    If CreateGadgetList(WindowID())
      TextGadget(#Text_0, 5, 5, 160, 20, "ZEIGE MIR ALLE VEREINE AUS")
      ComboBoxGadget(#Combo_0, 170, 0, 110, 230)
      TextGadget(#Text_1, 285, 5, 25, 15, "DIE")
      ComboBoxGadget(#Combo_1, 320, 0, 120, 530)
      TextGadget(#Text_2, 445, 5, 60, 20, "ANBIETEN")
      
      ListViewGadget(#Listview_0, 5, 30, 580, 255)
      
    EndIf
  EndIf
EndProcedure
Open_Window_0()

InitDatabase()
If OpenDatabase(#Database,"StadtSportVereinDB",User.s,PW.s)
  If DatabaseQuery("select distinct stadt from StadtSportVereinTabelle")
    While NextDatabaseRow()
      AddGadgetItem(#Combo_0,0,GetDatabaseString(0))
    Wend
  EndIf
  CloseDatabase(#Database)
EndIf
;SetGadgetState(#Combo_0,0)
Repeat ; Start of the event loop
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
  GadgetID = EventGadgetID() ; Is it a gadget event?
  EventType = EventType() ; The event type
  If Event = #PB_EventGadget
    If GadgetID = #Combo_0
      selStadt.s=GetGadgetItemText(#Combo_0,GetGadgetState(#combo_0),0 )
      ClearGadgetItemList(#combo_1)
      If OpenDatabase(#Database,"StadtSportVereinDB",User.s,PW.s)
        If DatabaseQuery("select Sportart from StadtSportVereinTabelle where Stadt='"+selStadt+"'")
          Debug  "select Sportart from StadtSportVereinTabelle where Stadt='"+selStadt+"'"
          While NextDatabaseRow()
            AddGadgetItem(#Combo_1,0,GetDatabaseString(0))
          Wend
        EndIf
        CloseDatabase(#Database)
      EndIf
      ;SetGadgetState(#Combo_1,0)
    ElseIf GadgetID = #Combo_1
      ClearGadgetItemList(#Listview_0)
      selStadt.s=GetGadgetItemText(#Combo_0,GetGadgetState(#combo_0),0 )
      selSportart.s=GetGadgetItemText(#Combo_1,GetGadgetState(#combo_1),0 )
      If OpenDatabase(#Database,"StadtSportVereinDB",User.s,PW.s)
        If DatabaseQuery("select Verein from StadtSportVereinTabelle where Stadt='"+selStadt+"' and Sportart='"+selSportArt+"'")
          Debug  "select Verein from StadtSportVereinTabelle where Stadt='"+selStadt+"' and Sportart='"+selSportArt+"'"
          While NextDatabaseRow()
            AddGadgetItem(#Listview_0,0,GetDatabaseString(0))
          Wend
        EndIf
        CloseDatabase(#Database)
      EndIf
    ElseIf GadgetID = #Listview_0
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
Du brauchst für obiges demo ne Datenbank mit dem ODBC-Namen StadtSportVereinDB mit einer Tabelle StadtSportVereinTabelle drin
mit folgendem Aufbau
CREATE TABLE StadtSportVereinTabelle(
ID COUNTER NOT NULL,
Stadt VARCHAR(50),
Sportart VARCHAR(50),
Verein VARCHAR(50)
)
GO

CREATE UNIQUE INDEX PrimaryKey ON StadtSportVereinTabelle(ID)
GO
CREATE INDEX ID ON StadtSportVereinTabelle(ID)
GO
in Access kannst Du Dir das flott zusammenklicken.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

Beitrag von HoDam »

Ja, dankeschön,
diesen Tipp brauchte ich.

Werde mich wieder melden
Antworten