Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: martenk am August 27, 2021, 08:24:18

Titel: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 08:24:18
Hallo Gemeinschaft,

Office 2016 hab ich

möchte mich gern mit dem Aktualisieren von Access Tabelle aus Word beschäftigen und habe folgendes Script gefunden, welches leider nicht läuft



bricht ab bei Application.cursor = xlWait

bekomme die Meldung Methode oder Datenobjekt nicht gefunden

Option Explicit
' ************************************************************************************************
' Autor/en: http://www.online-vba.de - Marc Wershoven
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von www.online-vba.de!
' Original-Quelltext: www.online-vba.de/vba_updatedbfield.php
' ************************************************************************************************

Sub MWDatenInAccessDBschreiben()
   Dim oADODBConnection As Object
   
   Dim oRecordSet As Object
   Dim sTableName As String
   Dim sFilterKlausel As String
   Dim sDataBaseFile, xlWait
   
     'Welcher Datensatz in welcher Tabelle?
     sTableName = "MeineTabelle"
     sFilterKlausel = "ID=1"
   
     'Datenbankdatei (hier Access DB)
     sDataBaseFile = "C:\Rechnung\Database7.accdb" 'wo liegt die Datei?
     If Trim(CStr(Dir(sDataBaseFile))) = "" Then
         MsgBox "Die Datenbank-Datei: " & sDataBaseFile & _
             " wurde nicht gefunden.", vbCritical + vbOKOnly, "FEHLER!"
         Exit Sub
     End If
   
     Application.cursor = xlWait
   
     'Verbindung zur Datenbank
     Set oADODBConnection = CreateObject("ADODB.Connection") 'LateBinding daher ohne Verweis
     With oADODBConnection
         .Provider = "Microsoft.ACE.OLEDB.12.0" 'für Access 2013
         .Properties("Persist Security Info") = "False"
         .Properties("Data Source") = sDataBaseFile
         .Open
     End With
   
     'RecordSet öffnen
     Set oRecordSet = CreateObject("ADODB.RecordSet") 'LateBinding daher ohne Verweis
     With oRecordSet
         .CursorLocation = 2 'adUseClient
         .CursorType = 2 'adOpenDynamic
         .LockType = 3 'adLockOptimistic
         .Open sTableName, oADODBConnection
         .Filter = sFilterKlausel 'Filter setzen, ID muss 1 sein!
     End With
   
     'Daten schreiben
     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1
         'Wertzuweisung: MeinFeld bekommt "Neuer Wert!"
         'Bei Zahlen entsprechend: oRecordSet.Fields("MeinFeld") = 12
         oRecordSet.Fields("MeinFeld") = "Neuer Wert!"
         'Speichern / Aktualisieren
         oRecordSet.Update
     End If
   
     'RecordSet schließen
     oRecordSet.Close
   
     'Datenbankverbindung schließen
     oADODBConnection.Close
       
     Application.cursor = xlDefault
   
     Set oRecordSet = Nothing
     Set oADODBConnection = Nothing
End Sub
Titel: Re: Frage zu einem Script
Beitrag von: ebs17 am August 27, 2021, 08:38:12
xlWait klingt nach Excel-Konstante. Die dürfte in Deiner Word-Konstellation unbekannt sein.
Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 08:39:23
okay - hab ich rausgenommen - bekomme es trotzdem nicht hin werte zu ändern in der Tabelle
Titel: Re: Frage zu einem Script
Beitrag von: DF6GL am August 27, 2021, 08:51:19
Hallo,

kommt denn nach der Änderung eine Fehlermeldung?

Stimmt der Feldname  ("MeinFeld")?
Stimmt der  Datentyp (Kurzer Text) in der Tabelle , wenn ein String ("Neuer Wert!") zugewiesen wird?



Zudem sollte der Provider so heißen:

.Provider = "Microsoft.ACE.OLEDB.16.0" 'für Access 2016

was aber hier keine große Rolle spielt.
Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 08:58:10
ja - stimmt alles
Titel: Re: Frage zu einem Script
Beitrag von: DF6GL am August 27, 2021, 09:10:55
Hallo,

Zitatkommt denn nach der Änderung eine Fehlermeldung?
?? ?? ??

Zusätzlich: Heißt das Primärschlüsselfeld "ID" und ist von Datentyp Long?


Zitatja - stimmt alles

offensichtlich nicht....

Der Code läuft bei bei angepassten Namen ohne Fehler.

Poste nochmal den aktuellen Code.


Setze einen Haltepunkt an den Code-Anfang und fahre mit Einzelschritt durch.
Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 09:32:35
Weiss nicht ganz geau wasdu meinst

Sub MWDatenInAccessDBschreiben()
   Dim oADODBConnection As Object
   
   Dim oRecordSet As Object
   Dim sTableName As String
   Dim sFilterKlausel As String
   Dim sDataBaseFile, xlWait
   Dim ID As Long

in Access
ID->autofeld
MeinFeld _> kurzer Text


wenn ich mit F8 durchklicke durch den Code, dann überspringt das Script hier
     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1


obwohl ID=1 existiert
Titel: Re: Frage zu einem Script
Beitrag von: DF6GL am August 27, 2021, 10:15:32
Hallo,


ZitatWeiss nicht ganz geau wasdu meinst

na, den ganzen aktuellen Code posten, nicht nur die paar Deklarationen...  ::)


Zitatdann überspringt das Script hier.   If Not oRecordSet.EOF Then ....

Dann hat er halt keinen DS gefunden....


Zeige mal den Screenshot der Tabellenansicht....

Oder lade mal die Access-Datei hier hoch, datenreduziert , komprimiert/repariert und gezippt.

Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 10:26:26
Option Explicit
' ************************************************************************************************
' Autor/en: http://www.online-vba.de - Marc Wershoven
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von www.online-vba.de!
' Original-Quelltext: www.online-vba.de/vba_updatedbfield.php
' ************************************************************************************************

Sub MWDatenInAccessDBschreiben()
   Dim oADODBConnection As Object
   
   Dim oRecordSet As Object
   Dim sTableName As String
   Dim sFilterKlausel As String
   Dim sDataBaseFile, xlWait
   Dim ID As Long
   
   
     'Welcher Datensatz in welcher Tabelle?
     sTableName = "MeineTabelle"
     sFilterKlausel = "ID=1"
   
     'Datenbankdatei (hier Access DB)
     sDataBaseFile = "C:\Rechnung\Database7.accdb" 'wo liegt die Datei?
     If Trim(CStr(Dir(sDataBaseFile))) = "" Then
         MsgBox "Die Datenbank-Datei: " & sDataBaseFile & _
             " wurde nicht gefunden.", vbCritical + vbOKOnly, "FEHLER!"
         Exit Sub
     End If
   
    ' Application.cursor = xlWait
   
     'Verbindung zur Datenbank
     Set oADODBConnection = CreateObject("ADODB.Connection") 'LateBinding daher ohne Verweis
     With oADODBConnection
         .Provider = "Microsoft.ACE.OLEDB.16.0" 'für Access 2013
         .Properties("Persist Security Info") = "False"
         .Properties("Data Source") = sDataBaseFile
         .Open
     End With
   
     'RecordSet öffnen
     Set oRecordSet = CreateObject("ADODB.RecordSet") 'LateBinding daher ohne Verweis
     With oRecordSet
         .CursorLocation = 2 'adUseClient
         .CursorType = 2 'adOpenDynamic
         .LockType = 3 'adLockOptimistic
         .Open sTableName, oADODBConnection
         .Filter = sFilterKlausel 'Filter setzen, ID muss 1 sein!
     End With
   
     'Daten schreiben
     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1
         'Wertzuweisung: MeinFeld bekommt "Neuer Wert!"
         'Bei Zahlen entsprechend: oRecordSet.Fields("MeinFeld") = 12
         oRecordSet.Fields("MeinFeld") = "Neuer Wert!"
         'Speichern / Aktualisieren
         oRecordSet.Update
     End If
   
     'RecordSet schließen
     oRecordSet.Close
   
     'Datenbankverbindung schließen
     oADODBConnection.Close
       
     'Application.cursor = xlDefault
   
     Set oRecordSet = Nothing
     Set oADODBConnection = Nothing
End Sub
Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 10:29:24
Datei (http://siren-supsurfing.com/Database7.zip)
Titel: Re: Frage zu einem Script
Beitrag von: DF6GL am August 27, 2021, 10:37:20
Hallo,

ich sagte: "hier hochladen" und keinen Hyperlink zu einer leeren Zip-Datei
Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 10:42:36
sorry - nun aber
Titel: Re: Frage zu einem Script
Beitrag von: DF6GL am August 27, 2021, 11:01:25
Hallo,


Zitatobwohl ID=1 existiert


stimmt wohl nicht.  Die Tabelle ist leer, ID =1 existiert nicht und somit macht der Code, war er machen muss...
Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 11:51:45
komisch - nun geht es

nun noch eine Frage -

ich möchte nun aus dem Worddokument einen Wert in die Tabelle tragen (Rechnungswert)

da innerhalb des Worddokuments aber mehr oder weniger viel Text kommt
Titel: Re: Frage zu einem Script
Beitrag von: DF6GL am August 27, 2021, 12:38:13
Hallo,


füge eine Textmarke ("Rechnungswert") an der Stelle ein, an der der Betrag steht.

Korrigiere den Code wie folgt:

     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1
         'Wertzuweisung: MeinFeld bekommt Rechnungswert
          oRecordSet.Fields("MeinFeld") = ActiveDocument.Bookmarks("Rechnungswert").Range.Text
         'Speichern / Aktualisieren
         oRecordSet.Update
     End If
Titel: Re: Frage zu einem Script
Beitrag von: martenk am August 27, 2021, 12:59:57
Hallo Franz,

lieben Dank klappt gut - eine andere Frage - ich wollte es eigentlich dafür haben um aus Access Rechnungsdaten an Word zu geben - dort die Rechnung schreiben zu lassen und dann den Rechnungswert wieder zurück schreiben zu lassen - oder lieber doch alles in access lassen - brauche nur in manchen Rechnung grössere Bereiche für Fliesstexte
Titel: Re: Frage zu einem Script
Beitrag von: DF6GL am August 27, 2021, 14:24:23
Hallo,

versteh ich nicht..

wo werden denn die Rechnungsdaten insgesamt generiert?

Wenn das in Access stattfindet, brauchst Du doch kein Word für einen Rechnungsausdruck und das Hin- und Herkopieren der Daten...


Zitatbrauche nur in manchen Rechnung grössere Bereiche für Fliesstexte

Das geht doch auch gut mit Access-Berichten und ohne Word-Geschichten.