| |
VB & DatenbankenWord 2010 / VBA ADO Datentransport | | | Autor: BIERTESTER | Datum: 22.05.13 13:10 |
| Hallo zusammen,
ich versuchs mal in diesem Forum nochmal...
Bisher habe ich leider anderswo keine brauchbare Hilfe bekommenen.
Ich habe bisher DAO zum Füllen einer Listbox in Word aus MS Access benutzt. Musste jetzt umstellen auf ADO. Die Syntax ist wohl komplett anders....
Die Verbindung zur Datenbank steht und die Listbox im UFO Word wird auch mit Datensätzen aus der MDB befüllt.
Jetzt geht es darum, die zugehörigen Daten aus dem gewählten Eintrag der Listbox in die Textboxen 1- 4 zu transportieren. Beispiel > ausgewählter Ort Aachen fülle jetzt aus der Datenbank die passenden Werte PLZ, Ort, Strasse, HNR in die Textboxen 1 - 4
Dim ADO_CON1 As New ADODB.Connection
Dim ADO_BEHOERDEN As New ADODB.Recordset
ADO_CON1.Provider = " Microsoft.ACE.OLEDB.12.0"
ADO_CON1.Open ("Adressen.mdb")
With ADO_BEHOERDEN
.ActiveConnection = ADO_CON1
.Source = "Behoerdenadressen"
.Open
' PRÜFUNG FEHLER NOCH NACHENTWICKELN !!!
ADR_NAME = !Name
ADR_ORT = !ort
ADR_STRASSE = !Strasse ' nicht jede wegen eigener PLZ gefüllt
ADR_PLZ = !PLZ
ADR_BEZ = !Behoerdenbez
End With
Do Until ADO_BEHOERDEN.EOF
ADR_BEZ = ADO_BEHOERDEN.Fields("Behoerdenbez") _
Listbox1.AddItem ADR_BEZ
ADO_BEHOERDEN.MoveNext
Loop
' schließen der DB-Connection hier deaktiviert
End Sub
********************************************************
Private Sub ADRESSE_LADEN_Click()
'muss ich hier die ADO Connect neu aufbauen ??
With Listbox1
If .ListIndex >= 0 Then
MsgBox Listbox1.List(Listbox1.ListIndex)
TextBox1.Text = Listbox1.List(Listbox1.ListIndex) 'die Orte sind da
' und Auswahl funktioniert schon mal.
'TextBox2.Text = ' hier soll die passende PLZ zu Ort hin, wie geht _
es hier weiter ??
' usw für Textbox 3 und 4
End If
End With
End Sub Bastel hier schon sehr lange. Brauche wirklich einen Tipp.
Viele Danke schon mal vorab ...
Gruß
Biertester | |
Re: Word 2010 / VBA ADO Datentransport | | | Autor: Franki | Datum: 24.05.13 00:54 |
| Hallo,
wenn du eine Abfrage auf einen gezielten Wert möchtest, dann musst du dies per SQL-Statement auch dem Recordset mitteilen.
Beispiel:
Dim con As ADODB.Connection
Dim rec As ADODB.Recordset
Set con = New ADODB.Connection
With con
.CursorLocation = adUseClient
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source") = "Pfad zu deiner MDB"
.Open
End With
Sql = "Select * From Adressen Where Ort = 'Aachen' "
' Oder halt direkt den ausgewählten Wert des User aus der Listbox nehmen
Set rec = New ADODB.Recordset
rec.Open Sql, Frm_Haupt.con, adOpenKeyset, adLockReadOnly
While Not rec.EOF
Plz = rec.Fields("Postleitzahl")
' Oder auch direkt zuweisen in die Listbox
' Alle gewünschten Felder auslesen
rec.MoveNext
Wend
rec.Close
Set rec = Nothing Damit hast du alle Datensätze zu Aachen in der Spalte Ort.
Gruß
Frank
| |
Re: Word 2010 / VBA ADO Datentransport | | | Autor: BIERTESTER | Datum: 27.05.13 11:48 |
| Hallo Frank,
Danke für deine schnelle Rückmeldung !!!
Das sieht ja nun völlig ander aus, als der Zugriff mit DAO.
Funktioniert leider (noch) nicht, da bei mir die " Microsoft.Jet.OLEDB.4.0" nicht läuft. Kann die auch nicht registrieren.
Habe ein bischen gegoogelt und herausgefunden, das bei WIN7/ 64 bit und Word 2010 die Microsoft.ACE.OLEDB.12.0 zu verwenden ist.
Die habe ich als Verweis in der Version auch eingebunden:
Verweise auf
Microsoft ActiveX Data Objects 2.8
Microsoft ADO Extensibility 2.8
sind richtig gesetzt.
Siehe auch Ursprungscode ....Befüllen der Listbox, die ja auch funktioniert.
Der Debugger schreibt diese Zeile als fehlerhaft heraus:
rec.Open SQL, Frm_Haupt.con, adOpenKeyset, adLockReadOnly - Fehler Objekt erforderlich.
ich denke, der Code muss irgendwie werden ?
Kannst du mir nochmal behilflich sein ?
Schönen Gruß
| |
Re: Word 2010 / VBA ADO Datentransport | | | Autor: bfritz | Datum: 27.05.13 23:08 |
| Hallo BIERTESTER
Die in deinem Code verwendete Variable "SQL" ist in ACCESS ein "reserviertes Wort".
Ändere deine Variable auf den Namen zB. "strSQL"
rec.Open strSQL, Frm_Haupt.con, adOpenKeyset, adLockReadOnly LG bfritz | |
Re: Word 2010 / VBA ADO Datentransport | | | Autor: Franki | Datum: 30.05.13 07:45 |
| Hallo,
sorry, hatte das nur kurz kopiert und vergessen das Frm_Haupt da raus zu nehmen. Bei dem Programm wird im Hauptformular die Verbindung zur DB hergestellt bzw. geöffnet.
In den weiteren Formularen in denen auf die DB zugegriffen wird, wird die im Hauptformular geöffnete Connection verwendet, deswegen das Frm_Haupt. Du kannst das auch so schreiben.
rec.Open SQL, con, adOpenKeyset, adLockReadOnly
Ich hatte überlesen, dass du das innerhalb von ACCESS / VBA verwendest, deswegen bitte die andere Antwort auch beachten (strSQL).
Gruß
Frank | |
Re: Word 2010 / VBA ADO Datentransport | | | Autor: BIERTESTER | Datum: 31.05.13 11:18 |
| Hallo Frank hallo bFritz,
konnte das Problem nun mit einer Kombi aus beiden Rückmeldungen lösen. Die Syntax für den SQL-String war mir auch nicht so klar.
Habe insgesammt ein paar Stunden gefummelt aber auch wieder was gelernt.
Vielen Dank nochmal! In diesem Formum klappen die Rückmeldungen wirklich super !!
Hier nochmal für die Allgemeinheit der Code:
Die Aufgabenstellung war wie folgt:
In einer Word Listbox den Zugriff auf eine Access-DB per ADO reaslisieren, anschließend aus einer Vielzahl von eingestellten Adresen die benötigte auswählen und den gewählten Eintrag dann in Textboxen zur dortigen Weiterverarbeitung (Einstellen in Formualre etc.) anzeigen.
Private Sub ADRESS_DB_Click()
Dim ADO_CON1 As New ADODB.Connection
Dim ADOREC_DB As New ADODB.Recordset
ADO_CON1.Provider = " Microsoft.ACE.OLEDB.12.0" 'win7 /64bit
'hierzu je nach Windows Version folgende Verweise aktivieren
' MS ActiveX Libary 2.8
' MS ADO Ext. 2.8 for DLL
ADO_CON1.Open ("DATENBANK\Anschriften.mdb")
With REC_DB
.ActiveConnection = ADO_CON1
.Source = "Adressen"
.Open
' Fehler - PRÜFUNG NOCH NACHENTWICKELN !!!
ADR_NAME = !Name
ADR_ORT = !Ort
ADR_STRASSE = !Strasse ' nicht jede wegen eigener PLZ gefüllt
ADR_PLZ = !PLZ
ADR_BEZ = !Behoerdenbez
End With
Do Until ADOREC_DB .EOF
ADR_BEZ = ADOREC_DB .Fields("Behoerdenbez") _
Listbox1.AddItem ADR_BEZ
ADOREC_DB .MoveNext
Loop
'Aufräumen - Verbindungen trennen
ADOREC_DB .Close
Set ADOREC_DB = Nothing
End Sub
'##############################################################
Private Sub ADRESSE_LADEN_Click()
'Datenbank Connection
Dim con As ADODB.Connection
Dim rec As ADODB.Recordset
'#########################
'Eintrag LISTBOX auswerten
With Listbox1
If .ListIndex > -1 Then
markierterEintrag = .List(.ListIndex)
Else
MsgBox "es wurde nichts ausgewählt !!!"
End If
End With
'############################################
'Weiterverarbeitung - SQL Zugriff Datenbank
Set con = New ADODB.Connection
With con
.CursorLocation = adUseClient
.Provider = " Microsoft.ACE.OLEDB.12.0" ' win7 / 64 Bit !!
.Properties("Data Source") = "datenbank\Anschriften.mdb"
.Open
End With
strsql = "Select * From Behoerdenadressen Where Behoerdenbez = " & "'" & _
markierterEintrag & "'"
Set rec = New ADODB.Recordset
rec.Open strsql, con, adOpenKeyset, adLockReadOnly
While Not rec.EOF
VAR_NAME = rec.Fields("Name")
VAR_STR = rec.Fields("STRASSE")
VAR_PLZ = rec.Fields("PLZ")
VAR_ORT = rec.Fields("ORT")
TextBox3 = VAR_NAME
TextBox4 = VAR_STR
TextBox6 = VAR_PLZ & " " & VAR_ORT
rec.MoveNext
Wend
'Aufräumen - Verbindungen trennen
rec.Close
Set rec = Nothing
End Sub Sollte es noch Verbesserungen geben, nehme ich gerne Tipps entgegen.
Viele Grüße
Biertester | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|