2012-10-17 9 views
5

Pracuję w VB6 na pulpicie systemu Windows 7, aby czytać i pracować na plikach tekstowych i napotkać problem przekazując zmienną do instrukcji SELECT. Kod mam to:VB6 wstawia ścieżkę pliku do instrukcji 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 

Problemem jest to, że nazwa ścieżki do pliku wejściowego zawiera spacje i kiedy uruchomić powyższy kod, to nie na rs.OPen zgodnie z błędu mówiąc błąd składni w OD klauzula. Jeśli ścieżka w pliku inputfile nie zawiera spacji, wszystko działa bez problemu.

Próbowałem wielu kombinacji " '[] itd wokół plik_wejściowy ale zawsze pojawia się błąd składni lub inny błąd mówiąc, że inputFile.txt nie można znaleźć.

Może mi ktoś podać prawidłowy sposób obchodzenia ścieżki/nazwy plików ze spacjami w SQL proszę?

+1

FYI podczas dodawania kodu do kwestii idzie między znacznikami lub wciąć go przez 4 spacji –

+0

Co to nazwa tabeli, który próbujesz wybrać od? Wygląda na to, że próbujesz wybrać z pliku w systemie plików, co nie ma sensu. – recursive

+0

Próbuję odczytać dane z pliku tekstowego. Jak już powiedziałem, jeśli ścieżka w pliku inputfile nie zawiera spacji, mogę bez problemu odczytać dane pliku tekstowego. Po otwarciu rs używam polecenia rs.GetRows do umieszczenia danych w tablicy, którą następnie przetwarzam. – blueflash

Odpowiedz

1

Widocznie spacji w nazwie pliku should work jeśli używasz nawiasów kwadratowych [].

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

Mówisz w pytaniu, w którym wypróbowałeś nawiasy kwadratowe - czy możesz dwukrotnie sprawdzić? Nie wiem o spacji w nazwie katalogu.

3

Podana wartość źródła danych powinna zawsze być podawana w celu uniknięcia takich problemów. Możesz to zrobić, używając cudzysłowu "lub apostrofu", podobnie jak w przypadku wartości właściwości Rozszerzone. "używając nawiasów kwadratowych [], a najlepiej zastępuje znak." dla rozszerzenia pliku przez znak #.

Nie ma "dostawcy OLEDB dla plików tekstowych", ale twój przykład pokazuje użycie dostawcy OLEDB Jet 4.0 z możliwością instalacji tekstu ISAM, który jest w porządku.

Processing Text Databases oferuje wiele informacji na ten temat w ogóle, używając VBScript dla większości przykładów, ale prawie wszystko odnosi się również do VB6.

+0

+1. Poprawiłem mój komentarz w odpowiedni sposób ... – MarkJ

0

Po prostu miałem pamięć z odległej przeszłości i jeśli dobrze pamiętam, źródłem danych jest folder, w którym przechowywany jest plik, a po wybraniu po prostu nazwa pliku bez ścieżki.

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 

(zakładając, że plik jest w App.Path)

Powiązane problemy