2012-10-17 8 views
5

Sto lavorando in VB6 su un desktop Windows 7 per leggere e lavorare su file di testo e sono incappato in un problema passando la variabile a un'istruzione SELECT. Il codice che ho è:VB6 inserendo il percorso del file nella clausola SQL FROM

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 

Il problema è che il nome di percorso del file di input contiene spazi e quando faccio funzionare il codice di cui sopra, non riesce alla linea rs.OPen con un errore che dice Errore di sintassi dalla clausola. Se il percorso in inputFile non contiene spazi, tutto funziona senza problemi.

Ho provato molte combinazioni di " '[] ecc in tutto il fileInput ma sempre ottenere l'errore di sintassi o un altro errore dicendo che inputFile.txt non può essere trovato.

qualcuno può darmi il metodo corretto per la gestione percorso/file nomi con gli spazi in un'istruzione SQL per favore?

+1

FYI quando si aggiunge il codice per una domanda che va tra i segni di graduazione o rientro dal 4 spazi –

+0

Qual è il nome della tabella che si sta tentando di selezionare a partire dal? Sembra che tu stia cercando di selezionare da un file nel file system, il che non ha senso. – recursive

+0

Sto provando a leggere i dati da un file di testo. Come ho detto, se il percorso in inputFile non contiene spazi, posso leggere i dati del file di testo senza problemi. Una volta che rs è aperto, io uso rs.GetRows per mettere i dati in una matrice che poi elaborerò. – blueflash

risposta

1

a quanto pare gli spazi nel nome del file should work se si utilizzano le parentesi quadre [].

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

Nella domanda hai detto che hai provato le parentesi quadre: potresti controllare due volte? Non conosco gli spazi nel nome della directory.

3

Il valore fornito per l'origine dati deve sempre essere indicato per evitare tali problemi. È possibile utilizzare le virgolette "o un apostrofo 'per fare questo, per quanto avete fatto per il valore di proprietà estese.

quindi di utilizzare un nome di file all'interno della directory di origine dati come nome di una tabella almeno "quote "utilizza parentesi [], e preferibilmente sostituisce il. per l'estensione del file con il carattere #

Non esiste un" provider OLE DB per file di testo "ma nell'esempio viene mostrato l'utilizzo del provider OLE DB Jet 4.0 con il relativo installibile di testo ISAM, che va bene

Processing Text Databases offre molte informazioni su questo argomento in generale, utilizzando VBScript per la maggior parte degli esempi, ma praticamente tutto si applica anche a VB6.

+0

+1. Ho corretto il mio commento di conseguenza ... – MarkJ

0

Avevo solo un ricordo del passato remoto e se ricordo bene l'origine dati è la cartella in cui è contenuto il file e nella selezione si ha solo il nome del file senza il percorso.

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 

(supponendo che il file è in App.Path)