2015-11-24 97 views
0

我有一個csv文件(每週更新3次,我無法控制其格式,因此無法對其進行標準化),我創建了一個到MS Access的OBDC鏈接2016數據庫(我選擇MS Access來刷新我的技能,否則將在SQL中完成)。我已經嘗試了爲鏈接表設置OBDC鏈接的各種排列,但是沒有給出其他字段的最佳結構。逗號分隔在MS Access 2016字段中的文本查詢

CSV文件看起來是這樣的:

Fecha de Sorteo,Numero de sorteo,Numero de Juego,Nombre,Valores Principales,Comodines,DRAWNAME,Ganadores de Premio Mayor,Premio Mayor Garantizado 
"8/25/2002 12:00:00 AM","1714","1","main","31,34,26,1,2,28","16","Loto","0", 

我想創建一個查詢,以逗號分開場3到第6的組成部分。我看到很多使用InStr和Mid函數(如看到here)的例子將2或3個組件分開(但從未多於此)。

我是否必須創建多個表達式來將此字段分離爲其組件或者是他們的替代解決方案?

+0

看看這有助於https://開頭MSDN .microsoft.com/en-us/library/6x627e5f(v = vs.90).aspx –

回答

1

我建議使用Split function將數據寫入本地表。它將允許您將該字段拆分爲數組。然後使用VBA將整個記錄寫入Access。

所以,像這樣:

Dim db as Database 
Dim rec as Recordset 
Dim rec2 as Recordset 

Set db = CurrentDB 
Set rec = db.OpenRecordset("SELECT * FROM MyLinkedTable") 
Set rec2 = db.OpenRecordset("SELECT * FROM MyLocalTable") 

Do while rec.EOF = False 
    rec2.AddNew 
    rec2("Field1") = rec("Field1") 
    rec2("Field2" = rec("Field2") 
    strArray = Split(rec("Field3"), ",") 
    rec2("Part1") = strArray(0) 
    rec2("Part2") = strArray(1) 
    etc... 
    rec2.Update 
rec.MoveNext 

以上是「aircode」並沒有經過充分測試,但它可能是相當準確的,應該讓你開始。

+0

我只想指出我的答案是在CSV樣本更改前提交的,所以儘管Field3的位置不再準確,但它仍然是有效的通過一些額外的代碼調整來處理您的問題。 –

0

所以你的文件似乎遵循CSV規格,其中值可以括號之間放...

然後,您應該能夠直接打開它作爲一個ADODB記錄(*)。對應於「Valores Principales」數據的列將包含一個純文本字符串,這是您的6個值,由逗號分隔。

(*)不知道,如果它的工作原理與DAO記錄集...舉一個例子,檢查此鏈接(這是Excel中,但它是相同的邏輯):return csv file as recordset

+0

謝謝。我已經更新了該問題,以包含實際csv的剪輯。 (---只是我自己的壞標記)。 –

+0

而'field3'是一個多值場,或者只是一個普通的標準場? –

+0

六個逗號分隔的標準字段。 –