WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 17.02.2003, 21:30   #1
Biri
Hero
 
Registriert seit: 04.09.2001
Beiträge: 894


Frage access report - bitte um hilfe !

hi !

ich bräuchte eure hilfe bei einem access-programm.

Wie schaffe ich es, dass ich die Datensätze, die in einem Report angeziegt werden in eines separate Tabelle exportiere ?
(Der Recordsource des Reports basiert auf einer Abfrage, welche Parameter enthält - z.B. geben Sie ein ... ein)

Die Abfrageparameter sollen nicht erneut eingegeben werden müssen, sondern es soll
sofort (ohne Nachfrage) eine Tabelle erstellt werden, welche die selben Datensätze enthält,
die dem Report als Grundlage dienen.

Sinn der Sache: statt Report soll dann ein Serienbrief an die "selben Datensätze" erstellt werden.

...hab schon länger nix mit access programmiert - weiß jemand rat ??

mfg
-hannes
Biri ist offline   Mit Zitat antworten
Alt 17.02.2003, 22:02   #2
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

Also eigentlich kann man ja einen Serienbrief genausogut aus einer Abfrage erstellen wie aus einer Tabelle aber du wirst schon deine Gründe haben
Anbei ein kleines Beispiel. Wenn du den Report rptSourcePartial öffnest wird die Tabelle tblTarget mit allen Datensätzen aus der Tabelle tblSource befüllt auf die die Abfrage qrySourcePartial passt.
Nicht vergessen ADO und ADOX einzubinden wenn du in deiner Datenbank so vorgehen willst.
Seidl ist offline   Mit Zitat antworten
Alt 18.02.2003, 01:00   #3
Biri
Hero
 
Registriert seit: 04.09.2001
Beiträge: 894


Standard

erstmal vielen dank für deine hilfe !
wenn man nach sowas speziellem sucht, findet man (ich zumindest)
im internet keine hilfe dazu - schön das es foren mit hilfsbereiten menschen gibt !

hmmm - das beispiel ist zwar o.k. - jedoch nicht ganz das, was ich will - ich will
definitiv kein ADO verwenden (weiß, dass DAO beim kunden funktioniert - will da
keine unsicherheit reinbringen, außerdem muss sowas in der Art ja auch mit Dao gehn, oder ?)

Ev. ist aber mein Lösungsansatz falsch - daher eine kurze Beschreibung:

Access 2000 Programm macht folgendes:
- Aus einer Liste aller in der DB vorhandenen Berichte kann einer ausgewählt werden
- Dieser basiert auf einer Abfrage
- Die Abfrage enthält Parameterfelder - z.B. "Geben Sie das gewünschte Land ein !"
- Im Bericht werden dann nur die Daten mit diesem Land angezeigt
- Nun soll es möglich sein, an alle Personen, die im Bericht aufscheinen ein Mail zu schicken

Meine Überlegung: die RecordSource des Berichtes in eine extrene DB-Tabelle exportieren,
ein Word Objekt erzeugen und die Serienmailfunktion ausführen und als Datenherkunft
die exportierte, neu erstellte DB angeben (funktioniert schon alles)

Die Abfrageparameter soll man nicht nochmals eingeben müssen, daher RecordSource vom Bericht
und nicht vom Query - dann kam nämlich jedesmal nochmals die Parameterabfrage.

Also, wenn du ev. noch eine idee hast, bitte um mitteilung.

thx
-hannes
Biri ist offline   Mit Zitat antworten
Alt 18.02.2003, 01:14   #4
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

UUPs! Das hatte ich missverstanden. Ich habe sowas aber auch ehrlich gesagt selbst noch nie verwendet.

Als erstes fällt mir in dem Fall ein, das Recordset des Berichts mit einer Schleife zu durchlaufen und dabei die einzelnen Datensätze in die Zieltabelle zu schreiben.

do while not Recordset.EOF
.
.
.
loop

Ist aber wohl definitiv weder die schönste noch die schnellste Lösung.
Sind im geöffneten Bericht die Parameterfelder im SQL-Statement wirklich nicht durch die eingegebenen Werte ersetzt? Sonst könnte man mein ursprüngliches Beispiel doch noch verwenden. Das ummodeln auf DAO sollte eigentlich kein Auftrag sein.

Bis morgen,
Seidl

PS: Konnte nicht wiederstehen und habe doch noch kurz den Debugger bemüht. Leider wird so eine Parameterabfrage als procedure gespeichert und ich sehe im Augenblick keinen Weg die Abfrage, basierend auf den zuletzt übergebenen Werten, auszulesen.
Vielleicht fällt mir ja morgen noch was ein aber ich bin nicht besonders zuversichtlich.
Seidl ist offline   Mit Zitat antworten
Alt 18.02.2003, 12:45   #5
Biri
Hero
 
Registriert seit: 04.09.2001
Beiträge: 894


Standard

hi!

wow - mit einer antwort um die zeit hätt ich nicht mehr gerechnet.
...dachte, ich bin der einzige, der um die zeit noch auf ist und so einen schmarrn programmiert.

Wg. Zugriff auf Recordset des Reports - hab ich auch schon versucht:
Der Report hat ein RecordSet Objekt, jedoch beim Zugriff:

Reports(Me!SelBericht).Recordset

kommt die Fehlermeldung: This feature is not available in an MDB.


Mach inzwischen folgendes:

rsource = Reports(Me!SelBericht).RecordSource

So bekomme ich die Recordsource des Berichtes (geht nur, wenn bericht geöffnet ist - auch sehr supa...)
Dann starte ich eine Query, welche auf dieser Recordsource basiert, jedoch eine Tabelle erstellt.

recht umständlich, weil man eine 2. query benötigt.
noch dazu muss man die query-parameter erneut eingeben.

Werd mir nochmal dein ADO-Beispiel ansehen - mit Dao bekomm ich's leider nicht hin, dass ich auf das Recordset des Reports zugreife und dessen Daten in eine ext. Tabelle exportiere.

thx
-hannes
Biri ist offline   Mit Zitat antworten
Alt 18.02.2003, 19:14   #6
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

Ich hab' mir die Sache jetzt nochmal angesehen aber offengesagt fällt mir auch nichts gescheites mehr ein.
Ist die Performance bei der Abfrage so kritisch das du eine parametrisierte verwenden musst? Ansonsten könntest du ja die Parameterabfrage selbst ausprogrammieren und damit ein SQL-Statement erstellen das du dann als Quelle verwenden kannst.
Vielleicht liesse sich auch noch eine Lösung für deinen derzeitigen Ansatz finden aber ob es wirklich dafürsteht den dazu nötigen Zeitaufwand zu erbringen?
Seidl ist offline   Mit Zitat antworten
Alt 19.02.2003, 10:39   #7
Biri
Hero
 
Registriert seit: 04.09.2001
Beiträge: 894


Standard

hi !

Die Performance ist sicher nicht so kritisch, es handlet sich jedoch um ein bestehendes Programm, welches
ich erweitern muss (will daher möglichst wenig ändern).
Ich habs inzwischen folgendermaßen gelöst (sicher nicht der schönste, aber ein funktionierender Ansatz)

- zu jedem Query gibt es ein 2. "Tabellenerstellungs" Query
- Dieses liefert die selben Ergebnisse und schreibt diese in eine temp. Tabelle
- Dieses 2. Query verweist bei den Parametern auf Felder des Berichtes, die Parameter
müssen daher nicht nochmals eingegeben werden.
Nachteil: Bericht muss diese Felder (hidden) enthalten.
- Beim Anzeigen des Berichtes hole ich mir dessen "RecordSource"
- Die 2. Query heißt "Create "<RecordSource>
- Diese führe ich aus
- Die Daten stehen dann in einer temp. Tabelle, ich öffne ein Word Objekt und
zeige diese in einem Serienbrief an.

...ist also eh so ähnlich, wie deine idee !

mfg
-hannes

ps: ich glaub, jetzt bekomm ich bald ein "sterndal", weil ich immer so viele sachen frage ! *g*
Biri ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:08 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag