Problem: Access DB => Ausgabe in VB

Smacks

Grünschnabel
Hallo!

Also ich habe eine SQL Abfrage:

SELECT Buch.BuchID, Buch.Buchtitel, AutorBuch.AutorBuchID, AutorBuch.Autor, Buch.Preis, Buch.Einkaufsdatum FROM Buch INNER JOIN AutorBuch ON Buch.BuchID = AutorBuch.BuchID;

Das Problem ist nun:
-In Access funktioniert der SQL Befehl tadellos, jedes Buch hat den richtigen Autor u.s.w..
-in VB wird immer der Autor Aichele bei allen Bücher angezeigt!

Ich geb in VB die ganzen Sachen mit einer Do Loop Schleife in einem Listfeld aus.
 
Hi!

Also meines Erachtens ist die SQL-Abfrage schon korrekt. Es könnte also nur an der VB-Schleife liegen. Poste doch mal bitte Deine DO LOOP-Schleife, vielleicht findet sich da der Fehler.

..::Six Dark::..
 
Gut, hier ist der Code:



Private Sub JedesBuch_Click()
'Ausgabe/Anzeigen
mSQL = "SELECT Buch.BuchID, Buch.Buchtitel, AutorBuch.AutorBuchID, AutorBuch.Autor, Buch.Preis, Buch.Einkaufsdatum FROM Buch INNER JOIN AutorBuch ON Buch.BuchID = AutorBuch.BuchID;"
lfausgabe.Clear
Set snBuch = mdbbuecher.OpenRecordset(mSQL, dbOpenSnapshot)
Set snAutorbuch = mdbbuecher.OpenRecordset(mSQL, dbOpenSnapshot)
Do While snBuch.EOF = False
mzeile = Format(snBuch!BuchID, "!@@@@@@@") + " " + Format(snBuch!Buchtitel, "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") + " " + Format(snAutorbuch!Autor, "!@@@@@@@@@@@@@@@@@@@@@@") + " " + Format(snBuch!preis, "0,00 €")
lfausgabe.AddItem mzeile
mWert = mWert + snBuch!preis
snBuch.MoveNext
Loop

End Sub
 
Hi!

Ich blick zwar nicht so ganz durch den Code, aber versuch es mal so:
Code:
mzeile = Format(snBuch!BuchID, "!@@@@@@@") + " " +
              Format(snBuch!Buchtitel, "!@@@@@@@@@@@@@@@@@@@
              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") +
               " " + Format(snBuch!Autor, "!@@@@@@@@@@
              @@@@@@@@@@@@") + " " + Format(snBuch!preis, "0,00 €")
Durch den INNER JOIN werden die beiden Tabellen schon zusammengeführt, deshalb verstehe ich nicht warum Du dies tust:

Set snAutorbuch = mdbbuecher.OpenRecordset(mSQL, dbOpenSnapshot)
?

MfG
..::Six Dark::..
 
Original geschrieben von SixDark
Hi!

Ich blick zwar nicht so ganz durch den Code, aber versuch es mal so:
Code:
mzeile = Format(snBuch!BuchID, "!@@@@@@@") + " " +
              Format(snBuch!Buchtitel, "!@@@@@@@@@@@@@@@@@@@
              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") +
               " " + Format(snBuch!Autor, "!@@@@@@@@@@
              @@@@@@@@@@@@") + " " + Format(snBuch!preis, "0,00 €")

Durch den INNER JOIN werden die beiden Tabellen schon zusammengeführt, deshalb verstehe ich nicht warum Du dies tust:

Set snAutorbuch = mdbbuecher.OpenRecordset(mSQL, dbOpenSnapshot)
?

MfG
..::Six Dark::..

Format(snBuch!Autor geht leider nicht, weil ich den Autor aus der Buchtabelle rausgeschmissen habe... Der Autor ist also nur noch in der "Detailtabelle" AutorBuch.

Recordsets muss ich doch öffnen damit VB überhaupt auf die AccessDB zugreifen kann, oder? Oder mach ich mit dem Befehl Set snAutorbuch = mdbbuecher.OpenRecordset(mSQL, dbOpenSnapshot) etwas anderes?
Ich bin jetzt auch nicht grade der VB-Profi, deswegen frag ich.
 
Hi!

Ich öffne meine Datenbanken in VB.6 immer folgendermaßen (Deine Vorgehensweise hab ich zwar auch schon mal gesehen, aber noch nie selbst verwendet):

Code:
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset

Cn.ConnectionString = "FILE NAME=DatenBank.udl"
Cn.Open

Rs.CursorLocation = adUseClient
Rs.Source = "SELECT Buch.BuchID, Buch.Buchtitel, AutorBuch.AutorBuchID,
                           AutorBuch.Autor, Buch.Preis, Buch.Einkaufsdatum FROM Buch
                            INNER JOIN AutorBuch ON Buch.BuchID = AutorBuch.BuchID"
Rs.Open ActiveConnection:=Cn, CursorType:=adOpenStatic

'Zugreifen auf die einzelnen Felder des Recordsets:

  Rs.MoveFirst		'Auf den ersten Datensatz navigieren
  Do Until Rs.EOF	'Schleife bis das Ende der Datensätze erreicht wurde
      mzeile = Format(Rs.Fields(0).Value, "!@@@@@@@") + " " + ...
  Loop
Wobei hier bei Rs.Fields(0).Value die Ziffer in der Klammer das jeweilige Feld im Recordset anspricht, also bei 0 das Erste (BuchID), bei 1 das zweite (Buchtitel), ... , bei 3 das Vierte (Autor) <-- und da sollte dann auch der Name des Autors auftauchen!

Der ConnectionString der Verbindung zeigt auf eine UDL-Datei, diese hat folgenden Inhalt:
Code:
[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=I:\Pfad\DatenBank.mdb;Persist Security Info=False
Diese Datei kann man einfach erstellen indem man eine neue Textdatei anlegt und die Endung auf UDL ändert. Danach kann man die Datei normalerweise mit Doppelklick öffnen und es erscheint der Dialog zur Erstellung einer Verbindung.

MfG
..::Six Dark::..
 
Zuletzt bearbeitet:
Hier mal ein Beispiel ohne UDL-Datei:

Code:
Dim Cn As New ADODB.Connection
Dim RsT As New ADODB.Recordset

-----

Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cn.ConnectionString = "Data Source=C:\Temp\datei.mdb"
Cn.CursorLocation = adUseClient
Cn.Open
With RsT
    .ActiveConnection = Cn
    .CursorLocation = adUseClient
    .CursorType = adOpenStatic
    .Source = "SELECT Buch.BuchID, Buch.Buchtitel, AutorBuch.AutorBuchID,
                           AutorBuch.Autor, Buch.Preis, Buch.Einkaufsdatum FROM Buch
                            INNER JOIN AutorBuch ON Buch.BuchID = AutorBuch.BuchID"
    .Open
    .MoveFirst
        For i = 0 To .RecordCount - 1
            mzeile = Format(RsT.Fields(0).Value, "!@@@@@@@") + " " + ...
            .MoveNext
        Next i
    .Close
end with
Cn.close
 
Zurück