Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL Abfrage an Excel ausgeben

92 views
Skip to first unread message

Thomas_INEOS

unread,
May 30, 2009, 10:40:01 AM5/30/09
to
hallo,
Folgendes Problem habe ich in Access 2003:
In einer Funktion erstelle ich einen SQL String. Das Ergebnis moechte ich
direkt nach Excel ausgeben, also nicht erst in einer querz speichern. Evt
ueber
docmd.outputto ....

Vielen Dank
Thomas Friederich

Jörg Ackermann

unread,
May 30, 2009, 11:00:08 AM5/30/09
to
Hallo Thomas_INEOS

Thomas_INEOS meinte:

> Folgendes Problem habe ich in Access 2003:
> In einer Funktion erstelle ich einen SQL String. Das Ergebnis moechte
> ich direkt nach Excel ausgeben, also nicht erst in einer querz
> speichern. Evt ueber
> docmd.outputto ....

Schau Dir das mal an:

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

Gru� Acki


--
Mitglied im DBDEV http://www.dbdev.org
Access-FAQ: http://www.donkarl.com

Gunter Avenius

unread,
May 30, 2009, 11:00:24 AM5/30/09
to
Hallo Thomas_INEOS,

Thomas_INEOS schrieb folgendes:


> hallo,
> Folgendes Problem habe ich in Access 2003:
> In einer Funktion erstelle ich einen SQL String. Das Ergebnis moechte ich
> direkt nach Excel ausgeben, also nicht erst in einer querz speichern. Evt

Warum?

Erstelle Dir eine "Dummy" - Abfrage die du daf�r verwendest.

Currentdb.Querydefs("DummyAbfrage").SQL = strSQL

> docmd.outputto ....

und jetzt:

DoCmd.OutputTo acOutputQuery,"DummyAbfrage"....


Gru�
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com
home: http://www.avenius.com - http://www.AccessRibbon.de
http://www.ribboncreator.de

Thomas_INEOS

unread,
May 30, 2009, 1:24:01 PM5/30/09
to
Hallo,
Der Ansatz klingt echt gut, , vor allem, weil es compakt waere, aber ich
mach da offenbar noch was falsch. Bei mir sieht das jetzt so aus:

Private Sub Form_Current()
CurrentDb.QueryDefs("test").SQL = "SELECT [02_Ineos_contacts].* FROM
02_Ineos_contacts; "
DoCmd.OutputTo acOutputQuery, "test", acFormatXLS, "c:\text.xls", True
End Sub

Ich kriege den Laufzeitfehler 3265: "item not found in this collection" und
der debugger markiert das currentdb-statement.


"Gunter Avenius" wrote:

> Hallo Thomas_INEOS,
>
> Thomas_INEOS schrieb folgendes:
> > hallo,
> > Folgendes Problem habe ich in Access 2003:
> > In einer Funktion erstelle ich einen SQL String. Das Ergebnis moechte ich
> > direkt nach Excel ausgeben, also nicht erst in einer querz speichern. Evt
>
> Warum?
>

> Erstelle Dir eine "Dummy" - Abfrage die du dafür verwendest.


>
> Currentdb.Querydefs("DummyAbfrage").SQL = strSQL
>
> > docmd.outputto ....
>
> und jetzt:
>
> DoCmd.OutputTo acOutputQuery,"DummyAbfrage"....
>
>

> Gruß

Karl Donaubauer

unread,
May 30, 2009, 1:33:49 PM5/30/09
to
Thomas_INEOS wrote:

> "Gunter Avenius" wrote:
>>> Folgendes Problem habe ich in Access 2003:
>>> In einer Funktion erstelle ich einen SQL String. Das Ergebnis moechte
>>> ich direkt nach Excel ausgeben, also nicht erst in einer querz
>>> speichern. Evt
>> ...

>> Erstelle Dir eine "Dummy" - Abfrage die du dafür verwendest.
>>
>> Currentdb.Querydefs("DummyAbfrage").SQL = strSQL
>>
>>> docmd.outputto ....
>>
>> und jetzt:
>>
>> DoCmd.OutputTo acOutputQuery,"DummyAbfrage"....

> Der Ansatz klingt echt gut, , vor allem, weil es compakt waere, aber ich


> mach da offenbar noch was falsch. Bei mir sieht das jetzt so aus:
>
> Private Sub Form_Current()
> CurrentDb.QueryDefs("test").SQL = "SELECT [02_Ineos_contacts].* FROM
> 02_Ineos_contacts; "
> DoCmd.OutputTo acOutputQuery, "test", acFormatXLS, "c:\text.xls", True
> End Sub
>
> Ich kriege den Laufzeitfehler 3265: "item not found in this collection"
> und der debugger markiert das currentdb-statement.

Und, gibt es denn eine Abfrage "test" in deiner DB?
Wenn nicht, dann erstelle sie einmal zu Fuß und speichere sie,
egal mit welchem Inhalt, bevor du ihren SQL-Text umzuschreiben
versuchst.

--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com

Gunter Avenius

unread,
May 30, 2009, 1:36:23 PM5/30/09
to
Hallo Thomas_INEOS,

Thomas_INEOS schrieb folgendes:


> Private Sub Form_Current()
> CurrentDb.QueryDefs("test").SQL = "SELECT [02_Ineos_contacts].* FROM
> 02_Ineos_contacts; "
> DoCmd.OutputTo acOutputQuery, "test", acFormatXLS, "c:\text.xls", True
> End Sub
>
> Ich kriege den Laufzeitfehler 3265: "item not found in this collection" und

Die Abfrage "test" ist in der Datenbank vorhanden?

Du willst den Export bei jedem Datensatzwechsel ausf�hren?

Hast Du mal die Abfrage "Test" vor dem Export ge�ffnet?
Erscheint da ein Fehler?

Gru�

Thomas_INEOS

unread,
May 30, 2009, 1:58:00 PM5/30/09
to

Hallo,
echt geil. So klappt das ja irre.
Vielen vielen Dank

Thomas


"Gunter Avenius" wrote:

> Hallo Thomas_INEOS,
>
> Thomas_INEOS schrieb folgendes:
> > Private Sub Form_Current()
> > CurrentDb.QueryDefs("test").SQL = "SELECT [02_Ineos_contacts].* FROM
> > 02_Ineos_contacts; "
> > DoCmd.OutputTo acOutputQuery, "test", acFormatXLS, "c:\text.xls", True
> > End Sub
> >
> > Ich kriege den Laufzeitfehler 3265: "item not found in this collection" und
>
> Die Abfrage "test" ist in der Datenbank vorhanden?
>

> Du willst den Export bei jedem Datensatzwechsel ausführen?
>
> Hast Du mal die Abfrage "Test" vor dem Export geöffnet?
> Erscheint da ein Fehler?
>
> Gruß

Thomas_INEOS

unread,
May 30, 2009, 2:05:01 PM5/30/09
to
sieht toll aus, aber ich ziehe einfache Loesungen vor. Das was Gunther da in
2 Zeilen macht. ist simpel und klappt.

"Jörg Ackermann" wrote:

> Hallo Thomas_INEOS
>
> Thomas_INEOS meinte:
>
> > Folgendes Problem habe ich in Access 2003:
> > In einer Funktion erstelle ich einen SQL String. Das Ergebnis moechte
> > ich direkt nach Excel ausgeben, also nicht erst in einer querz
> > speichern. Evt ueber
> > docmd.outputto ....
>
> Schau Dir das mal an:
>
> http://www.office-loesung.de/ftopic182021_0_0_asc.php
>

> Gruß Acki

Reiner Wolff

unread,
May 31, 2009, 4:02:02 AM5/31/09
to
Moin Thomas,

*Thomas_INEOS* schrieb:

> sieht toll aus, aber ich ziehe einfache Loesungen vor.

Na klar, wenn sie zu einem gleichen guten Ergebnis f�hren.

> Das was Gunther da in 2 Zeilen macht. ist simpel und klappt.

Ich w�rde die L�sung von J�rg immer vorziehen. CopyFromRecordset h�ndelt
die Datentypen etwas anders als OutputTo, wenn ich mich richtig erinnere.
Bei OutputTo st�rten mich bei meinen Exporten damals glaube ich folgende
Dinge:
- das Excel-Dateiformat war doch etwas alt und f�hrte daher zu Problemen
- das Excel-Dateiformat ist nicht ausw�hlbar. Du kannst also gar keine
2007er-Datei damit erstellen, selbst wenn Du wolltest.
- Zahlen wurden als Text in die Spalten geschrieben. Die Datentyperkennung
arbeitete zumindest anders als bei CopyFromRecordset. Letzteres f�hrte
zu besseren Ergebnissen und erforderte weniger Nachbearbeitung in Excel.
- Man hat keinen Einfluss auf das Tabellenblatt, in dem es landen soll

Ich bin mir bei den Argumenten nicht mehr ganz sicher, wie das halt so ist,
wenn man vor Jahren sich f�r eine andere Variante entschieden hat. :-)

Die Funktion mit CopyFromRecordset l�sst sich auch noch schon erweitern um
die Frage, ob Spaltenk�pfe angezeigt werden sollen.
So kompliziert lang ist die Funktion eigentlich gar nicht.

Langes Gerede:
Ich kann Dir nur empfehlen Dich ggf. doch nochmal mit der Funktion zu
besch�ftigen oder sie zumindest im Hinterkopf zu behalten.

Gru� aus Kiel
Reiner
--
COMPUTER ARBEITEN BINAER: ENTWEDER SIE FUNKTIONIEREN ODER SIE SIND KAPUTT.

Peter Muehlbauer

unread,
May 31, 2009, 4:18:11 AM5/31/09
to

Ich frage mich nur, warum das Pferd von hinten aufz�umen.

Warum nicht gleich die SQL-Abfrage aus Excel heraus per "Abfrage erstellen"
bewerkstelligen. Dabei werden gleichzeitig zumindest auch die Datentypen
richtig erkannt.

Gru�
Peter

Reiner Wolff

unread,
May 31, 2009, 5:27:42 AM5/31/09
to
Moin Peter,

*Peter Muehlbauer* schrieb:

> Ich frage mich nur, warum das Pferd von hinten aufz�umen.
>
> Warum nicht gleich die SQL-Abfrage aus Excel heraus per "Abfrage erstellen"
> bewerkstelligen. Dabei werden gleichzeitig zumindest auch die Datentypen
> richtig erkannt.

Wenn ich das in Excel als Abfrage immer aktuell haben will, ist das
praktisch. Wobei man daran denken muss, dass die meisten Nutzer mit sowas
nicht richtig umgehen k�nnen.

Wenn ich das derzeitige Ergebnis der Abfrage in Excel festschreiben will,
arbeite ich immer mit CopyFromRecordset.
Aber die L�sungsm�glichkeiten sind wie immer vielf�ltig ;-)

Gru� aus Kiel
Reiner
--

Wie beschleunige ich einen Mac?
Mit 9,81 m/s�.

Josef Poetzl

unread,
May 31, 2009, 6:13:25 AM5/31/09
to
Hallo!

Reiner Wolff schrieb:


> *Thomas_INEOS* schrieb:
>> sieht toll aus, aber ich ziehe einfache Loesungen vor.
>
> Na klar, wenn sie zu einem gleichen guten Ergebnis f�hren.
>
>> Das was Gunther da in 2 Zeilen macht. ist simpel und klappt.
>
> Ich w�rde die L�sung von J�rg immer vorziehen. CopyFromRecordset h�ndelt
> die Datentypen etwas anders als OutputTo, wenn ich mich richtig erinnere.

Anm.:
Falls Memofelder verwendet werden, muss man bei beiden Varianten
aufpassen.
DoCmd.OutputTo schneidet ohne Fehlermeldung je nach Dateiversion bei
255 bzw. 4000 Zeichen ab.
CopyFromRecordset meldet einen Fehler und exportiert gar nicht, wenn
mehr als 8203 Zeichen in einem Memofeld sind.

> Bei OutputTo st�rten mich bei meinen Exporten damals glaube ich folgende
> Dinge:
> - das Excel-Dateiformat war doch etwas alt und f�hrte daher zu Problemen
> - das Excel-Dateiformat ist nicht ausw�hlbar. Du kannst also gar keine
> 2007er-Datei damit erstellen, selbst wenn Du wolltest.

OutputFormat:= "Excel Workbook (*.xlsx)"
oder
OutputFormat:= "Excel Binary Workbook (*.xlsb)"


> Die Funktion mit CopyFromRecordset l�sst sich auch noch schon erweitern um
> die Frage, ob Spaltenk�pfe angezeigt werden sollen.
> So kompliziert lang ist die Funktion eigentlich gar nicht.

Zumindest braucht man ja nur einmal eine Funktion in einem allgemeinen
Modul erstellen. �ber deren Funktionsweise bzw. Anzahl an Codezeilen
muss man sich sp�ter bei der Verwendung keine Gedanken machen. ;-)


mfg
Josef

Josef Poetzl

unread,
May 31, 2009, 6:28:40 AM5/31/09
to
Nachtrag:
Josef Poetzl schrieb:

> CopyFromRecordset meldet einen Fehler und exportiert gar nicht, wenn
> mehr als 8203 Zeichen in einem Memofeld sind.

Au�er es wird nur das Memofeld exportiert, dann gibt es keinen Fehler
und es wird bei 32767 Zeichen abgeschnitten.
Sobald weitere Datenfelder exportiert werden, d�rfen maximal 8203
Zeichen im Memofeld sein. (Bei weniger als 8203 Zeichen, k�nnen aber
ohne Probleme auch mehrere Memofelder enthalten sein.)


mfg
Josef

0 new messages