I мне не разрешено комментировать, но это скорее небольшое предложение для решения Parfait выше. У меня возникли проблемы с выполнением кода, потому что Jsonconverter отсутствовал. Если вы выполните шаги Parfait, убедитесь, что вы также включили JsonConverter в качестве модуля в Access VBA. Вы можете найти этот модуль в файле Excel при условии от VBA-JSON
Выполните следующие действия, чтобы установить VBA-JSON под Access:.
- Загрузить Specs.bas в качестве модуля (импорт ..)
- Открыть Excel, нажмите Alt + F11, откройте модуль JSONConverter, Скопировать все (STRG + A, STRG + C)
- OpenACCESS, нажмите Alt + F11, создать новый модуль, назовите его JsonConverter, Вставить весь код (STRG + V)
- Reference Microsoft Scripting выполнения
В вашем коде, если ParseJson не найден, используйте эту ссылку:
Dim p As Object
Set p = JSonConverter.ParseJson(jsonStr)
Это мой полный код:
Public Sub import()
''''CREATE TABLE START''''
Dim myTable As TableDef
Set myTable = CurrentDb.CreateTableDef(tablename)
myTable.Fields.Append myTable.CreateField("col1", dbText)
myTable.Fields.Append myTable.CreateField("col2", dbText)
myTable.Fields.Append myTable.CreateField("col3", dbText)
myTable.Fields.Append myTable.CreateField("col4", dbDate)
myTable.Fields.Append myTable.CreateField("col5", dbText)
CurrentDb.TableDefs.Append myTable
Application.RefreshDatabaseWindow
''''CREATE TABLE END''''
JSONImport path + myfile, tablename
End Sub
Public Sub JSONImport(ByVal path_file As String, ByVal tablename As String)
Dim db As Database, qdef As QueryDef
Dim FileNum As Integer
Dim DataLine As String, jsonStr As String, strSQL As String
Dim element As Variant
Set db = CurrentDb
' READ FROM EXTERNAL FILE
FileNum = FreeFile()
Open path_file For Input As #FileNum
' PARSE FILE STRING
jsonStr = ""
While Not EOF(FileNum)
Line Input #FileNum, DataLine
jsonStr = jsonStr & DataLine & vbNewLine
Wend
Close #FileNum
Dim p As Object
Set p = JSonConverter.ParseJson(jsonStr)
' ITERATE THROUGH DATA ROWS, APPENDING TO TABLE
For Each element In p
strSQL = "PARAMETERS [col1] Text(255), [col2] Text(255), [col3] Text(255), [col4] Date, [col5] Text(255); " _
& "INSERT INTO " & tablename & "(col1, col2, col3, col4, col5) VALUES ([col1], [col2], [col3], [col4], [col5]);"
Set qdef = db.CreateQueryDef("", strSQL)
qdef!col1 = element("fullname")
qdef!col2 = element("id")
qdef!col3 = element("text")
qdef!col4 = CDate(Replace(element("timestamp"), "T", " "))
qdef!col5 = element("user")
qdef.Execute
Next element
'Rename Fields
Dim fld As DAO.Field
Dim tdf As DAO.TableDef
Set tdf = db.TableDefs(tablename)
Set fld = tdf.Fields("col1")
fld.Name = "fullname"
Set fld = tdf.Fields("col2")
fld.Name = "id"
Set fld = tdf.Fields("col3")
fld.Name = "text"
Set fld = tdf.Fields("col4")
fld.Name = "timestamp"
Set fld = tdf.Fields("col5")
fld.Name = "user"
db.Close
Set db = Nothing
Set fld = Nothing
Set tdf = Nothing
Set element = Nothing
Set p = Nothing
Set qdf = Nothing
End Sub
Моя структура JSON:
{
"fullname": "Henry Timor",
"id": "141217245735560741",
"text": "How must it feel to know you have lost.",
"timestamp": "2015-07-22T05:45:06",
"user": "henry_t"
}
Вы также можете просмотреть модули JSON здесь: https://github.com/CactusData/VBA.CVRAPI ... с использованием коллекций для хранения данных. Это немного, но VBA и JSON не созданы друг для друга - простых и умных решений нет. – Gustav
Не могли бы вы поделиться примером JSON, как у вас, и получить таблицу (ы) DB, которую вы хотите получить в результате? Рассмотрим [этот метод] (http://stackoverflow.com/a/30494373/2165759) также. – omegastripes
Ваш вопрос подразумевает, что вам не удобно с VBA, я ошибаюсь в этом? –