Access-o-Mania

Office-Forum => Microsoft Excel => Thema gestartet von: derilzemer am Juni 12, 2020, 17:30:01

Titel: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 12, 2020, 17:30:01
Hallo,
ich habe eine funktionale Access-DB mit rund 3000 Datensätzen. Die DB ist ziemlich umfangreich und ist für ein Sammlerhobby entworfen (Spielkarten).
Die DB hat eine Funktion, dass man einzelne Karten mit ihren Werten dokumentieren kann. Dies mache ich aber in Excel, weil es einfacher ist als wenn man das in Access das über das Userinterface mit vielen Klicken bewerkstelligen muss.
Bisher habe ich die Daten immer in eine Exceltabelle (3 Tabellenreiter, tblQuartette, tblQuKarten und tblKartenmerkmale) geklopft und dann nach einer bestimmten Menge die Tabellen in Access importiert (http://hc_031.jpg) (http://hc_032.jpg) (http://hc_033.jpg). Alte Tabelle in Access gelöscht, aktuelle Tabelle importiert. Man kann ja auch Datensätze importieren und an bestehender Tabelle "anfügen". Genau diese Funktion wäre mir eigentlich am liebsten. In Excel bereitet man die Daten vor und exportiert dann aus Excel die Datenzeilen in eine bestehende Tabelle in Access. Geht das überhaupt, oder muss man immer den Weg über Import in Access gehen? Wenn das geht, gibt es dafür schon definierte Funktionen in Form von Script oder ähnlichem, was man dann nur noch für seine eigenen Zwecke wie Pfad, Tabellenname etc. "anpassen" muss?

Vielen Dank vorab für die Info
Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 12, 2020, 18:34:16
Ordentliche Tabellen in Excel kann man auch in eine DB (temporär) verknüpfen. Dann könntest Du Dir mit Abfragen sehr viele Wünsche erfüllen, ob nun mit allen Datensätzen oder vielen bestimmten Datensätzen oder mit einzelnen Datensätzen.
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: Sebi am Juni 12, 2020, 20:23:17
Hallo,

Ja das geht. Egal ob dauerhaft oder temporär.
Du kämmst dir in Access auch ein Formular in Datenblattansicht erstellen und die Daten direkt eingeben.
An sich genau wie Excel.
Lieben Gruß
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 12, 2020, 21:51:47
Hi zusammen,
ich habe mir davor wohl nicht genug Gedanken bzw. habe das wohl was falsch gemacht.
Ich habe die Tabellen tblQuartette, tblQuKarten und tblKartenMerkmale in der Access DB mit dem Zusatz _old umbenannt, weil Access immer meckerte wenn ich verknüpfen wollte. Dann habe ich über das Kontextmenü zu den umbenannten Tabellen die externe Exceldatei (.xslm ... also mit Makros) mit den Tabellenblättern tblQuartette, tblQuKarten und tblKartenMerkmale verknüpft. Hat alles funktioniert und gut. Aber wenn ich die Verknüpfung mal lösen sollte, dann sind auch die Daten weg. Das ist ja nicht unbedingt was ich will. Ich will ja durch das verknüpfen nur eine "erleichterte" Dateneingabe. Ich kann in der xslm mit 2 Makros viele Sachen vordefinieren, deswegen "erleichtert".
Deshalb habe ich die Verknüpfung noch einmal aufgelöst und nun geht meine Excel mit dem Makro nicht mehr  :-\.
Es kommt immer die Meldung "Excel kann leider keine zwei Arbeitsmappen mit gleichem namen zugleich öffnen". Danach habe ich eine Sicherung der Datenbank wieder hergestellt, auch von der Exceldatei, aber die Meldung kommt weiterhin. Google ist zur Fehlermeldung wenig hilfreich, zumindest keine Lösungsansätze.
Was ist passiert, hat irgend jemand einen Rat?

Danke vorab und Gruß
Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: Sebi am Juni 12, 2020, 22:59:06
Hallo,
An sich versucht du wohl die Datei zu öffnen. Vermutlich per Makro.
Und wenn excel  2 mal die Datei mit identischem Namen öffnet kommt die Meldung.
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 12, 2020, 23:13:19
Zitatxslm

Damit ist klar, dass VBA eingesetzt werden kann. Da würde ich doch einen einfachen Zugriff auf die Datenbank per DAO empfehlen. ADODB geht natürlich auch.

=> Setzen Verweis auf Microsoft Office XX.0 Access Database Engine Object
Sub EinfachAnfuegen()
   Dim db As DAO.Database
   Dim sSQL As String

   Set db = OpenDatabase("X:\irgendwo\Deine.accdb")
   sSQL = "INSERT INTO TabelleX (Feld1, Feld2, Feld3)" & _
          " SELECT Spalte1, Spalte2, Spalte3 FROM" & _
          " [excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & ThisWorkbook.FullName & "].[Tabelle1$]"
   db.Execute sSQL, dbFailOnError
   MsgBox "Es wurden " db.RecordsAffected & " Datensätze angefügt."
   db.Close
   Set db = Nothing
   
End Sub


So, nun könnte man noch etwas mehr Entwicklerintelligenz in die SQL-Anweisung einfließen lassen. Es können auch mehrere Abfragen nacheinander ausgeführt werden.
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 13, 2020, 12:44:08
Hallo Eberhard,
der Verweis in Access sitzt schon, siehe Bild (http://hc_034.jpg).
Das bedeutet, ich lege in Excel je ein Makro an und teste mal (wie man das in einem machen könnte weiß ich nicht). Das würde dann so aussehen

Sub AnfuegenQuartette()
   Dim db As DAO.Database
   Dim sSQL As String

   Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb")
   sSQL = "INSERT INTO tblQuartette (QuartettID, SpielID_F, QuartettKz, QuartettBezeichnung)" & _
          " SELECT Spalte1, Spalte2, Spalte3, Spalte4 FROM" & _
          " [excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & ThisWorkbook.FullName & "].[tblQuartette$]"
   db.Execute sSQL, dbFailOnError
   MsgBox "Es wurden " db.RecordsAffected & " Datensätze angefügt."
   db.Close
   Set db = Nothing
   
End Sub

Sub AnfuegenQKarten()
   Dim db As DAO.Database
   Dim sSQL As String

   Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb")
   sSQL = "INSERT INTO tblQuartette (QuKartenID, QuartettID_F, KartenNr, Kartenbezeichnung, ModellTyp, Druckdatum, BildFlaggen)" & _
          " SELECT Spalte1, Spalte2, Spalte3, Spalte4, Spalte5, Spalte6, Spalte7 FROM" & _
          " [excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & ThisWorkbook.FullName & "].[tblQuKarten$]"
   db.Execute sSQL, dbFailOnError
   MsgBox "Es wurden " db.RecordsAffected & " Datensätze angefügt."
   db.Close
   Set db = Nothing
   
End Sub

Sub AnfuegenKartenMerkmale()
   Dim db As DAO.Database
   Dim sSQL As String

   Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb")
   sSQL = "INSERT INTO tblQuartette (KartenMerkmalID, QuKartenID_F, MerkmalID_F, Eintrag)" & _
          " SELECT Spalte1, Spalte2, Spalte3, Spalte4 FROM" & _
          " [excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & ThisWorkbook.FullName & "].[tblKartenMerkmale$]"
   db.Execute sSQL, dbFailOnError
   MsgBox "Es wurden " db.RecordsAffected & " Datensätze angefügt."
   db.Close
   Set db = Nothing
   
End Sub

Eberhard, werfe doch mal bitte einen prüfenden Blick darüber, da ich kein VBA Held bin :-[ .
Die Spalte1 (AutoWert) muss man ja auch unbefüllt/leer mitgeben, die setzt dann Access automatisch, oder? Setze ich die 3 Makros auf die jeweilige Tabelle oder auf DieseArbeitsmappe im VBA Editor? Egal wo ich das setze, es kommt ein Fehler beim Kompilieren von VBA Project.
Fehler beim kompilieren:
Benutzerdefinierter Typ nicht definiert und markiert dabei db As DAO.Database.

Dann bleibt noch eine Excelspezifische Frage zu Makros.
Nehmen wir an die Excel-Datei liegt auf dem Desktop. Nun integriere ich ein Makro, teste es und geht. Ich habe mir dazu zwei Makrobuttons in den Symbolleisten von Excel angelegt, siehe Bild (http://hc_035.jpg). Wenn ich die Datei nun an einen anderen Ort verschiebe, dann gehen die Buttons nimmer! Es reicht schon wenn ich die Datei umbenenne. Beim verschieben oder umbenennen kommt die Fehlermeldung Wir konnten C:\Users\linus\Desktop\tblQuKarten.xslm nicht finden. Wurde das Objekt vielleicht verschoben, umbenannt oder gelöscht?
Ich kann aber nirgendwo etwas finden, dass ich den Pfad anpassen kann oder so etwas. Nach dem verschieben an einen anderen Ort habe ich die Makros entfernt und wieder hinzugefügt, aber die Fehlermeldung bleibt dann die gleich. Was übersehe ich?
Gruß und Danke
Andreas

Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 13, 2020, 19:34:40
ZitatSetze ich die 3 Makros auf die jeweilige Tabelle oder auf DieseArbeitsmappe im VBA Editor?

Eigentlich in einem Standardmodul.

Mit ThisWorkbook.FullName erfolgt doch eine Referenzierung auf sich selber. Da dürfte es keine Probleme mit einer Dateiverschiebung geben. Es wird ja nur der vollständige Pfad ermittelt und eingesetzt. Ist denn der genannte richtig?
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 13, 2020, 20:18:40
Hallo Eberhard,
ich habe jetzt die 3 Makros in ein Standardmodul eingefügt. Weiterhin habe ich dann noch Verweise setzen müssen, um die Fehlermeldung wegen den benutzerdefinierten Typen weg zubekommen.
Jetzt erhalte ich aber beim kompilieren einen weiteren Syntaxfehler. Dabei springt er auf diese Zeile

[b][i] MsgBox "Es wurden " db.RecordsAffected & " Datensätze angefügt."[/i][/b]

Kannst du mir da noch mal unter die Arme greifen? Und auch noch die Frage, ob ich bei
" SELECT Spalte1, Spalte2, Spalte3, Spalte4, Spalte5, Spalte6, Spalte7 Spalte1 usw. lassen kann, oder ob ich die Spalten in der Excel benamen muss, um einen Bezug zu schaffen?

Wenn ich also einen Namen für die Spalte definiere, wie z.B. auch den Feldnamen in der Access-DB QuKartenID, müsste ich anstatt Spalte1 QuKartenID einsetzen, richtig?

Sorry wenn ich solche Fragen stell, aber ich bin nun mal nicht der Excel-Access Gott vor dem Herrn, auch wenn ich den Titel Access-Meister habe. Den bekommt man ja wohl, wenn man viele Beiträge hat.
Gruß Andreas


Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 13, 2020, 21:30:04
Frage 1: Da fehlt noch ein & bei der Stringzusammensetzung. Das sollte man aber womöglich alleine erkennen können.

Frage 2: Bei einer "ordentlichen" Tabelle geht man auch in Excel davon aus, dass es da Spaltennamen in der ersten Zeile gibt, idealerweise ohne Sonderzeichen.
Dann genügt aber die einfache Nennung bei der Zieltabelle und der Quelltabelle. Die Zuordnung erfolgt dann der Reihenfolge nach, die Namen müssen also nicht gleich sein.
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 13, 2020, 22:34:18
Hi,
danke für die Hinweise.

ZitatDa fehlt noch ein & bei der Stringzusammensetzung. Das sollte man aber womöglich alleine erkennen können.


Das soll jetzt nicht motzig sein, aber das ist wie mit meinem erlernten Beruf (Zimmermann). Wüsstest du jetzt, wie man einen Kehlsparren anreißt und ausarbeitet? Wenn du nicht vom Fach bist, dann eher nicht. Und genau deswegen wende ich mich an solch ein Forum, denn auch in meinem Beruf gibt es Gesellen, die solche Sachen nie lernen oder begreifen, dafür sind dann die Meister da.

Ich habe jetzt auf Verdacht hin irgendwo, wo es aus meienr Sicht Sinn macht ein & gesetzt und konnte danach auch kompilieren.
MsgBox "Es wurden " & db.RecordsAffected & " Datensätze angefügt."

Gruß Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 14, 2020, 11:14:27
Hallo Eberhard,
ich habe jetzt mal nach den Anpassungen einen ersten Test gemacht. Folgendes Makro habe ich zur Ausführung gebracht:

Sub AnfuegenQuartette()
   Dim db As DAO.Database
   Dim sSQL As String

   Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb")
   sSQL = "INSERT INTO tblQuartette (QuartettID, SpielID_F, QuartettKz, QuartettBezeichnung)" & _
          " SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _
          " [excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & ThisWorkbook.FullName & "].[tblQuartette$]"
   db.Execute sSQL, dbFailOnError
   MsgBox "Es wurden " & db.RecordsAffected & " Datensätze angefügt."
   db.Close
   Set db = Nothing
   
End Sub


Dabei trat folgender Fehler auf.
Laufzeitfehler '3061':
4 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.

Der Debug springt dann in im Makro in diese gelb markierte Zeile
db.Execute sSQL, dbFailOnError

Das ganze habe ich auch mit Spalte1, Spalte2 usw. versucht, Fehler bleibt gleich. Da es von 4 Parameter spricht, habe ich dann die Zeile
" SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _
mit den Spaltenüberschriften versehen.
" SELECT QuartettID, QuartettKz, SpielID_F, QuartettBezeichnung FROM" & _

Beim erneuten ausführen kommt dann
Laufzeitfehler '3071':
Dieser Ausdruck wurde falsch eingegeben, oder er ist zu komplex, um ausgewertet zu werden. Beispielsweise kann ein numerischer Ausdruck zu viele komplizierte Elemente enthalten. Vereinfachen sie den Ausdruck, indem sie Teile des Ausdrucks Variablen zuweisen.

Der Debug springt dann auch hier im Makro in diese gelb markierte Zeile
db.Execute sSQL, dbFailOnError

Der connect zur DB scheint ja zu klappen, aber ich weiß jetzt noch nicht mal was der eigentliche Fehler ist, die Bezeichnung der Spalten?

Ich habe auch mal die Excel mit den Makros als zip angehängt, da xlsx nicht akzeptiert wird.

Danke und Gruß
Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 14, 2020, 18:17:31
MsgBox: Das war nur Zierrat und könnte ebenso ersatzlos gestrichen werden. Bei einem richtigen Arbeiten stören Meldungen über Selbstverständlichkeiten  dann eher und sind nur Unterbrechungen.

Zitat4 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.

So etwas rührt z.B. von nichterkannten Bezeichnungen für Felder und Tabellen (Tippfehler, nicht zugreifbar) oder auch von Datentypfehlern bei der Zuordnung Quell- zu Zielfeld her. Zum Vergleich bräuchte man also auch die DB.
Zusätzlich kennt Excel selber keine Datentypen für ganze Spalten, SQL benötigt so etwas aber zwingend. Daher werden solche Datentypen nach ersten Inhalten interpretiert, was zu Überraschungen führen kann. Was dann bei einer total leeren Spalte passiert, liegt nicht in meinen Erfahrungen.

Nebenbei: Die hier gewählte Interaktion zwischen Excel und Access ist ein Stück außerhalb des üblichen Standards => selbstgewählte Erhöhung der Schwierigkeit. Das zu kombinieren mit dem Kokettieren mit eigenem (Noch)Nichtwissen ist ungünstig.

ZitatDer connect zur DB scheint ja zu klappen

Was wurde ausgeführt, damit dieser allgegenwärtige Fehler auf einmal klaglos verschwand?
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 14, 2020, 20:00:47
Hallo Eberhard,
danke für deine Analyse.
Dass ich gesagt habe, dass der connect an sich zur DB klappt, entnahm ich der Fehlermeldung, dass nur etwas an den Dateninfos wie SpalteA etc. der Excel nicht passt, also nur eine Annahme.

Wenn ich die Daten aus der Excel "markiere" und via copy und Paste in die Tabelle der Access-DB einfüge, dann geht das ohne weitere Probleme. Von daher ging ich die ganze Zeit davon aus, daß KEIN Problem bezüglich den Datentypen vorlag, sondern die Fehlermeldung schlicht und einfach darin liegt, dass beim select aus der Excel mit z.B Spalte1 oder SpalteA einfach "nur" den falsche Namen der Spalte nutze, dass dort eben der Hund begraben liegt.

Um die Fehlerfindung voranzutreiben, kann ich höchstens noch die Feldtypen mit ihrem Allgemeinen Einstellungen liefern, sowie die der Exceldatei.
Wenn das nicht ausreichen würde kann ich natürlich die Excel und eine leere DB zur Verfügung stellen um dem Fehler auf die schliche zu kommen. Ich selbst sehe mich da aktuell nicht mehr in der Lage den Fehler herauszufinden :-\
Welche Option wäre denkbar, in welcher du mich unterstützen könntest?

Gruß und Danke
Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 15, 2020, 09:43:59
"die Excel und eine ... DB" (mit vollständigen vorhandenen Tabellendefinitionen, Indizes, Beziehungen) mit einigen belastbaren wenigen Beispieldaten wäre natürlich schön, dass man selber sehen und probieren könnte statt sich Inhalte aus Erzählungen zusammenreimen zu müssen.

Daneben hätte ein solches "komplettes" Projekt auch einen Informations- und Nutzungswert für Dritte.
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 15, 2020, 17:14:22
Hallo Eberhard,
danke für dein Angebot.
Heute morgen habe ich noch mit meinem AK gesprochen, der Programmierer ist und er hat mich gebeten die Zeile
" SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _
mit
" SELECT * FROM" & _

zu ersetzen und zu testen. Und siehe da, ratzfatz waren die Daten in den DB-Tabellen drin. Zuerst dachte ich mit * legt das Makro auch viele neue "Felder" in der DB an. Aber da habe ich falsch gedacht, er legt genau die Daten aus den 4 Spalten an, nicht mehr und nicht weniger.
Im Gegensatz zum copy Daten Exceltabelle & paste in Tabelle Access-DB Verfahren muss man das Schlüsselfeld (Autowert) befüllen, sonst erzeugt Access eine Importfehler in der DB, auch wenn die Datensätze korrekt anlegt werden. Diesen "Mehraufwand" stört mich nicht die Bohne. Wenn die Boardmember und Experten jetzt nicht irgendein Argument liefern, dass diese Vorgehensweise als absolutes NoGo ist, dann würde ich das Problem für mich als gelöst markieren. Wie siehst du das?

Gruß Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 15, 2020, 18:17:23
Ich sehe das deutlich anders.

Ein Autowert heißt Autowert, weil sich das Feld selber füllt. Eine Zuweisung von außen ist da deutlich problematischer. Daneben werden Autowerte ja oft als Primärschlüssel verwendet und pflanzen sich über Beziehungen als Fremdschlüssel in anderen Tabellen fort. Das hat man per Zuweisung alles fehlerfrei im Griff?
Ein Autowertfeld lässt man also einfach aus der Auflistung heraus, oder aber wenn man zuweisen will, nimmt man doch eher ein normales Longfeld.

" SELECT * " ... heißt ja: Nimm alles. Auch das ist prinzipiell problematisch (auch wenn es im Augenblick passen kann).
Da bekommt man Probleme,
- wenn Quellfeld und Zielfeld nicht den gleichen Namen haben,
- wenn es unterschiedliche Anzahlen von Feldern gibt. Könnte ja sein, man hängt irgendwo mal eine Spalte an.

Nur mit Einzelnennung hat man eine gesicherte Feldzuordnung.

Daneben ist es eine Frage des Stils, der Funktionalität und der Performance, nur genau die Felder zu nehmen und diese folglich zu benennen, die man braucht.

Mit solch einer Schreibarbeit sparenden "Schlauheit" legt man sich faule Eier ins Nest. Kann sein, dass die dann "plötzlich und unerwartet" anfangen zu stinken, obwohl man doch "nichts" gemacht hat und immer alles funktioniert hat.
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 15, 2020, 21:35:53
Hallo Eberhard,
ich stimme in den Punkten, in welchen du interveniert hast zu, es ist Fehleranfällig, definitiv. Wegen dem Schlüsselwert muss man natürlich immer wie in meinem Fall 3 Tabellen abgleichen, das stimmt also dein Einwand. Wie gesagt, bei copy&paste kann man die Felder leer lassen und Access macht den Rest, ergo muss ich in der Spalte in Excel was definieren, dass Access das schnallt und keinen Importfehlerreport anlegt.
Ich werde morgen mit meinem Kollegen versuchen das genau herauszuarbeiten. Die select * Variante ist jetzt nur mal eine Möglichkeit, die ich in der Hinterhand habe, mehr nicht.
Fakt ist, dass man nicht allzuviel dazu findet, wie der korrekte Weg ist, außer heute ein "ergoogelter" Hinweis, dass man den select wohl so gestalten muss


" SELECT tblQuartette.columnA, tblQuartette.columnB, tblQuartette.columnC, tblQuartette.columnD FROM" & _

Bei Jeder Spalte muss der Name der Source Tabelle nochmal mit. Auch hier habe ich dann schon 3 Varianten durchgetestet, mit .SpalteA, .Spalte1, .A und eben das oben aufgeführte. Die Fehlermeldung blieb die gleiche. Die 4 übergebenen Parameter sind falsch  :-\. Das schauen wir uns morgen mal in einer freien Minute an und schauen mal nach dem korrekten Lösungsansatz. Ich werde es hier posten.

Gruß Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 15, 2020, 22:49:26
Hallo Eberhard,
gerade eben habe ich eine alte Expertise von dir gefunden zu genau meinem Thema.
https://www.ms-office-forum.net/forum/showthread.php?t=247467 (https://www.ms-office-forum.net/forum/showthread.php?t=247467)
https://www.ms-office-forum.net/forum/showthread.php?t=247042#7 (https://www.ms-office-forum.net/forum/showthread.php?t=247042#7)

Was ich gleich gesehen habe, dass es alles andere als einfach ist :).
Schau ich mir morgen mal genauer an.

Gruß Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 16, 2020, 17:40:07
Hallo Eberhard,
ich habe mal versucht, deinen Code für mich anzupassen und anzuwenden (1 Tabelle mit einer Autowert Spalte und einer "Datenspalte"). Spalte A hat in A1 ID und Spalte B in B1 Testdaten als Überschrift. Die Tabelle selbst ist in einer Arbeitsmappe mit mehreren Tabellen (6 insg.), die Tabelle selbst heiß tblTest. In Access habe ich eine Tabelle nach identischem Muster erstellt, tblTest, 2 Felder, Feld 1 ID, Feld 2 Testdaten. Diese Accesstabelle ist noch leer. Jetzt habe ich folgenden Code verwendet:


Sub InsertAccTab()

   ' Verweis auf Microsoft DAO 3.6 Object Library
   Dim db As DAO.Database
   Dim ws As Worksheet
   Dim i As Long
   Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb")
   Set ws = ActiveWorkbook.Worksheets("tblTest")
   
   ' Annahmen:
   ' 1) Exceltabelle hat Feldnamen
   ' 2) Spalte A enthält die Schlüsselnummer (Datentyp Zahl)
   ' 3) Spalte B enthält die anzufügenden Daten (Datentyp kurzer Text)
   For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
      If Len(ws.Cells(i, 2)) > 0 Then _
         [b]db.Execute "INSERT INTO tblTest (Testdaten) Values (" & ws.Cells(i, 2) & ")"[/b]
   Next

   db.Close
   Set db = Nothing
   Set ws = Nothing

End Sub


Ich bekomme beim Testen an der Fett markierten Zeile wieder den Fehler 3061 :(
1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben.

In der ExcelTabelle habe ich zum testen Zelle B2-B4 befüllt mit B2-->Test|B3-->Diamant|B4-->Pech. A2-A4 ist leer.
Ich kann mit der Fehlermeldung nichts anfangen, da ich der Meinung war/bin, dass ich ihm alles übergeben habe. Was mache ich falsch und wo kann ich mir zu solchen Fehlersituationen besseres Verständnis holen, nur durch "Programmiererfahrung"?

Gruß Andreas
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: ebs17 am Juni 16, 2020, 20:07:28
SQL ist eine andere Programmiersprache als VBA. Das muss man sich bewusst machen, auch wenn man SQL in VBA einbauen kann.

Bei der Zuweisung von Quelle zu Ziel müssen die Datentypen kompatibel sein. das hatten wir schon besprochen. Wenn die Werte allerdings nicht von einer SQL-Tabelle stammen, sondern von außen kommen (Variable, Excelzelle, Arrayfeld usw.), müssen diese zusätzlich datentypgerecht formatiert werden, damit sie sie akzeptiert werden. Texte sind bspw. in zusätzliche Gänsefüßchen (ersatzweise einfache Hochkommata) einzuschließen.
Zitatdb.Execute "INSERT INTO tblTest (Testdaten) Values ('" & ws.Cells(i, 2) & "')"

Grundlagen - SQL ist leicht (5) - Datentypbehandlung für VBA (https://www.ms-office-forum.net/forum/showthread.php?t=316953)
Titel: Re: Ist es mögliche bestimmte Zeilen aus Excel IN eine Access-DB zu exportieren?
Beitrag von: derilzemer am Juni 17, 2020, 18:40:06
Hallo Eberhard,
so funktioniert das jetzt aus unserer Sicht sauber. Danke für das immer wieder drauf hinweisen.
Gruß Andreas

Sub InsertAccTab()

    ' Verweis auf Microsoft DAO 3.6 Object Library
    Dim db As DAO.Database
    Dim ws As Worksheet
    Dim i As Long
    Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb")
    Set ws = ActiveWorkbook.Worksheets("tblTest")
   
   ' Annahmen:
   ' 1) Exceltabelle hat Feldnamen
   ' 2) Spalte A enthält die Schlüsselnummer (Datentyp Zahl)
   ' 3) Spalte B|C|D enthalten die anzufügenden Daten (Datentyp kurzer Text und Zahl)
    For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
            db.Execute "INSERT INTO tblTest (Material,Gewicht,Einheit) Values ('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "')"
    Next
       MsgBox "Es wurden Datensätze angefügt."

   db.Close
   Set db = Nothing
   Set ws = Nothing

End Sub