Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
180to184
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
180to184
180to184
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenbankzugriff mit ADO

Datenbankzugriff mit ADO
15.11.2002 11:25:48
Stefan
Wertes Herber-Team,

ich habe folgendes Problem mit ADO:
in den Tabellen "Ports" und "Aufträge" gibt es 2 mal identische Felder names "Nummer",
nur dass in der Tabelle Ports die Nummer eine andere Bedeutung hat, als in der Tabelle
"Aufträge" (siehe bei DIM). Greife ich nun per "RS.Fields" auf "Nummer" zu, bekomme ich
lediglich die Auftragsnummer aus der Tabelle "Aufträge". Wie komme ich jetzt an die
PortID (also Feld "Nummer" aus Tabelle "Ports") heran?


Sub Datenbankabfrage()

Dim Conn As New ADODB.Connection
Dim SQL As String 'SQL-Abfrage
Dim RS As Object 'Objekt mit Zuweisung auf SQL-Abfrage
Dim PortID As String 'PortID aus Tabelle "Ports"
Dim WuT As Variant 'Wunschtermin aus Tabelle "Aufträge"
Dim InstT As Variant 'Installationstermin aus Tabelle "Aufträge"
Dim FBE As Variant 'FBE-Termin aus Tabelle "Aufträge"
Dim Auftrag As String 'Auftragsnummer aus Tabelle "Aufträge"
Dim Datei As String 'Dateiname
Dim Bemerk As String 'Bemerkungen aus Tabelle "Ports"
Dim I As Long 'Zähler

I = 2
Datei = "Transfer-Tool.xls"
Conn.Open "testDB", "User", "passwort"

SQL = "SELECT * FROM Ports INNER JOIN Aufträge ON Ports.Port_ID = Aufträge.Port_ID"

Set RS = Conn.Execute(SQL)

Do Until RS.EOF
'Wert = RS.Fields("Nummer")
'On Error Resume Next
Auftrag = RS.Fields("Nummer")
PortID = RS.Fields("Ports.Nummer")
WuT = RS.Fields("Wunschtermin")
InstT = RS.Fields("Installation")
FBE = RS.Fields("Funktionsbereitschaft")
Bemerk = RS.Fields("frnr")
On Error GoTo 0
Workbooks(Datei).Sheets(2).Cells(I, 1).Value = Auftrag
Workbooks(Datei).Sheets(2).Cells(I, 2).Value = WuT
Workbooks(Datei).Sheets(2).Cells(I, 3).Value = InstT
Workbooks(Datei).Sheets(2).Cells(I, 4).Value = FBE
Workbooks(Datei).Sheets(2).Cells(I, 5).Value = PortID
RS.MoveNext
I = I + 1
Application.StatusBar = I
Loop
Conn.Close

End Sub


Grüße Stefan.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Datenbankzugriff mit ADO
15.11.2002 11:52:47
Michael Scheffler
Hallo Stefan,

kann es sein, dass die Hochkommata fehlen?

SQL = "SELECT * FROM Ports INNER JOIN Aufträge ON Ports.Port_ID = Aufträge.Port_ID"

Und dann würde ich sagen:
rs.Open SQL ?

Gruß

Micha

Re: Datenbankzugriff mit ADO
15.11.2002 11:57:34
GerdZ
Hallo Stefan,

das müßte mit RS.Fields("[Tabellenname].[Feldname]")
also RS.Fields("Ports.Nummer") funktionieren.
oder laß Dir mit

msg = ""
For x = 1 To RS.Fields.Count
msg = msg & x & " " & RS.Fields(x - 1).Name & vbCrLf
Next x
MsgBox msg

alle vorhandenen Namen anzeigen.

Gruß
Gerd

Antwort
15.11.2002 11:59:22
Stefan
Hi Micha,

ich habe den SQL-String doch in Gänsefüße eingefasst, somit ist
das Thema mit den Hochkommata schon erledigt. Wie meinst du das mit rs.open SQL? Anstatt Conn.Execute(SQL)?

Anzeige
Antwort an Gerd
15.11.2002 12:22:27
Stefan
Hi Gerd,

die Variante RS.Fields("Ports.Nummer") funktioniert leider nicht,
man kann nur den Feldnamen ansprechen. Die msg-Variante funktioniert so leider auch nicht, da ja der Feldname 2 x existiert, er meckert dann immer das doppelte Vorhandensein an.

Stefan.

Re: welche Version
15.11.2002 13:40:03
GerdZ
Welche ADO Version benutzt Du?
Welchen Treiber/Provider benutzt Du für den Datenzugriff?

Mit dem "Microsoft.Jet.OLEDB.4.0"-Provider und ADO 2.5 funktioniert der Zugriff auf eine Access 2000 Datei wie von mir beschrieben.

Habe die Lösung gefunden
15.11.2002 13:59:52
Stefan
Hi Gerd,

so funktionierts:

SQL = "SELECT Ports.Nummer as PortNummer, Aufträge.Bemerkungen as Bemerk, * FROM Ports

Im SQL String muss man dediziert den Feldnamen "Nummer" durch den Punkt der zu entnehmenden Tabelle zuweisen.

Stefan

Anzeige
Re: Antwort
15.11.2002 14:19:17
Michael Scheffler
Hallo,

die Tabellenname werden in Hochkommata gepackt

"SELECT * FROM 'Ports'..."

sonst funzt es nicht bei jedem Treiber und dann mach ich als erstes immer:
cnn.Execeute und dann rs.open

Gruß

Micha

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige