2012-10-17 31 views
5

Tôi đang làm việc trong VB6 trên máy tính để bàn Windows 7 để đọc và làm việc trên các tệp văn bản và đã chạy vào biến cố vấn đề cho câu lệnh SELECT. Mã tôi có là:VB6 chèn đường dẫn tệp vào mệnh đề 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 

Vấn đề là tên đường dẫn đến tập tin đầu vào chứa dấu cách và khi tôi chạy đoạn mã trên, nó không thành công ở dòng rs.OPen với một lỗi nói rằng lỗi cú pháp trong TỪ mệnh đề. Nếu đường dẫn trong inputFile không chứa dấu cách, mọi thứ sẽ hoạt động mà không có sự cố.

Tôi đã thử nhiều kết hợp của " '[] vv quanh Inputfile nhưng luôn luôn nhận được lỗi cú pháp hay cách khác báo lỗi nói rằng inputFile.txt không thể được tìm thấy.

bất cứ ai có thể cho tôi phương pháp đúng để xử lý path/file tên với các không gian trong một câu lệnh SQL xin vui lòng?

+1

FYI khi thêm mã vào một câu hỏi nó đi giữa dấu ngoặc đánh dấu hoặc thụt nó bằng 4 chỗ –

+0

tên của bảng bạn đang cố gắng để lựa chọn là gì từ? Có vẻ như bạn đang cố chọn từ một tệp trong hệ thống tệp, điều này không có ý nghĩa gì. – recursive

+0

Tôi đang cố gắng đọc dữ liệu từ tệp văn bản. Như tôi đã nói, nếu đường dẫn trong inputFile không chứa khoảng trống, tôi có thể đọc dữ liệu tệp văn bản mà không gặp bất kỳ sự cố nào. Khi rs được mở, tôi sử dụng rs.GetRows để đưa dữ liệu vào một mảng mà sau đó tôi xử lý. – blueflash

Trả lời

1

Rõ ràng khoảng trống trong tên tập tin should work nếu bạn sử dụng dấu ngoặc vuông [].

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

Bạn nói trong câu hỏi mà bạn đã thử dấu ngoặc vuông - bạn có thể kiểm tra lại không? Tôi không biết về khoảng trống trong tên thư mục.

3

Giá trị được cung cấp cho Nguồn dữ liệu phải luôn được trích dẫn để tránh các vấn đề như vậy. Bạn có thể sử dụng dấu ngoặc kép "hoặc dấu nháy đơn" để làm điều này, giống như bạn đã làm cho giá trị thuộc tính Mở rộng.

Sau đó, sử dụng tên tệp trong thư mục Nguồn dữ liệu dưới dạng tên bảng ít nhất "trích dẫn "nó sử dụng dấu ngoặc vuông [] và tốt nhất là thay thế. cho phần mở rộng tệp bằng ký tự #.

Không có" Nhà cung cấp OLEDB cho tệp văn bản "nhưng ví dụ của bạn cho thấy việc sử dụng Nhà cung cấp OLEDB Jet 4.0 với Văn bản có thể cài đặt ISAM, điều đó thật tuyệt.

Processing Text Databases cung cấp nhiều thông tin về chủ đề này nói chung, sử dụng VBScript cho hầu hết các ví dụ nhưng khá nhiều tất cả áp dụng cho VB6 là tốt.

+0

+1. Đã sửa lại nhận xét của tôi cho phù hợp ... – MarkJ

0

Chỉ cần có bộ nhớ từ quá khứ xa và nếu tôi nhớ đúng nguồn dữ liệu là thư mục tệp được giữ trong và trong phần chọn bạn chỉ có tên tệp mà không có đường dẫn.

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 

(giả sử các tập tin là trong App.Path)