Wie SQL in VBA heraus ausführen

Hallo,

ich habe folgendes Problem.
Der Inhalt eines Wordformulares sol in einer Access DB gespeichert werden. Die DB besteht aus 4 Tabellen. Der Primärschlüssel aller 4 Tabellen ist die Auftragsnummer des Wordformulares.

Jetzt möchte ich, bevor Daten in die DB geschrieben werden, prüfen, ob ein Datansatz schon vorhanden ist.

Was ich nun suche ist eine SQL Anweisung, die

1.) die DB durchsucht. Als Suchstring soll die vom Anwender eingegebene Auftragsnummer dienen. Diese Nummer ist in der Variablen AUFTRAGSNUMMER gespeichert.

2.) den Anwender fragt, wenn ein Datensatz gefunden wurde, ob eben dieser Datensatz gelöscht werden soll. Wenn ja, soll der Datensatz über alle 4 Tabellen hinweg gelöscht werden.

Dies alles per ADO aus Word2003 VBA heraus.

Für Hilfe wäre ich sehr dankbar…komme nicht mehr vor und nicht zurück…

Gruß
Ralph

am besten stellst du in der Access-Datenbank die Löschweitergabe zwischen den Tabellen ein.

Und dann (im Prinzip)

Dim C as New Adodb.Connection, RS as New Adodb.Recordset

RS.Open ...

RS.Find "Auftragsnummer=" & Auftragsnummer
If RS.EOF then
 MsgBox "Nicht gefunden"
else
 If msgbox("Löschen?",vbQuestion+vbDefaultButton2+vbYesNo) = vbyes then
 C.Execute "DELETE FROM DeineTabelle WHERE Auftragsnummer = "& Auftragsnummer
 end if
end if

Gruß
Reinhard Kraasch

Also mit ADO kenne ich mich nicht aus, mache alles mit DAO

Von Word aus brauchst Du ein Access-Objekt:

Dim objAcc as Object
Set objAcc = GetObject(…wegen der Paramter mal im Internet recherchieren, habe ich nicht parat.

(EVentuell noch in Access die gewünschte DB mit OpenDatabase öffnen)

Dann ein Recordset (in Access geht das auch mit der DCnt-Funktion, aber ich weiss nicht, wie man das aus Word raus benutzt.

Dim recHelp as recordset
Dim strSQL as string

strSQL = „Select * From WHERE Auftragsnummer =“ & Auftragsnummer
set recHelp = objAcc.CurrentDb.OpenRecordset(strSQL, Dbopensnapshot)

If recHelp.RecordCnt = 1 Then
if msgbox(„Datensatz löschen“, vbYesno) = vbYesNo then
objAcc.CurrentDB.execute „Delete* From
WHERE Auftragsnummer =“ & Auftragsnummer
… das viermal mit unterschiedlichen Tabellennamen
End if
End if

So ähnlich müsste es gehen, habe ich nicht getestet.

Viel Erfolg

Ingo

http://www.ih-es.de

Hi Ingo,

danke für die schnelle Antwort. Ähnlich habe ich es schon von einem anderen User gesehen. Scheint bei mir nicht zu klappen, denn rec.Help.RecordCount ergibt bei mir immer die Anzahl der Datensätze komplett, die in der Tabelle der DB enthalten sind.

Gruß
Ralph

Hallo Reinhanrd,

danke für deine schnelle Hilfe :smile:

Mit einer paar Abwandlungen klappt es…bis auf eine Sache (erkläre ich gleich).
Hier erst mal mein Code:

strSQL = "DELETE * " & _
"FROM Absender, Bestellung, Adressat, Sonstiges " & _
"WHERE auftragsnummer2 = " & auftragsnummer(2) & „;“

mdbRecordset.Find „auftragsnummer2=“ & auftragsnummer(2)

If mdbRecordset.EOF Then
msgbox „Datensatz nicht vorhanden!“
Else
If msgbox(„Datensatz schon vorhanden! Löschen?“, vbQuestion + vbDefaultButton2 + vbYesNo) = vbYes Then
mdbCmd.ActiveConnection = mdbConnection
mdbCmd.CommandText = strSQL
mdbCmd.Execute
Else
msgbox „Sie möchten den Datensatz nicht löschen. Das Programm wird jetzt beendet“
mdbRecordset.Close
mdbConnection.Close
Exit Sub
End If
End If

So weit so gut. Es werden schon vorhandene Datensätze gefunden und ich kann die Wahl treffen, ob ich löschen will, oder nicht.

Probleme bereitet mir jetzt strSQL. In dem Moment, wo das Skript zu mdbCmd.Execute kommt erhalte ich die Fehlermeldung:

Laufzeitfehler '-2147467259 (80004005)
Geben Sie die Tabelle an, die die zu löschenden Datensätze enthält

Bin ich jetzt bind, dass mir der Fehler im Code nicht auffällt?

Gruß
Ralph

Hallo Ralph,

ich kann mit keiner Antwort dienen. Sorry

Gruß und viel Erfolg

Heiner

ich habe folgendes Problem.
Der Inhalt eines Wordformulares sol in einer Access DB
gespeichert werden. Die DB besteht aus 4 Tabellen. Der
Primärschlüssel aller 4 Tabellen ist die Auftragsnummer des
Wordformulares.

Jetzt möchte ich, bevor Daten in die DB geschrieben werden,
prüfen, ob ein Datansatz schon vorhanden ist.

Was ich nun suche ist eine SQL Anweisung, die

1.) die DB durchsucht. Als Suchstring soll die vom Anwender
eingegebene Auftragsnummer dienen. Diese Nummer ist in der
Variablen AUFTRAGSNUMMER gespeichert.

2.) den Anwender fragt, wenn ein Datensatz gefunden wurde, ob
eben dieser Datensatz gelöscht werden soll. Wenn ja, soll der
Datensatz über alle 4 Tabellen hinweg gelöscht werden.

Dies alles per ADO aus Word2003 VBA heraus.

Für Hilfe wäre ich sehr dankbar…komme nicht mehr vor und
nicht zurück…

Gruß
Ralph

Wie geschrieben: Am besten schaltest du die Löschweitergabe ein und löschst nur in der Mastertabelle.

Ansonsten müsstest du der Reihe nach in allen 4 Tabellen löschen:

C.Execute "DELETE FROM Absender WHERE auftragsnummer2 " & auftragsnummer(2) 
C.Execute "DELETE FROM Bestellung WHERE auftragsnummer2 " & auftragsnummer(2) 
C.Execute "DELETE FROM Adressat WHERE auftragsnummer2 " & auftragsnummer(2) 
C.Execute "DELETE FROM Sonstiges WHERE auftragsnummer2 " & auftragsnummer(2) 

Gruß
Reinhard Kraasch

Hallo Ralph,

im Grunde ist das meiste was du brauchst in diesem Forenbeitrag angegeben:

http://www.office-loesung.de/ftopic417626_0_0_asc.php

Als Zusatz müsstest du noch folgendes haben:

mdbRecordset.Open „SELECT * FROM tblTabname WHERE Auftragsnr=’“ & WordAuftragsnr & „’;“, _
mdbConnection, _
CursorType:=adopenKeyset, _
LockType:=adLockOptimistic

With mdbRecordset
if .RecordCount > 0 Then
.Delete adAffectCurrent
end if

Danach dann das Add als neuer Datensatz.
Sorry hab leider nicht mehr Zeit es schöner hin zu schreiben.

Gruß
Özhan

Hi Ingo,

danke für die schnelle Antwort. Ähnlich habe ich es schon von
einem anderen User gesehen. Scheint bei mir nicht zu klappen,
denn rec.Help.RecordCount ergibt bei mir immer die Anzahl der
Datensätze komplett, die in der Tabelle der DB enthalten sind.

Wenn die WHERE-Klausel richtig funktioniert die die besagte Nummer nur einmal in der Tabelle vorkommt, dann sollte recHelp maximal einen Datensatz zurückliefern, oder eben keinen, wenn die Nr in der Tabelle nicht vorkommt.

Ingo

Hallo Ralph,

Hilft das weiter?
Private Sub Demo()

Dim myOrderNumber As String 'ist die Nummer welcher der Kunde eingibt

myOrderNumber = „“
'alternativ kann man den Wert als Parameter übergeben lassen oder abfragen lassen
myOrderNumber = InputBox(„Auftragsnummer eingeben“, „Titel“, „“)

Dim myAdoDbCon As New ADODB.Connection
myAdoDbCon.Open „Provider=SQLXMLOLEDB.4.0;Data Provider=SQLNCLI10;Data Source=.\sql01;Initial Catalog=peer1;Trusted_Connection=yes“

‚jetzt die Abfrage mit Union verbinden. Am Ende willst du ja nur wissen ob ein Record vorhanden ist
Dim mySQL As String
mySQL = „SELECT Count(Auftragsnummer) FROM [Table1] WHERE feldAutragsnummer = variableAuftragsnummer“ & vbCrLf
mySQL = mySQL & „UNION“ & vbCrLf
mySQL = mySQL & „SELECT Count(Auftragsnummer) FROM [Table2] WHERE feldAutragsnummer = '“ & myOrderNumber & "‘" & vbCrLf
mySQL = mySQL & „UNION“ & vbCrLf
mySQL = mySQL & „SELECT Count(Auftragsnummer) FROM [Table3] WHERE feldAutragsnummer = '“ & myOrderNumber & „’“ & vbCrLf
mySQL = mySQL & „UNION“ & vbCrLf
mySQL = mySQL & „SELECT Count(Auftragsnummer) FROM [Table4] WHERE feldAutragsnummer = '“ & myOrderNumber & „’“ & vbCrLf


Dim myAdoDbRS As New ADODB.Recordset
myAdoDbRS.Open mySQL, myAdoDbCon, adOpenForwardOnly, adLockReadOnly

myAdoDbRS.MoveLast
If myAdoDbRS.RecordCount > 0 Then
‚gefunden
If MsgBox(„Soll der bestehende Auftrag " & myOrderNumber & " gelöscht werden?“, vbYesNo + vbDefaultButton2 + vbQuestion) = vbYes Then
‚löschen
mySQL = „Delete From [Table1] where feldAutragsnummer = '“ & myOrderNumber & "‘;"
mySQL = „Delete From [Table2] where feldAutragsnummer = '“ & myOrderNumber & "‘;"
mySQL = „Delete From [Table3] where feldAutragsnummer = '“ & myOrderNumber & „’;“
mySQL = „Delete From [Table4] where feldAutragsnummer = '“ & myOrderNumber & „’;“
'execute mysql to delete
End If
Else
'nichts gefunden
End If

End Sub

Hallo Özhan,

dieser Beitrag bei Office-Lösung.de war von mir :wink: Dort konnte mir bisher leider keiner Helfen. Danke dafür!

Gruß
Ralph

Hallo Ingo,
dann scheint die WHERE Anweisung bei nicht korrekt zu klappen. Warum auch immer!?!? Egal, welche bedingung ich an die WHERE Anweisung knüpfte. RecordCount ergab immer die Anzahl der komplett vorhandenen Datensätze.

Oder ich sehe den Wald vor lauter Bäumen nicht. *lol* Kann auch sehr gut möglich sein :wink:

Ich habe die Lösung aber jetzt fast geschafft. Dank der tollen Hilfe hier und im restlichen Web: DANKE!

Die Lösung werde ich hier posten und bei office-loesung.de

Gruß
und schönes WE
Ralph

Hallo Dirk,

danke für Deine Hilfe.

Den Code verstehe ich sogar, wo ich in Sachen SQL absoluter Änfänger bin.

Ich bin mit Eurer Hilfe jetzt auch fast am Ziel. Muss noch den einen oder anderen Probelauf machen. Sollte aber klappen.

Den Code werde ich dann auch mal Posten.

Gruß
und schöne WE
Ralph

Hallo Rainhard,

das mit der Löschweitergabe wusste ich nicht. Habemich da mal in der Access-Hilfe schlau gemacht…nette Sache.

Ich habe meine 4 Tabellen in eine entsprechende Beziehung zueinander gesetzt.

Jetzt meckert der Kompiler aber wieder…und ich dreh hier langsam am Rad *lol*
Und zwar meckert er bei erreichen von

mdbCmd.Execute

Die Fehlermeldung im Einzelnen:

Laufzeitfehler '-2147217913 (80040e07)
Datentypen in Kriterienausdruck unverträglich

Was immer das heißen mag. Habe schon kontrolliert, ob ich irgendwo einen Schreibfehler habe…nein.

Ich verstehe die Welt nicht mehr.

Gruß
Ralph

 '
 'Nach der Auftragsnummer(2) suchen
 '
 strSQL = "DELETE FROM Absender WHERE auftragsnummer2 = " & auftragsnummer(2)


 mdbRecordset.Find "auftragsnummer2 =" & auftragsnummer(2)

 If mdbRecordset.EOF Then
 msgbox "Datensatz nicht vorhanden!"
 Else
 If msgbox("Datensatz schon vorhanden! Löschen?", vbQuestion + vbDefaultButton2 + vbYesNo) = vbYes Then
 mdbCmd.ActiveConnection = mdbConnection
 mdbCmd.CommandText = strSQL
 mdbCmd.Execute
 Else
 msgbox "Sie möchten den Datensatz nicht löschen. Das Programm wird jetzt beendet"
 mdbRecordset.Close
 mdbConnection.Close
 Exit Sub
 End If
 End If

Hallo Reinhard,

habe den Fehler gefunden! Es funktioniert!

Der Fehler waren zwei einfache Hochkommata in strSQL :smile:

Hallo Ralph,

da hätte ich den Beitrag mal besser lesen sollen. Der war richtig gut geschrieben. Ich hoffe es hat jetzt geklappt.

Viele Grüße
Özhan

Hallo,

da ich selbst nicht mit ADO arbeite, hier schnell und einfach: http://www.schlotsoft.de/coder/vb/adozugriff.htm

Ich hoffe, es hilft!

Die einfachts lösung ist den primeriky schreibzuschützen und nur neue daten in die DB schreiben zu lassen.

Damit sparrt man sich alle komplizierten ansätze.

Ist das so aussreichend??

Ein Hallo an Alle :wink:

Ich habe das Problem mit zahlreicher Hilfe von Euch und anderen lösen können.
Hier also nun der Code:

Option Explicit
Public File As String
Public File\_Path As String
Public File\_Name\_mdb As String
Public File\_Extension As String
Public Rubrik As String

Public adressat(11) As String
Public absender(6) As String
Public auftragsnummer(2) As String
Public auftragsdatum As String
Public angebot As String
Public komm As String
 '
Public bestellung(21, 6) '20 Zeilen und 5 Spalten (Pos, Anzahl, Einheit, Beschreibung, Einzelpreis, Gesamtpreis)
 '
Public netto As String
Public mwst As String
Public brutto As String
Public rabatt As String
Public skonto As String
Public lieferadresse As String
Public rechnungsadresse As String
Public lieferzeit As String
Public mdbfeld As String
Public mdbCount As Integer
Public strSQL As String

'
'Verbindung und Datensätze einrichten
'
Public mdbConnection As New ADODB.Connection
Public mdbRecordset As New ADODB.Recordset
Public mdbCmd As New ADODB.Command

Sub datenübernahme()

'
'Interne Variablen deklarieren
'
Dim i As Integer 'Schleifenvariable
Dim k As Integer 'Schleifenvariable
Dim a As String 'Antwort-Variable für MsgBox'en

'
'Daten aus dem Auftragsformular zusammentragen
'

 '
 '1. Adressat
 '

 '
 'Auslesen des Adresskopfes
 'gleichzeitig werden die Steuerzeichen enfernt
 '
 With ActiveDocument.Tables(1)
 For i = 2 To 11
 adressat(i) = .Cell(i, 1).Range
 adressat(i) = Left(adressat(i), Len(adressat(i)) - 2)
 Next i
 End With

 '
 '2. Absender
 '

 '
 'Auslesen des Absenders
 '
 With ActiveDocument.Tables(2)
 absender(1) = .Cell(1, 1).Range
 absender(2) = .Cell(2, 1).Range
 absender(3) = .Cell(4, 2).Range
 absender(4) = .Cell(5, 2).Range
 absender(5) = .Cell(6, 2).Range
 absender(6) = .Cell(7, 2).Range
 End With

 '
 'Entfernen der Steuerzeichen
 '
 For i = 1 To 6
 absender(i) = Left(absender(i), Len(absender(i)) - 2)
 Next i

 '
 '3. Auftragsdatum
 '

 '
 'Auslesen des Datums
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 With ActiveDocument.Tables(3)
 auftragsdatum = .Cell(3, 6).Range
 auftragsdatum = Left(auftragsdatum, Len(auftragsdatum) - 2)


 '
 '4. Auftragsnummer
 '

 '
 'Auslesen der Auftragsnummer
 'gleichtzeitig werden die Steuerzeichen entfernt
 '
 auftragsnummer(1) = .Cell(3, 1).Range
 auftragsnummer(1) = Left(auftragsnummer(1), Len(auftragsnummer(1)) - 2)
 auftragsnummer(2) = .Cell(3, 2).Range
 auftragsnummer(2) = Left(auftragsnummer(2), Len(auftragsnummer(2)) - 2)
 auftragsnummer(2) = auftragsnummer(2) & Right(auftragsdatum, 4)
 End With
 '
 '5. Ihr Angebot vom/Nr.:
 '

 '
 'Auslesen der Zeile
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 With ActiveDocument.Tables(4)
 angebot = .Cell(1, 2).Range
 angebot = Left(angebot, Len(angebot) - 2)

 '
 '6. Komm.:
 '

 'Auslesen der Zeile
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 komm = .Cell(2, 2).Range
 komm = Left(komm, Len(komm) - 2)
 End With

 '
 '7. Bestellpositionen 1 bis 20
 '
 With ActiveDocument.Tables(5)
 For i = 2 To 21
 For k = 1 To 6
 bestellung(i, k) = .Cell(i, k).Range
 bestellung(i, k) = Left(bestellung(i, k), Len(bestellung(i, k)) - 2)
 Next k
 Next i
 End With


 '
 '8. Netto, MwSt. und Brutto
 '

 '
 'Auslesen der Beträge
 '
 With ActiveDocument.Tables(5)
 netto = .Cell(22, 3).Range
 mwst = .Cell(23, 3).Range
 brutto = .Cell(24, 3).Range
 End With

 '
 'Bereinigen der Variablen um die Steuerzeichen
 '
 netto = Left(netto, Len(netto) - 2)
 mwst = Left(mwst, Len(mwst) - 2)
 brutto = Left(brutto, Len(brutto) - 2)

 '
 '9. Mengen / Sonderrabatt:
 '

 '
 'Auslesen des Rabatts
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 With ActiveDocument.Tables(6)
 rabatt = .Cell(1, 2).Range
 rabatt = Left(rabatt, Len(rabatt) - 2)
 End With
 '
 '10. Skonto
 '

 '
 'Auslesen des Skonto
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 With ActiveDocument.Tables(7)
 skonto = .Cell(1, 2).Range
 skonto = Left(skonto, Len(skonto) - 2)
 End With


 '
 '11. Anlieferungs / Arbeitsstelle:
 '

 '
 'Auslesen der Lieferadresse
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 With ActiveDocument.Tables(8)
 lieferadresse = .Cell(1, 2).Range
 lieferadresse = Left(lieferadresse, Len(lieferadresse) - 2)
 End With

 '
 '12. Rechnungsadresse:
 '

 '
 'Auslesen der Rechnungsadresse
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 With ActiveDocument.Tables(9)
 rechnungsadresse = .Cell(1, 2).Range
 rechnungsadresse = Left(rechnungsadresse, Len(rechnungsadresse) - 2)
 End With

 '
 '13. Lieferzeit:
 '

 '
 'Auslesen der Lieferzeit
 'gleichzeitig werden die Steuerzeichen entfernt
 '
 With ActiveDocument.Tables(10)
 lieferzeit = .Cell(1, 2).Range
 lieferzeit = Left(lieferzeit, Len(lieferzeit) - 2)
 End With

'#######################################################################################
'#######################################################################################


'
'Übergabe der Daten an Access
'

 '
 'Verzeichnisse, Pfade und Dateinamen festlegen
 '
 File\_Path = "[Verzeichnis]"
 File\_Name\_mdb = "auftrags\_statistik"
 File\_Extension = ".mdb"
 File = File\_Path & File\_Name\_mdb & File\_Extension

 '
 'Festellen, ob die Datenbank vorhanden ist.
 '
 If Dir(File) = "" Then
 msgbox ("Die Statistikdatei " & Chr(10) & Chr(10) & File & Chr(10) & Chr(10) & "ist nicht vorhanden!")
 End If

 '
 'Verbindung zur Datenbank herstellen
 '
 mdbConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & \_
 "Data Source= " & File

'
'Prüfen, ob ein Datensatz mit der aktuellen Auftragsnummer(2) vorhanden ist.
'Wenn ja, wird dieser Datensatz gelöscht und neu geschrieben
'

 '
 'Tabelle ABSENDER (Haupttabelle der Löschweitergabe) ansprechen
 '
 mdbRecordset.Open "Absender", \_
 mdbConnection, \_
 CursorType:=adopenKeyset, \_
 LockType:=adLockOptimistic

 '
 'Nach der Auftragsnummer(2) suchen
 '
 strSQL = "DELETE FROM Absender WHERE auftragsnummer2 = " & "'" & auftragsnummer(2) & "'" & ";"


 mdbRecordset.Find "auftragsnummer2 =" & auftragsnummer(2)

 If mdbRecordset.EOF Then
 'msgbox "Datensatz nicht vorhanden!"
 Else
 If msgbox("Datensatz schon vorhanden! Löschen?", vbQuestion + vbDefaultButton2 + vbYesNo) = vbYes Then
 mdbCmd.ActiveConnection = mdbConnection
 mdbCmd.CommandText = strSQL
 mdbCmd.Execute
 Else
 msgbox "Sie möchten den Datensatz nicht löschen. Das Programm wird jetzt beendet"
 mdbRecordset.Close
 mdbConnection.Close
 Exit Sub
 End If
 End If

 '
 'Tabelle Absender schließen
 '
 mdbRecordset.Close


'
'Datenübergabe starten
'

 '
 'Tabelle ABSENDER ansprechen
 '
 mdbRecordset.Open "Absender", \_
 mdbConnection, \_
 CursorType:=adopenKeyset, \_
 LockType:=adLockOptimistic

 '
 'Daten übertragen
 '
 With mdbRecordset
 .AddNew
 .Fields("auftragsnummer2") = auftragsnummer(2)
 .Fields("absender1") = absender(1)
 .Fields("absender2") = absender(2)
 .Fields("absender3") = absender(3)
 .Fields("absender4") = absender(4)
 .Fields("absender5") = absender(5)
 .Fields("absender6") = absender(6)
 .Update
 End With

 '
 'Tabelle ABSENDER schließen
 '
 mdbRecordset.Close

 '
 'Tabelle ADRESSAT ansprechen
 '
 mdbRecordset.Open "Adressat", \_
 mdbConnection, \_
 CursorType:=adopenKeyset, \_
 LockType:=adLockOptimistic

 '
 'Daten übertragen
 '
 With mdbRecordset
 .AddNew
 .Fields("auftragsnummer2") = auftragsnummer(2)
 .Fields("adressat2") = adressat(2)
 .Fields("adressat3") = adressat(3)
 .Fields("adressat4") = adressat(4)
 .Fields("adressat5") = adressat(5)
 .Fields("adressat6") = adressat(6)
 .Fields("adressat7") = adressat(7)
 .Fields("adressat8") = adressat(8)
 .Fields("adressat9") = adressat(9)
 .Fields("adressat10") = adressat(10)
 .Update
 End With

 '
 'Tabelle ADRESSAT schließen
 '
 mdbRecordset.Close

 '
 'Tabelle SONSTIGES ansprechen
 '
 mdbRecordset.Open "Sonstiges", \_
 mdbConnection, \_
 CursorType:=adopenKeyset, \_
 LockType:=adLockOptimistic

 '
 'Datenübertragen
 '
 With mdbRecordset
 .AddNew
 .Fields("auftragsnummer1") = auftragsnummer(1)
 .Fields("auftragsnummer2") = auftragsnummer(2)
 .Fields("auftragsdatum") = auftragsdatum
 .Fields("angebot") = angebot
 .Fields("komm") = komm
 .Fields("rabatt") = rabatt
 .Fields("skonto") = skonto
 .Fields("netto") = netto
 .Fields("mwst") = mwst
 .Fields("brutto") = brutto
 .Fields("lieferadresse") = lieferadresse
 .Fields("rechnungsadresse") = rechnungsadresse
 .Fields("lieferzeit") = lieferzeit
 .Fields("datei") = File\_Name\_doc
 .Update
 End With

 '
 'Tabelle SONSTIGES schließen
 '
 mdbRecordset.Close

 '
 'Tabelle BESTELLUNG ansprechen
 '
 mdbRecordset.Open "Bestellung", \_
 mdbConnection, \_
 CursorType:=adopenKeyset, \_
 LockType:=adLockOptimistic

 '
 'Daten übertragen
 '
 With mdbRecordset
 .AddNew
 .Fields("auftragsnummer2") = auftragsnummer(2)
 For i = 2 To 21
 For k = 1 To 6
 mdbfeld = "bestellung" & i - 1 & k
 .Fields(mdbfeld) = bestellung(i, k)
 Next k
 Next i
 .Update
 End With


 '
 'Tabelle BESTELLUNG schließen
 '
 mdbRecordset.Close

'
'Verbindung zur Datenbank schließen
'
 mdbConnection.Close




End Sub

Bedienen darf sich jeder an diesem Code :wink:

Gruß
Ralph

Na das ist ja eine Hih End Lösung Supper!!