Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Aus Excel auf Access-Abfrage zugreifen

Aus Excel auf Access-Abfrage zugreifen
23.10.2007 16:05:46
Jean
Hallo,
in A4 ist der Wert 444 gespeichert.
Er entspricht dem Primärschlüssel eines Datensatzes in einer Access-Abfrage mit Namen qryAddress.
Dieser Datensatz soll aus der Access-Abfrage in Excel eingelesen werden.
Wie lässt sich dies lösen?
Gruß
Jean

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
23.10.2007 17:30:20
Luschi
Hallo Jean,
ich kann Dir mal ein Beispiel machen; ich verwende dazu ADODB/ADOX. Allerdings wäre es sinnvoll, wenn Du dazu eine kleine Demo-Access-Datei hier bereitstellst. Denn gerade bei DB-Zugriffen kommt es auf Genauigkleit an. In der Demo-Datei können unnsinnige Daten stehen, hauptsache die Tabellenstruktur kommt klar zu Ausdruck (Tabellenname, Datentyp [,Datenlänge]).
In diesem Beispiel ist dann auch die Möglichkeit gegeben, die Access-qryAddress-Abfrage von Excel aus zu steuern; d.h. die Bedingung neu festzulegen und in die Access-Abfrage zu schreiben.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
23.10.2007 20:30:01
Jean
Hallo Luschi,
schön, dass Du mir in dieser Sache helfen willst.
Die Daten in der Datenbank sind präzise festgelegt worden. Störungen sind bis dato nicht aufgetreten.
Das Datenfeld mit dem Primärschlüssel hat den Namen PNr, ist vom Datentyp Text und hat die Länge 3. Alle anderen Datenfelder sind vom Typ Text und haben die Länge 20.
Die Datenbank hat den Namen PERSONAL.MDB, der Tabellenname lautet tblPERSONAL, der der Abfrage qryADDRESS.
Ich denke, dass damit die Details genau beschrieben sind und hoffe, dass Du damit etwas anfangen kannst.
Gruß
Jean

AW: Aus Excel auf Access-Abfrage zugreifen
24.10.2007 06:16:34
Luschi
Hallo Jean,
mit diesen Angaben kann ich was anfangen und werde Dir ein Beispiel dazu machen. Komme aber erst heute Abend dazu, damit zu beginnen.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
25.10.2007 07:37:12
Luschi
Hallo Jean,
habe Dir das Beispiel erstellt. Nach dem Entpacken hast Du die Access- und Exceldatei. Beide Dateien müssen sich im gleichen Verzeichnis befinden.
https://www.herber.de/bbs/user/47076.zip
Gruß von Luschi
aus klein-Paris

AW: Aus Excel auf Access-Abfrage zugreifen
25.10.2007 09:09:00
Jean
Hallo Luschi,
herzlichen Dank für die viele Arbeit, die Du Dir mit meiner Frage gemacht hast.
Leider sitze ich heute an einem fremden Arbeitsplatz und habe so meine Zweifel ob die Office-Installation fehlerfrei ausgeführt wurde.
Jedenfalls kann es 2 oder 3 Gründe geben für einen Abbruch bei der Zeile
s = trim(CStr([PersNr]) im Sub Start()
Es ist eine Officeversion 2000 oder die Verweise sind nicht sauber gesetzt oder aber Office ist nicht voll installiert worden.
Morgen werde ich an einem Arbeitsplatz sitzen, der bisher beim Datenaustausch zwischen verschiedenen Anwendungsprogrammen keinen Ärger gemacht hat.
Nebenbei gefragt: Wie kann man denn den Austausch geöffnet halten. Ich befürchte, dass nach Ablauf einiger Tage der Thread geschlossen werden könnte.
Ich werde morgen testen können und habe dann bestimmt noch einige Verständnisfragen zu Deinem Programm. Nochmals vielen Dank. Einen guten Tag.
Gruß
Jean

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
25.10.2007 09:55:00
Luschi
Hallo Jean,
bei Anfragen zu einem späteren Zeitpunkt (dieser Thread ist dann sicher geschlossen und im Archiv verschwunden), einfach meinen Nick-Namen mit in der Betreff-Zeile schreiben.
Da ich regelmäßig hier vorbei schaue, werde ich Deinen Hilferuf schon finden.
Wenn die o.g. Befehlszeile Ärger macht, dann deutet daß immer darauf hin, daß entweder die Excel-Datei einen Schuß weg hat, oder aber die Office-Installation nicht mehr ganz sauber ist.
Aber auch Du kannst mir einen Gefallen tun. Teste das Ganze doch mal auf einem Rechner, wo garantiert kein Access installiert ist oder war . Ich bin mir überhaupt nicht sicher, ob ADODB/ADOX von Office allgemein oder erst durch die Access-Installation auf die PC-Kiste kommt. Überall, wo ich hinkomme, ist Access mit drauf, obwohl keiner das Programm benutzt.
Bin mal gespannt!
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
25.10.2007 10:37:00
Jean
Hallo Luschi,
vielen Dank für Deine mail.
Es tut mir leid, dass ich Dir in der Sache nicht helfen kann, denn auch ich arbeite nur an Rechnern auf denen Access standardmäßig installiert ist. Deine Erfahrung deckt sich mit meiner: Niemand arbeitet damit.
Merkwürdig.
Gruß
Jean

AW: Aus Excel auf Access-Abfrage zugreifen
26.10.2007 10:55:00
Jean
Hallo Luschi,
endlich bin ich dazu gekommen, Dein Programm zu testen.
Es funktioniert super. Tausend Dank, große Klasse.
So weit will ich mal kommen, das ist mein Wunsch.
Natürlich habe ich Fragen, um deren Beantwortung ich Dich bitten möchte:
Im Private Sub CheckBox1_Click() steht
If me.Check.box1.Value then
[PersNr].value = "alle"
Else
[PersNr].ClearContents
Endif
Welche Bedeutung hat das me. ?
Sinn dieses Programmteils soll sein, dass ein Kreuzchen zum Text alle in der Zelle B3 führt, die den Zellnamen PERSNR erhalten hat.
Für eine ganz kurze Antwort wäre ich Dir dankbar.
Luschi, ich finde Deine Lösung große Klasse und es liegt mir viel daran, das Programm auch im Detail zu verstehen. Es wäre schön, wenn Du weitere Fragen beantworten würdest.
Gruß
Jean

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
26.10.2007 17:04:00
Jean
Hallo Luschi,
Dein Programm fasziniert mich.
Einige Zeilen habe ich inzwischen mit weiteren Kommentaren ergänzt, aber wie nicht anders zu erwarten habe ich Fragen, um deren Beantwortung ich Dich bitte.
Das Sub Start() enthält eine Zeile mit trim und danach eine Zeile mit replace Leerzeichen durch Leerstring.
1. Weshalb zusätzlich replace?
2. Kannst Du kurz erläutern: ADODB und ADOX, catDB As New ADOX.Catalog,
vw As Object
3. Cnn.Open "Provider =Microsoft.Jet.OLEDB.4.0; Data Source = " & db_Path & db_MDB & ";"
4. Das Sub GetMoreSpeed macht im Moment noch das größte Problem. Ich versuche, dahinter zu kommen – vielleicht mit Deiner Hilfe?
Ein Riesendank für Deine bisherige Hilfe. Es macht richtig Spaß.
Gruß
Jean

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
26.10.2007 18:57:06
Luschi
Hallo Jean,
1. die Replace-Funktion löscht in diesem Fall sämtliche Leerzeichen, die der User in die Zelle mit dem Namen 'PersNr' mit eingegeben hat, egal an welcher Stelle es sich befindet. Und bei der Auswertung von Benutzereingaben muß man mit 'Allem' rechnen. (wie heißt es doch so schön: "Irrtum sprach der Igel - und sprang von der Drahtbürste")
2. ADODB ist eine definierte Zugriffsmethode, mit der man Daten aus einer Datenbank auslesen, aber auch inhaltlich verändern kann.
Mit ADOX kann die Struktur der Datenbank-Objekte verändert werden; Spalten in 1 Tabelle löschen / hinzufügen. Dazu besitzt jedes Objekt 1 Katalog, den man dazu verändern muß.
In Deinem Fall wird der SQL-Text der Access-Abfrage geändert, und deshalb müssen diese Objekt-Variablen definiert werden. In Access kann man 1 Abfrage mit dem Assistenten erstellen, im Hintergrund bastelt Access aber daraus 1 SQL-String, der beim Starten der Abfrage ausgewertet wird. So einen SQL-String erstellen wir in Excel-Vba und schreiben ihn direkt in die Access-Abfrage. Und dazu braucht man ADOX. Man könnte natürlich auch in Excel über 'Daten-externe Daten...' eine Excel-Abfrage an die Access-Datenbank schicken (auch dafür gibt es Vba-Befehle), aber sowas ist uncool und etwas für Leute, die sich nicht mit Vba auseinandersetzten wollen.
Wenn schon Excel-Access mit Vba, dann gleich die richtige Dröhnung und das volle Paket. Und Du siehst ja, die Anzahl der Programmzeilen hält sich in Grenzen.
Mit beiden Methoden kann man nicht nur Access anzapfen, sondern auch MS-SQL-Server, Oracle, Informix usw.
Für Excel-Vba und ADODB kannst Du hier mehr erfahren: http://support.microsoft.com/kb/257819
3. Um mit ADODB/ADOX auf 1 Datenbank zugreifen zu können, wird ein fest definierter Eröffnungs-String benötigt; wozu auch der Pfad und der Name der Datenbank gehört. In diesem Fall stehen beide Angaben in je 1 String-Variablen, die mit Hilfe der Verkettungs-Funktion '&' zusammengefügt werden.
4. Wenn in eine Excel-Zelle Werte geschrieben werden, egal ob per Hand oder mit Vba, dann reagiert Excel auf diese Eingabe mit Ereignis-Prozeduren. Wenn man Massendaten in die Exceltabellen schreibt, dann sollte man diese Ereignis-Prozeduren vorübergehend abschalten, um das Schreiben nicht zu verzögern, weil Excel mein, hier nach jeder Eingabe reagieren zu müssen.
Diese 3 'Stör'-Methoden habe ich in eine eigenständige Prozedur zusammengefaßt (GetMoreSpeed) und übergebe beim Aufruf jeweils einen Parameter:
True --> Methode einschalten (Excel darf wieder normal reagieren)
False --> Methode vorrübergehend abschalten
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
26.10.2007 19:23:00
Jean
Hallo Luschi,
Mann, ist das gut. Deine Hinweise helfen ungemein. Die Probleme werden plötzlich transparent.
Tausend Dank dafür.
Ich will jetzt in Ruhe darüber nachdenken und den Code weiter dokumentieren. Vielleicht stellen sich weitere Fragen, mal sehen, besser: mit hoher Wahrscheinlichkeit oder bestimmt.
Leider muss ich in der kommenden Woche ins Ausland. Ich würde mich sonst in jeder freien Minute wegen einer Vertiefung der noch recht bescheidenen Kenntnisse mit VBA beschäftigen. Es macht richtig Spaß.
Vielen Dank.
Ich wünsche Dir einen schönen Abend.
Gruß
Jean

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
26.10.2007 18:10:00
Luschi
Hallo Jean,
in der objektorientierten Programmierung besitzt jedes Objekt (hier die Steuerelemente in einem Formular) einen Verweis auf ihr gemeinsames Elternobjekt. Das 'Me' ist so ein Kurz-Verweis auf das Formular worin sich die Chexkbox befindet. Man kann das 'Me.' auch weglassen und trotzdem würde das Programm fehlerfrei laufen.
Es würde auch Folgendes ausreichen: If CheckBox1 Then
Jedes Steuerelement besitzt eine Standard-Eigenschaft; in diesem Fall ist es 'Value', also die Wert-Eigenschaft. Aber an dieser Stelle bin ich penible und schreibe die Eigenschaft auch hin, die ich meine - selbst wenn es die Standard-Eigenschaft ist. Eine Checkbox hat nur 2 Werte: Häckchen ist gesetzt --> True, sonst False (kein Häckchen). Man hätte die obere Zeile auch noch so schreiben können:
If Me.CheckBox1.Value = True Then
Der Zelle, in der der User den PersNr-Wert eingibt, habe ich den Namen 'PersNr' gegeben. Ist das Häckchen gesetzt, schreibt das Vba-Programm in diese Zelle den Wert 'alle' hinein, wird das Häckchen entfernt, das wird der Inhalt dieser Zelle gelöscht (dafür könnte man auch [PersNr].Value = "" schreiben).
Diese Zelle benutze ich als Filterkriterium. Steht das Wörtchen 'alle' darin, so werden alle Datensätze der Access-Tabelle ausgelesen, ansonsten wird nur der Datensatzt gesucht, der dem Inhalt dieser Zelle entspricht.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Aus Excel auf Access-Abfrage zugreifen
27.10.2007 12:26:01
Jean
Hallo Luschi,,
es gibt weitere Fragen zu Deinem Programm. Hast Du noch Lust und Geduld?
Ich will in keinem Fall nerven.
Frage 1:
s1 = ’’ where PNr = ’’’ & xPNr & ’’’’’
Ist dies eine Accessspezifische Zeile mit den vielen Hochkommata?
Rs.Open s2, cnn, cursortype:= adopenforwardonly, locktype:=adlockreadonly
es wird der Datensatz geöffnet?, der s2 entspricht?
Frage 2: aber was bedeutet der Rest ab cnn?
j = 2 ’Zeile 2 in Excel
k = rs.fields.count ’k erhält die Zahl der Datenfelder des Recordsets
Dann schreibt er alle Felder in Excelzellen quer in Zeile 2 ... bis next i
Soweit ist es klar, aber
.cells(j,1).copyfromrecordset Rs
Frage 3:
Am Sinn obiger Zeile rätsele ich heftig.
Ich meine, dass die Zeilen vorher, die Datenfelder des gefundenen Recordsets schon in die Zellen in Excel eingetragen haben. Täusche ich mich da? Weshalb also diese Zeile?
Für weitere Erläuterungen meinen besten Dank im Voraus.
Ein schönes Wochenende.
Gruß
Jean

AW: Aus Excel auf Access-Abfrage zugreifen
27.10.2007 17:49:00
Luschi
Hallo Jean,
zu 1)
Das ist die Bedingungsdefinition: obwohl xPNr eine Variable von Typ String (Text) ist und wir in einem Textfeld der Accesstabelle suchen, muß man den Inhalt der Variable als Text markieren.
So sieht der Suchstring dann in der Access-Abfrage aus:
SELECT * FROM tblPERSONAL WHERE tblPERSONAL.PNr = '135';
Wäre das Feld PNr als Zahl definiert worden, dann sähe die Befehlszeile so aus:
SELECT * FROM tblPERSONAL WHERE tblPERSONAL.PNr = 135;
Die restlichen Anführungsstriche sind Pflicht, da der Gesamtausdruck in 1 Stringvariable (s1) geschrieben wird.
zu 2)
'cursortype' und 'locktype' sind ADODB-typische Kennzeichen und bestimmen, was man mit dem Resordset (Rs) machen will:
cursortype:= adopenforwardonly --> die Datensätze in Rs können nur vorwärts durchlaufen werden
Normalerweise kann man vorwärts und rückwärts im Rs den Datensatzzeiger stellen, was aber den Resourcenverbrauch erhöht und die Geschwindigkeit verlangsamt
locktype:=adlockreadonly --> die Daten im Recordset sind schreibgeschützt und können nicht verändert werden
Beide Parameter zusammen in dieser Einstellung beschleunigen den Datenzugriff erheblich
zu 3. 'copyfromrecordset' ist eine Excel-Methode, um die Daten aus dem Recordset in die Excel-Tabelle zu schreiben. Man muß nur die Anfangszelle angeben (.cells(j,1) --> da j = 2 ist, ist es die Anfangszelle 'A2')
Dann schreibt Excel den Spallteninhalt des 1. Datensatzes nebeneinander in die Zellen und den nächsten Datensatzes eine Zeile tiefer bis zum letzten Datensatz.
Die Zeilen davor schreiben in Zeile 1 die Spaltenüberschriften der Accesstabelle!
Gruß von Luschi
aus klein-Paris

AW: Aus Excel auf Access-Abfrage zugreifen
27.10.2007 18:59:21
Jean
Hallo Luschi,
einfach superb! Vom Besten!
Deine Erklärungen zu – meinen derzeitigen Kenntnisstand absolut korrekt als Anfängerstadium beschreibend – recht komplizierten Sachverhalten sind leicht zu lesen und gut zu verstehen. Vielen Dank für Deine vielen Tipps, Deine zahlreichen Hilfen.
Ich bin sehr angetan von diesem Forum, aber ganz besonders von Deinen Beiträgen.
Ich habe viel gelernt und eine gut funktionierende Lösung dank Deiner Beiträge erhalten.
Tausend Dank für Dein Engagement.
Es ist nun eine sehr gute Basis für eigene Anstrengungen.
Sollten doch wider Erwarten Fragen auftreten, so greife ich gerne Dein Angebot auf und schreibe einen Beitrag mit dem Betreff @Luschi.
Ich wünsche Dir ein schönes Wochenende und danke Dir nochmals sehr herzlich.
Viele gute Grüße
Jean

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige