vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
Word 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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ß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel