2012-10-17 8 views
5

Ich arbeite in VB6 auf einem Windows 7-Desktop zum Lesen und Bearbeiten von Textdateien und habe ein Problem beim Übergeben von Variablen an eine SELECT-Anweisung. Der Code, den ich habe, ist:VB6 Dateipfad in SQL einfügen FROM-Klausel

Dim conn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim cm As ADODB.Command 

Set conn = New ADODB.Connection 
conn.Open _ 
    "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
    "Data Source=" & App.Path & ";" & _ 
    "Extended Properties=""text;HDR=No;FMT=Delimited()""" 

inputFile = "C:\test data\test data.asc" 

Set cm = New ADODB.Command 
cm.ActiveConnection = conn 
cm.CommandType = adCmdText 

cm.CommandText = "SELECT * FROM " & inputFile 
Set rs = New ADODB.Recordset 
rs.Open cm, , adOpenKeyset, adLockOptimistic 

Das Problem ist, dass der Pfad zu der Eingabedatei enthält Leerzeichen und wenn ich den Code oben laufen, scheitert es an der rs.OPen Linie mit einer Fehlermeldung, Syntaxfehler in FROM Klausel. Wenn der Pfad in der Eingabedatei keine Leerzeichen enthält, funktioniert alles problemlos.

Ich habe viele Kombinationen von " '[] usw. rund um die Eingabedatei versucht, aber immer die Syntaxfehler oder einen anderen Fehler erhalten, dass inputFile.txt kann nicht gefunden werden.

Kann mir jemand die richtige Methode für den Umgang mit Pfad/Dateinamen mit Leerzeichen in einer SQL-Anweisung bitte?

+1

wenn sie auf eine Frage geht es zwischen den Markierungen oder einrücken es durch 4 Leerzeichen –

+0

Was ist der Name der Tabelle, versuchen Sie zu Hinzufügen von Code auswählen von? Es sieht so aus, als ob Sie versuchen, aus einer Datei im Dateisystem auszuwählen, was keinen Sinn ergibt. – recursive

+0

Ich versuche, die Daten aus einer Textdatei zu lesen. Wie gesagt, wenn der Pfad in der Eingabedatei keine Leerzeichen enthält, kann ich die Textdatei problemlos lesen. Sobald das rs geöffnet ist, verwende ich rs.GetRows, um die Daten in ein Array zu setzen, das ich dann verarbeite. – blueflash

Antwort

1

Anscheinend Leerzeichen im Dateinamen should work wenn Sie eckige Klammern [] verwenden.

cm.CommandText = "SELECT * FROM [" & inputFile & "]" 

Sie sagen in der Frage, dass Sie eckige Klammern ausprobiert haben - könnten Sie das überprüfen? Ich weiß nichts über Leerzeichen im Verzeichnisnamen.

3

Der Wert für die Datenquelle sollte immer angegeben werden, um solche Probleme zu vermeiden. Sie können entweder die Anführungszeichen "oder Apostroph", dies zu tun, so wie Sie für den erweiterten Eigenschaften Wert haben.

Dann einen Dateinamen in der Datenquelle Verzeichnis als Tabellennamen zu verwenden, zumindest „verwenden Zitat "es mit Klammern [], und ersetzen Sie vorzugsweise die. für die Dateierweiterung durch die # Zeichen.

Es gibt keine" OLEDB Provider für Textdateien ", aber Ihr Beispiel zeigt die Verwendung des Jet 4.0 OLEDB Provider mit seiner Text Installable ISAM, das ist gut,

Processing Text Databases bietet eine Menge Informationen zu diesem Thema im Allgemeinen, mit VBScript für die meisten Beispiele, aber es so ziemlich alles gilt auch für VB6.

+0

+1. Habe meinen Kommentar entsprechend korrigiert ... – MarkJ

0

Ich hatte gerade eine Erinnerung aus der fernen Vergangenheit und wenn ich mich recht erinnere, ist die Datenquelle der Ordner, in dem die Datei gespeichert ist und in der Auswahl haben Sie nur den Dateinamen ohne den Pfad.

Dim conn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim cm As ADODB.Command 

Set conn = New ADODB.Connection 
conn.Open _ 
"Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
"Data Source=" & App.Path & ";" & _ 
"Extended Properties=""text;HDR=No;FMT=Delimited()""" 

inputFile = "test data.asc" 

Set cm = New ADODB.Command 
cm.ActiveConnection = conn 
cm.CommandType = adCmdText 

cm.CommandText = "SELECT * FROM [" & inputFile & "]" 
Set rs = New ADODB.Recordset 
rs.Open cm, , adOpenKeyset, adLockOptimistic 

(ist die Datei unter der Annahme, in App.Path) FYI