MS ACCESS]Marko für Abfrage mit Parameterübergabe

Hallo,
ich habe mir ein Makro erstellt zum Export einer Abfrage.
Diese Abfrage beinhaltet mehrere Personen-IDs.
Nun würde ich gerne zu jeder Person die Daten einzeln exportieren.
Klar könnte ich jetzt hingehen und pro Person eine Abfrage machen. Eleganter wäre aber wenn ich im Makro einen Parameter mitgeben könnte, der bestimmt welche Personendaten exportiert werden.

Geht das? Wenn ja, wie?

rätselnde Grüße

Marcel

P.S.
MS Access 2003
Win XP prof.

Mahlzeit,

Klar könnte ich jetzt hingehen und pro Person eine Abfrage
machen. Eleganter wäre aber wenn ich im Makro einen Parameter
mitgeben könnte, der bestimmt welche Personendaten exportiert
werden.

öh - wieso im Makro? Definiere deine Abfrage so, daß sie nach deiner ID fragt. Das Makro kannst du dann unverändert lassen:

SELECT ID, FeldA, FeldB, FeldC, ... FeldX
 FROM MeineTabelle
 WHERE ID = [MeinParameter]

Gruß

Sancho

Moin Sancho,
ich weiß nicht ob ich das so richtig verstehen,
wo muss ich den SQL-Code eingeben? Und wie mache ich dann den Export? Läuft der weiterhin über ein Makro?

Gruß und bedankt
Marcel

öh - wieso im Makro? Definiere deine Abfrage so, daß sie nach
deiner ID fragt. Das Makro kannst du dann unverändert
lassen:

SELECT ID, FeldA, FeldB, FeldC, … FeldX
FROM MeineTabelle
WHERE ID = [MeinParameter]

Gruß

Sancho

Mahlzeit.

Moin Sancho,
ich weiß nicht ob ich das so richtig verstehen,
wo muss ich den SQL-Code eingeben? Und wie mache ich dann den
Export? Läuft der weiterhin über ein Makro?

Der SQL-Code wird an folgender Stelle eingegeben.
Abfrage im Entwurfsmodus öffnen, dann auf Menü Ansicht - SQL.
In der SQL-Ansicht kannst du dann dein SQL-Statement (welches in der Entwurfsansicht lediglich benutzerfreundlich dargestellt wird!) verändern und bearbeiten.
Das Makro sollte dann weiterhin laufen, da die Aktionen nicht verändert wurden.

BTW würde ich für generell für solche Dinge (wie hier Export!) von Makros abraten, da die Fehlerbehandlung bei Makros nur sehr gering bis gar nicht vorhanden ist. Besser wäre, das Makro in VBA-Code umzuwandeln (geht mit dem eingebauten Assistenten!) und anschliessend anstelle des Makros die VBA-Routine zu verwenden.

CU, Jan

Hallo Jan,
vielen Dank für deine Antwort, das habe ich soweit begriffen, habe nun auch das Makro in VBA umgewandelt und bekomme für den Export folgende Zeile:

DoCmd.TransferText acImportDelim, "export", "qry\_eigen", "", False, ""

Nun ist aber das Ziel nicht nur die Daten meiner MA_Nummer zu exportieren, sondern die Daten aller Mitarbeiter, aber in eine seperate Datei.
Also müsste ich jetzt das Makro für jeden Mitarbeiter ausführen, und die MA_Nummer für das SQL-Statement

SELECT tbl\_eigen.ma\_id, tbl\_eigen.Datum, tbl\_eigen.Kundennummer, 0 AS Erstberater, tbl\_eigen.BMG, tbl\_eigen.LKZ, tbl\_eigen.Jahr, tbl\_eigen.Monat
FROM tbl\_eigen
WHERE (((tbl\_eigen.ma\_id)=[MA\_Nummer]));

über VBA mitgeben, geht das? Oder hab ich das bei Sanchos Post nur falsch verstanden?

Gruß Marcel

Der SQL-Code wird an folgender Stelle eingegeben.
Abfrage im Entwurfsmodus öffnen, dann auf Menü Ansicht - SQL.
In der SQL-Ansicht kannst du dann dein SQL-Statement (welches
in der Entwurfsansicht lediglich benutzerfreundlich
dargestellt wird!) verändern und bearbeiten.
Das Makro sollte dann weiterhin laufen, da die Aktionen nicht
verändert wurden.

BTW würde ich für generell für solche Dinge (wie hier Export!)
von Makros abraten, da die Fehlerbehandlung bei Makros nur
sehr gering bis gar nicht vorhanden ist. Besser wäre, das
Makro in VBA-Code umzuwandeln (geht mit dem eingebauten
Assistenten!) und anschliessend anstelle des Makros die
VBA-Routine zu verwenden.

CU, Jan

Korrektur - Makro
Sorry, hat sich ein kleiner Fehler eingeschlichen,
das konvertierte VBA-Makro sieht wie folgt aus:

DoCmd.TransferText acExportDelim, "export", "qry\_eigen", "j:\test.txt", False, ""

Gruß Marcel

Mahlzeit,

Nun ist aber das Ziel nicht nur die Daten meiner MA_Nummer zu
exportieren, sondern die Daten aller Mitarbeiter, aber in eine
seperate Datei.

und warum sagst du das nicht gleich?

Also müsste ich jetzt das Makro für jeden Mitarbeiter
ausführen, und die MA_Nummer für das SQL-Statement

Im Prinzip ja, aber warum tippen, wenn die Datenbank dir die Arbeit abnehmen kann? Die MA_Nummer ist ja jeweils vorhanden.

Was du brauchst, ist eine Schleife über alle MA_ID, in etwa so:

Dim rs as DAO.Recodrset

Set rs = docmd.Openrecordset("select distinct ma\_id from tbl\_eigen")
rst.moveFirst
do while not rst.eof
 If rst!Results is not null Then
 MA\_Nummer = rst.MA\_ID
 DoCmd.TransferText acExportDelim, "export", "qry\_eigen", "j:\test\_" & MA\_Nummer & ".txt", False, ""
 End If
Loop

Die Definition der Abfrage bleibt unverändert.

Gruß

Sancho

Moin Sancho,

und warum sagst du das nicht gleich?

Weil im ersten Post stand:

Nun würde ich gerne zu jeder Person die Daten einzeln exportieren.
Klar könnte ich jetzt hingehen und pro Person eine Abfrage machen.

Sollte ich mich da undeutlich ausgedrückt haben, entschuldige bitte aber dass war damit gemeint :wink:

Was du brauchst, ist eine Schleife über alle MA_ID

OK, sowas in der Art hab ich mir gedacht.
Leider funktioniert dein Beispiel nicht so ganz, der meldet bei

Dim rs as DAO.Recodrset

–> Benutzerdefinierter Typ nicht definiert

Testweise habe ich es mal für nur einen Mitarbeiter versucht, so könnte ich das auch mit einer for-Schleife lösen

MA\_Nummer = 1
DoCmd.TransferText acExportDelim, "export", "qry\_eigen", "j:\test\_" & MA\_Nummer & ".txt", False, ""

Leider kommmt aber auch hier immer wieder die manuelle Aufforderung zur Eingabe der MA_Nummer. Ich müsste also ne Möglichkeit haben die Aufforderung zu Unterdrücken, ist das Überhaupt möglich?
Oder nehme ich mir da einfach zu viel für zu wenig Wissen vor?

Danke nochmals

Marcel

Moin,

Dim rs as DAO.Recodrset

–> Benutzerdefinierter Typ nicht definiert

VBA-Editor öffnen (also irgendein Modul oder eine Prozedur im Form…)
dann Menü Extras - Verweise und den Verweis auf Microsoft DAO3.6 aktivieren…

Testweise habe ich es mal für nur einen Mitarbeiter versucht,
so könnte ich das auch mit einer for-Schleife
lösen

MA_Nummer = 1
DoCmd.TransferText acExportDelim, „export“, „qry_eigen“,
„j:\test_“ & MA_Nummer & „.txt“, False, „“

Leider kommmt aber auch hier immer wieder die manuelle
Aufforderung zur Eingabe der MA_Nummer. Ich müsste also ne
Möglichkeit haben die Aufforderung zu Unterdrücken, ist das
Überhaupt möglich?

Du hast deine Abfrage qry_eigen wahrscheinlich als Parameterabfrage eingerichtet. Da ist ein Kriterium nicht eindeutig, weshalb Access diese Kriterium als Parameter von dir erwartet.

aber mit dem aktivierten Verweis sollte das Beispiel von oben auch funzen.

Hi Jan,
leider immer noch nicht, also

VBA-Editor öffnen (also irgendein Modul oder eine Prozedur im
Form…)
dann Menü Extras - Verweise und den Verweis auf Microsoft
DAO3.6 aktivieren…

ist aktiviert, hab’s auch nochmal deaktiviert und erneut aktiviert, bringt aber leider nichts.

Du hast deine Abfrage qry_eigen wahrscheinlich als
Parameterabfrage eingerichtet. Da ist ein Kriterium nicht
eindeutig, weshalb Access diese Kriterium als Parameter von
dir erwartet.

Richtig, also ich habe in der Entwurfsansicht den Parameter [MA_Nummer] eingegeben. Habe dann in der SQL-Ansicht [MA_Nummer] geändert in MA_Nummer

Naja, vielleicht hast du ja noch ne Idee, ansonsten muss ich mir mal was anderes überlegen.

Nochmals Danke für deine Mühe und schöne Ostertage

Gruß

Marcel

Mahlzeit,

ist aktiviert, hab’s auch nochmal deaktiviert und erneut
aktiviert, bringt aber leider nichts.

nun ja, du hast zuwenig Infos gegeben, mit welcher Access-Version du arbeitest. Meine Lösung setzt das DAO-Datenzugriffsobjekt voraus. Aber das ist relativ unwichtig; schau in deiner Access-Hilfe nach, über welchen Mechanismus du einen Zugriff auf Datensätze aus VBA realsisieren kannst. Das wird meist ein RecordSet-Objekt sein (such in der Hilfe danach), und da wird ein kleines Codeschnipsel zur Erläuterung zu finden sein.

Richtig, also ich habe in der Entwurfsansicht den Parameter
[MA_Nummer] eingegeben. Habe dann in der SQL-Ansicht
[MA_Nummer] geändert in MA_Nummer

Das müßte eigentlich so gehen. Wie dem auch sei, du kannst das dadurch umgehen, daß du auf ein Formularfeld zurückgreifst (deine Prozedur wirst du ja sicherlich aus einem Formular per Aktionsknopf o.Ä. auslösen). Die Abfrage enthält dann in der WHERE-Klausel dann nicht den Parameter MA_Nummer, sondern das Formularfeld forms!Mein_Formular!Mein_Eingabefeld
Wichtig ist dann natürlich, in der Schleife nicht die Variable MA_Nummer zu aktualisieren, sondern das Feld:

forms!Mein\_Formular!Mein\_Eingabefeld = rs.MA\_ID

Hoffe das hilft - wenn ich auch langsam glaube, du mutest dir viel für wenig Wissen zu :smile:

Gruß und frohe Ostern

Sancho

Naja, vielleicht hast du ja noch ne Idee, ansonsten muss ich
mir mal was anderes überlegen.

Nochmals Danke für deine Mühe und schöne Ostertage

Gruß

Marcel

Hallo Sancho,
ja in der Hilfe von Access hatte ich schon was von Recordset gelesen,
werde mich da mal ein wenig durchwühlen, vielleicht komm ich ja noch auf nen grünen Zweig.

Die SQL-Geschichte werde ich auch mal über ein Formular versuchen, vielleicht klappt’s ja.

Besten Dank

Gruß

Marcel