ich habe folgendes Problem:
Ich habe eine Abfrage, innerhalb der eine Spalte von einer VBA-Abfrage
gefüllt wird, die einen sehr langen Text als String zurück liefert. Kann
durchaus auch mal größer als 256 Zeichen sein. Wenn ich diese Abfrage in
Access öffne, dann wird der Inhalt vollständig angezeigt, wenn ich sie
allerdings nach Excel exportiere, dann wird der Inhalt bei 256 Zeichen
abgeschnitten. Das liegt wohl daran, dass der Datentyp der dynamischen
VBA-Spalte "Text" und nicht Memo ist. Wenn ich die Abfrage in eine
Tabelle zwischenspeichere, bei der für diese Spalte eben Memo
eingestellt ist und diese Tabelle dann nach Excel exportiere, dann geht es.
Gibt es dafür eine elegantere Lösung als über eine extra Tabelle zu
gehen, nur um die Daten nach Excel zu bekommen?
Vielen Dank und viele Grüße,
Konrad
Wie exportierst du denn die Abfrage?
Nutzt du DoCmd.TransferSpreadsheet? Wenn nicht probier es mal. Achte
auch drauf, daß du die Version nimmst (acSpreadsheetTypeExcel9). Excel
5.0/95 beschneidet glaub ich auf 255 zeichen.
Ansonsten teste mal .TransferText mit der passenden Export-Spezifikation
kannst du dir ja auch ne .csv ausgeben lassen und die in Excel verwenden.
Ansonsten würde ich mal probieren die Spalte als Variant zu casten,
vielleicht hilft das.
Die letzte Lösung könnte sein, für die Abfrage das Feld in 255er Spalten
zu splitten.
Kannst dier mal auch noch folgende Seiten reinzihen. Da scheint man sich
schonmal damit beschäftigt zu haben:
http://allenbrowne.com/ser-63.html
http://support.microsoft.com/kb/294286/de
Lutz
Kontrolliere mal, wieviel Text deine Abfrage enthält.
Wenn dort schon nur 255 Zeichen zu sehen sind, dann lies:
www.donkarl.com?FAQ5.18
Wenn nicht, solltest du die Export-Methode nennen,
wie schon von Lutz angefordert, und die Access-Version.
--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com
Hier nochmal mehr Eckdaten meines Systems:
Windows XP SP3
Access 2003 mit Datenbankformat 2000 (auch 2002-2003 bringt keine ᅵnderung)
Exportiertes Excel-Format: 97-2003
Mein Problem tritt bei jeder Exportmethode auf und es kann ganz einfach
nachvollzogen werden:
1)
Man erstellt eine VBA-Funktion wie diese hier:
Public Function test1() As String
test1 =
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789asdfghjklᅵᅵ"
End Function
2)
Man erstellt eine Abfrage fᅵr eine Tabelle wie diese hier:
SELECT Tabelle1.*, test1() AS Ausdr1
FROM Tabelle1;
Wenn man diese Abfrage ᅵffnet, dann wird der ganze String angezeigt.
Aber exportieren lassen sich eben nur 256 Zeichen davon.
Bin fᅵr jeden Tipp dankbar!
Grᅵᅵe,
Konrad
Am 08.06.2010 18:17, schrieb Karl Donaubauer:
> Konrad Hammerer wrote:
>> Ich habe eine Abfrage, innerhalb der eine Spalte von einer VBA-Abfrage
>> gefᅵllt wird, die einen sehr langen Text als String zurᅵck liefert.
>> Kann durchaus auch mal grᅵᅵer als 256 Zeichen sein. Wenn ich diese
>> Abfrage in Access ᅵffne, dann wird der Inhalt vollstᅵndig angezeigt,
>> wenn ich sie allerdings nach Excel exportiere, dann wird der Inhalt
>> bei 256 Zeichen abgeschnitten. Das liegt wohl daran, dass der
>> Datentyp der dynamischen VBA-Spalte "Text" und nicht Memo ist. Wenn
>> ich die Abfrage in eine Tabelle zwischenspeichere, bei der fᅵr diese
>> Spalte eben Memo
>> eingestellt ist und diese Tabelle dann nach Excel exportiere, dann
>> geht es.
>> Gibt es dafᅵr eine elegantere Lᅵsung als ᅵber eine extra Tabelle zu
>> gehen, nur um die Daten nach Excel zu bekommen?
>
> Kontrolliere mal, wieviel Text deine Abfrage enthᅵlt.
Grüße,
Konrad
Konrad Hammerer schrieb:
> Mein Problem tritt bei jeder Exportmethode auf
Auch bei Excel-Automation mit CopyFromRecordset?
BTW: ich probierte unter Ac2010 die Export-Methoden über die
Access-Oberfläche aus: dabei wurde sogar beim Export der Tabelle bei
255 Zeichen abgeschnitten.
mfg
Josef
was verbirgt sich denn dahinter?
> BTW: ich probierte unter Ac2010 die Export-Methoden über die
> Access-Oberfläche aus: dabei wurde sogar beim Export der Tabelle bei
> 255 Zeichen abgeschnitten.
Wenn ich bei einer Tabelle auf die rechte Maustaste klicke und dann
"Exportieren" auswähle, dann geht es bei mir wunderbar. Nur bei besagter
Abfrage nicht :-(
Viele Grüße,
Konrad
>
> mfg
> Josef
Konrad Hammerer schrieb:
>> Auch bei Excel-Automation mit CopyFromRecordset?
>
> was verbirgt sich denn dahinter?
CopyFromRecordset ist eine Methode von der Excel-Bibliothek.
Nachteil dieser Variante: du musst Excel installiert haben.
Test-Code:
' Excel öffnen:
Dim excelApp As Excel.Application
Set excelApp = New Excel.Application
excelApp.visible = True
' Eine neue Excel-Datei erzeugen:
Dim excelBook As Excel.Workbook
Set excelBook = excelApp.Workbooks.Add
'Auf das 1. Tabellenblatt verweisen:
Dim excelSheet As Excel.Worksheet
Set excelSheet = excelBook.Worksheets(1)
'Die Abfrage in einem Recordset öffnen:
Dim rstDAO As DAO.Recordset
set rstDAO = currentdb.Openrecordset("DeineAbfrage")
'und nun exportieren:
excelSheet.Range("A1").CopyFromRecordset rstDAO
Anm.: Der Export mit dem DAO-Recordset erzeugte bei mir nach den
ersten 255 Zeichen ein paar "chinesische Zeichen".
=> mit einem ADODB-Recordset hat es dann wie gewünscht funktioniert.
Set rstAdo = New ADODB.Recordset
rstAdo.Open "select * from DeineAbfrage", CurrentProject.Connection
excelSheet.Range("A1").CopyFromRecordset rstAdo
Der obige Code benötigt einen Verweis auf Excel, falls du später ohne
diesen Verweis arbeiten willst, kannst du auf Late binding umstellen.
Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
...
Dim excelBook As Object
... usw.
mfg
Josef
Grüße,
Konrad
Das mit dem Rückgabewert einer Funktion ist halt ein
Spezialfall, bei dem Access auf Textlänge "optimiert".
Mit einem Memofeld in einer Tabelle sollte das nicht passieren.
Falls du den String per Code erzeugen musst, kannst du ihn nicht
vor dem Export in Tabelle1 schreiben oder notfalls in eine
Dummytabelle, die du in die Abfrage reinnimmst?
--
Servus
Karl
****************
http://www.donkarl.com Access-FAQ
http://www.donkarl.com/?aek 13. Access-Entwickler-Konferenz
25./26.09.2010 in Nürnberg, 16./17.10.2010 in Hannover
> Das mit dem Rückgabewert einer Funktion ist halt ein
> Spezialfall, bei dem Access auf Textlänge "optimiert".
> Mit einem Memofeld in einer Tabelle sollte das nicht passieren.
>
> Falls du den String per Code erzeugen musst, kannst du ihn nicht
> vor dem Export in Tabelle1 schreiben oder notfalls in eine
> Dummytabelle, die du in die Abfrage reinnimmst?
Wie sollte das denn gehen?
Ich habe die VBA-Funkion innerhalb meiner Abfrage und diese bekommt die
ID des aktuellen Datensatzes übergeben und liefert aufgrund dieser ID
den langen Wert zurück. Wie könnte ich diesen denn in eine Tabelle mit
Memofeld zwischenspeichern und dann ID bezogen wieder in die eigentliche
Abfrage einbinden?
Danke,
Konrad
Wie geschrieben: "vor dem Export" d.h. vor der Abfrage
F�hre den Code vorher separat aus (Recordset etc.) und schreibe
die Texte in die Tabelle oder in eine Hilfstabelle nur mit ID und Memo.
Danach erst f�hrst du die Abfrage aus.
--
Servus
Karl
****************
http://www.donkarl.com Access-FAQ
http://www.donkarl.com/?aek 13. Access-Entwickler-Konferenz
25./26.09.2010 in N�rnberg, 16./17.10.2010 in Hannover
Danke,
Konrad
> Fᅵhre den Code vorher separat aus (Recordset etc.) und schreibe
> die Texte in die Tabelle oder in eine Hilfstabelle nur mit ID und Memo.
>
> Danach erst fᅵhrst du die Abfrage aus.
>