Domino 9 und frühere Versionen > ND6: Entwicklung

Zwei Tabellen in einem auslesen

(1/2) > >>

Sandra:
Hallo Zusammen,

ich habe folgendes Problem. Ich möchte Daten aus zwei Tabellen einer SQL-Datenbank auslesen und in ein neues Dokument schreiben.

Es sollen zu einem Auftrag alle Positionen ausgelesen werden.

Abhängig von der Artikelnummer in der jeweiligen Position werden Daten aus einer zweiten Tabelle benötigt.

Das Problem ist nun, dass das auslesen der zweiten DB immer nur bei der letzten eingelesenen Position funktioniert. Wenn ich mir das im Debugger ansehe, funktioniert anscheinend der execute-Befehl immer nur beim letzten Durchgang der Loop. Ich sehe einfach nicht wo das Problem ist. Hier der Skript, vielleich kann einer von euch was erkennen.

Sub Click(Source As Button)
   Dim con As New ODBCConnection
   Dim qry As New ODBCQuery
   Dim qry2 As New ODBCQuery
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim res As New ODBCResultSet
   Dim res2 As New ODBCResultSet
   Dim db As NotesDatabase   
   Dim session As New NotesSession   
   Dim doc As  NotesDocument
   
   
   Dim pos As Long
   Dim art As String
   Dim an As Long
   Dim z
   z=0
   Set db = session.CurrentDatabase
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   Call doc.Save(True, True)
   an = uidoc.FieldGetText("fdAuftragsNr")
   
   con.ConnectTo("BPW_Datamarts")    
   Set qry.Connection = con
   Set qry2.Connection = con
   
   qry.SQL = "select * from [SH Verkauf FP mit Attributen] where [Auftrags-Nr.] = '" & an & "'"
   Set res.Query = qry
   res.Execute
   r% = res.FirstRow
   
   Do While r% = True
      Dim adoc As  New NotesDocument(db)
      
      Call adoc.MakeResponse( doc )      
      adoc.form = "frmReklaDetail"
      Call adoc.Save(True, True)
      
      adoc.fdAuftragsNr = an      
      adoc.fdpos = res.GetValue("POS")   
      art = res.GetValue("Artikel-Nr.")
      adoc.fdartikelnr = art
            
      qry2.SQL = "select * from DIM_SH_ARTIKEL  where [Artikel-Nr.] = '" + art + "'"
      Set res2.Query = qry2
      res2.Execute
      res2.FirstRow
      adoc.fdartikelbez = res2.GetValue("Bezeichnung")
      adoc.fdags = res2.GetValue("Artikelgruppe") & " " & res2.GetValue("Artikelgruppenbezeichnung")
      
      adoc.fdobf = res.GetValue("OBF")
      adoc.fdfarbe = res.GetValue("Farbe")
      adoc.fdleimung = res.GetValue("Leimung")
      adoc.fdflg = res.GetValue("gr/m²")
      adoc.fdlaenge = res.GetValue("Länge")
      adoc.fdbreite = res.GetValue("Breite")
      adoc.fdMEHME = res.GetValue("ME")
      adoc.fdBestMengeHME = res.GetValue("Menge in ME")
      z = z+1      
      
      Call adoc.Save(True, True)
      r% = res.NextRow
   Loop
   con.Disconnect
   Messagebox("Es wurden " + z + " Positionen erstellt.")
   
End Sub

y20frank:
>> Ich möchte Daten aus zwei Tabellen einer SQL-Datenbank auslesen und in ein neues Dokument schreiben
Hmm versteh ich zwar gerad nicht so ganz... nun, formuliere doch gleich die erste SQL-Abfrage doch so, dass sie aus zwei Tabellen die Daten wie gewünscht ausliest und in ein neues Dokument schreibt...

Sandra:

--- Zitat von: y20frank am 22.10.04 - 20:24:05 --->> Ich möchte Daten aus zwei Tabellen einer SQL-Datenbank auslesen und in ein neues Dokument schreiben

Hmm versteh ich zwar gerad nicht so ganz... nun, formuliere doch gleich die erste SQL-Abfrage doch so, dass sie aus zwei Tabellen die Daten wie gewünscht ausliest und in ein neues Dokument schreibt...

--- Ende Zitat ---

In der SQL-Datenbank A sind mehrere Tabellen 1, 2, 3 usw. In Tabelle 1 sind Aufträge mit Positionsdaten darunter die Artikelnr. In Tabelle 2 finde ich die Beschreibung zur Artikelnr.
ein Auftrag kann mehrere Positionen haben, weshalb ich Tabelle 1 Auslese und mit Hilfe einer Schleife jede Position als neues Dokument anlege. In diesem neuen Dokument soll auch die Beschreibung des Artikels mit gespeichert werden. Da aber auch jede Position einen anderen Artikel haben kann, kann ich die Tabelle 2 erst bei der jeweiligen Position auslesen wobei ich ein Feldwert von Tabelle 1 zur Abfrage brauche.

Thomas Schulte:
Da bin ich irgendwie mit bei Frank, warum machst du keinen Inner Join und holst dir die Artikelbeschreibung gleich beim ersten SQL Befehl mit?
Geht vor allem schneller weil du keinen zweiten Connect je Position auf die SQL DB brauchst. Der Protokoll Overhead wird minimiert.

Thomas

Sandra:
Sorry, ich stand etwas auf dem Schlauch :-[. Meine SQL-Kenntnisse sind nicht gerade umfassend. Hättet ihr ein Beispiel für so eine Inner Join Abfrage? Ich such aber auch mal im Netz.

Danke schon mal für den Tipp.

Hab im Netz was gefunden. Klappt wunderbar. Vielen Dank nochmal.Thema wär damit erledigt.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln