2009-03-13 7 views
0

Ich bin eine SQL-SELECT-Abfrage durch eine ADO-Verbindung zu einer Excel 2007-Arbeitsmappe mit dem folgenden Code ausgeführt wird (eine benutzerdefinierte Version von VBScript verwenden)SQL Query Run Against Excel-Arbeitsmappe Kosten Verkürzte Textfeld

dim ado, rs 
set ado = CreateObject("ADODB.Connection") 
ado.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=workbook.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";" 
ado.open() 
set rs = ado.execute("SELECT * FROM [sheet1$]") 

der ist geradeheraus. Das Problem besteht darin, dass jede Zelle, deren Text länger als 255 Zeichen ist, abgeschnitten wird. Gibt es einen Weg dahin? Gibt es eine Eigenschaft in der Verbindungszeichenfolge, die dies unterstützt oder ist es eine Option, die ich im Excel-Dokument selbst ändern muss? Ich habe versucht, MSSQL CAST() -Funktion, aber dies verursacht nur einen Fehler bei der Ausführung.

Jede Hilfe würde sehr geschätzt werden.

+0

Ich habe auch bemerkt, dass es manchmal mehr als 255 Zeichen zurückgibt, aber die ersten 255 Zeichen sind von der richtigen Zelle und der verbleibende Text ist scheinbar aus einer zufälligen Zelle (beunruhigend ist der zusätzliche Text jedes Mal anders). –

+0

dies (zufälliger angehängter Text) ist nicht der Fall, wenn ich das Dateiformat 2003 und den Jet-Provider in der Verbindungszeichenfolge verwenden –

Antwort

1

Ich denke, Sie sind in einer Variante einer seit langem bestehenden Einschränkung in Excel's Datenzugriffsanbieter geraten. Ein Beispiel finden Sie in http://support.microsoft.com/default.aspx?scid=kb;EN-US;189897 oder google für Tausende mehr.

+0

nach den Informationen in der KB-Artikel, änderte ich den entsprechenden Wert in den Registrierungsschlüssel HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 12.0 \ Access Connectivity Engine \ Engines \ Excel aber das Problem konnte nicht behoben werden; Der Wechsel zu Jet 4 mit dem obigen Fix hat funktioniert. –

0

Anstatt zu versuchen, CAST() zu verwenden, haben Sie versucht, die Funktion CONVERT() zu verwenden?

+0

Ich bekomme einen Fehler "Undefinierte Funktion" bei der Verwendung von CONVERT, gerade versucht es –

+0

@TheGravyTalker: Verwenden Sie Konvertiere() korrekt? Konvertieren (varchar (500), Feldname)? – TheTXI

+0

Yep, einfach so –