Autor Thema: mehrere Tabellen gleichzeitig abfragen  (Gelesen 3942 mal)

Offline Wupperhannes

  • Frischling
  • *
  • Beiträge: 38
  • Geschlecht: Männlich
mehrere Tabellen gleichzeitig abfragen
« am: 12.05.09 - 02:50:30 »
Ich muss für eine Datenbankabfrage aus einer SQL Datenbank drei Tabellen gleichzeitig auslesen. In Tabelle 1 stehen Projektdaten, in Tabelle 2 Kundendaten, in Tabelle 3 Kontaktdaten. In den Projektdaten stehen die Indizes der Datensätze aus Tabelle 2 und 3. Die Abfrage läuft so dass ich einen Datensatz aus Tabelle 1 lese, die Daten speichere und dann mit Hilfe der Indizes aus Tabelle 2 und 3 die zugehörigen Kunden- bzw. Kontaktdaten lese und in dasselbe Notes Dokument speichere.

Soweit die Theorie. In der Praxis stellt sich heraus, dass ich immer nur einen Resultset gleichzeitig offen haben kann. Wenn ich z.B. eine Zeile aus dem Projekt Resultset ausgelesen habe und dann über die Indizes in den beiden anderen Tabellen eine Abfrage starte, bekomme ich immer leere resultsets. Schließe ich den Projekt resultset, dann kann ich die Kundendaten lesen usw.

Ich poste das Programm einmal wie es prinzipiell läuft. Der Originaltext wäre zu viel und zu verschachtelt da das Ganze auch noch in Objekte gekapselt ist.

   Public Sub new
      Set conPrj = New ODBCConnection   
      Set conCln = New ODBCConnection   
      Set conCnt = New ODBCConnection   
      Set qryPrj = New ODBCQuery
      Set qryCln = New ODBCQuery
      Set qryCnt = New ODBCQuery
      Set resultPrj = New ODBCresultSet
      Set resultCln = New ODBCresultSet
      Set resultCnt = New ODBCresultSet
      
      Set qryPrj.Connection = conPrj
      Set qryCln.Connection = conCln
      Set qryCnt.Connection = conCnt
      Set resultPrj.Query = qryPrj
      Set resultCln.Query = qryCln
      Set resultCnt.Query = qryCnt
   End Sub
   
   Public Sub Delete
      resultPrj.Close(DB_CLOSE)
      resultCln.Close(DB_CLOSE)
      resultCnt.Close(DB_CLOSE)
      conPrj.Disconnect
      conCln.Disconnect
      conCnt.Disconnect
   End Sub

   Public Function getAllProjects( ) As Boolean
      sSQLQuery = "SELECT * FROM tblProject"
      qryPrj.SQL = sSQLQuery
      resultPrj.cachelimit = DB_NONE   
      Call resultPrj.Execute()
      getAllProjects = resultPrj.IsresultSetAvailable
   End Function

   Public Function getClientByID(sID As Integer) As Boolean
      sSQLQuery = "SELECT * FROM tblClient WHERE SystemID=" + Str(sID)
      qryCln.SQL = sSQLQuery
      resultCln.cachelimit = DB_NONE   
      Call resultCln.Execute()
      getClientByID = resultCln.IsresultSetAvailable
   End Function

--------------------------------------------------------------------------------------------------

   If BTDatabase.getAllProjects = True Then
      Call BTDatabase.gotoFirstProject
      Call oProject.getLinks( BTDatabase )
      If BTDatabase.getClientByID( oProject.ClientID )= True Then
         Call BTDatabase.gotoFirstClient()
         Call oProject.Job.getData( BTDatabase )
         Call oProject.Client.getData( BTDatabase )
        Call oProject.Contact.getData( BTDatabase )
      End If
   End If   

------------------------------------------------------------------------------------------------------

Wie gesagt, das sind nur Auszüge aus dem Programm. Ist alles etwas umfangreicher. Separate Connection, Query und Resultset für jede Tabelle war ein Akt der Verzweiflung weil ich dachte, dass es vielleicht daran liegen könnte dass ich nur eine Connection und eine Query definiert hatte. War aber nicht die Ursache - hab es trotzdem drin gelassen.

Hat jemand eine Idee??


« Letzte Änderung: 12.05.09 - 02:53:29 von wupperhannes »

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: mehrere Tabellen gleichzeitig abfragen
« Antwort #1 am: 12.05.09 - 08:01:56 »
Beschäftige dich mal mit dem SQL Syntax, hier gibt es Sachen wie "join" um mehrere Tabellen zu verknüpfen
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

BigWim

  • Gast
Re: mehrere Tabellen gleichzeitig abfragen
« Antwort #2 am: 12.05.09 - 08:23:21 »
Oder direkt eine Abfrage / View in der SQL-Datenbank erstellen. Diese kann wie eine Tabelle ausgelesen werden.

Markus

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: mehrere Tabellen gleichzeitig abfragen
« Antwort #3 am: 12.05.09 - 08:26:49 »
Hallo Hannes!

Wie dir JBubbleBoy schon gesagt hat, solltest du eventuell einen SQL Kurs besuchen. Prinzipiell soll man im SQL Umfeld so viel wie möglich die Datenbank arbeiten lassen und deshalb die gesamte Logik in SQL verpacken und dann nur noch das fertige Resultset zeilenweise auslesen.

Aber aufgepasst. SQL ist keine Technologie in die man sich schnell mal einen Nachmittag einarbeitet sondern das ist eher mit der Lernkurve von Loutsscript vergleichbar. Vor allem kann man performancemäßig furchtbar auf die Nase fliegen, wenn man etwas falsch macht.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Wupperhannes

  • Frischling
  • *
  • Beiträge: 38
  • Geschlecht: Männlich
Re: mehrere Tabellen gleichzeitig abfragen
« Antwort #4 am: 12.05.09 - 15:14:33 »
Danke allen die geantwortet haben und mich auf den richtigen Pfad gebracht. Das mit dem Kurs wird nicht nötig sein. Habe früher viel in SQL programmiert, in diesem Falle aber überhaupt nicht in diese Richtung gedacht. Peinlich peinlich. Ich war total versteift auf die separate Abfrage der Tabellen.

Rein aus technischem Interesse würde ich aber schon gerne wissen  ob es in LS möglich ist mehrere Resultsets offen zu haben. Die Online Hilfe ist da leider nicht sehr eindeutig.

Na dann werde ich mal an meinem SQL statement basteln :) Thnx again!


Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: mehrere Tabellen gleichzeitig abfragen
« Antwort #5 am: 12.05.09 - 15:22:54 »
Bin mir nicht 100% sicher, aber die Anzahl möglicher Verbindungen wird in der SQL-DB verwaltet, oder?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

BigWim

  • Gast
Re: mehrere Tabellen gleichzeitig abfragen
« Antwort #6 am: 12.05.09 - 16:40:15 »
Zitat
Rein aus technischem Interesse würde ich aber schon gerne wissen  ob es in LS möglich ist mehrere Resultsets offen zu haben. Die Online Hilfe ist da leider nicht sehr eindeutig.

Ohne es mal gemacht zu haben, hätte ich es mit mehreren Objekten vom Typ ODBCResultSet probiert, die vor der Ausführung des Statement evtl. entsprechend den Beispielen in der Hilfe "verknüpft" werden.

Sonst bleibt nur der Fußweg ...

Bin aber auch gespannt, ob es eine "richtige" Antwort auf diese Frage gibt. Stehe in absehbarer Zeit selbst vor der Aufgabe, eine Unternehmensdatenbank auf Basis eines SQL-Servers zu bauen mit Notes als FrontEnd ....

Markus

Offline Wupperhannes

  • Frischling
  • *
  • Beiträge: 38
  • Geschlecht: Männlich
Re: mehrere Tabellen gleichzeitig abfragen
« Antwort #7 am: 12.05.09 - 17:45:06 »
@jBubbleBoy
ich die Windows ODBC Verbindung auf einen entsprechenden Parameter hin untersucht. Nichts dabei womit man das beeinflussen könnte. Auf die Datenbank selbst habe ich keinen Einfluss. Die ist von einem anderen Unternehmen.

@BigWim
Viel Spaß bei dem Projekt. Und die Idee mit dem SQL statement hat es gebracht. Also lieber die Datenbank arbeiten lassen als Lotus :))

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz