Импорт файла CSV в базу данных SQLITE через VBA - Access - PullRequest
0 голосов
/ 26 марта 2020

У меня есть проект в Access VBA, где мне нужно автоматизировать импорт файла CSV (MAX 15MB) в связанную базу данных SQLITE. Все сделано на локальной машине. Что-то похожее на MS SQL (как написано ниже), которое будет достигнуто с помощью запроса или VBA?

strConn = "DRIVER=ODBC Driver 13 for SQL Server;Server=" & serv & ";Database=" & databs & ";Uid=" & usern & ";Password=" & pwd & ";"
cn.Open strConn

Strsql1 = "BULK INSERT dbo.SEARCHUSRTABLE2 FROM '" & insertfile & "' WITH(FIELDTERMINATOR = ',',ROWTERMINATOR = '\n');"
Set rs = cn.Execute(Strsql)

1 Ответ

1 голос
/ 28 марта 2020

Хорошо, нам нужно несколько вещей.

Для начала нам нужно из Access:

Просмотреть файл CSV - выберите

Импортировать файл CSV в таблицу .

Теперь экспортируем в SQLite.

Но здесь мы пропустили несколько вопросов.

Во-первых, база данных SQLite - это та же база данных и в том же месте. все время?

Установили ли вы драйвер SQLite ODB C и смогли ли вы ссылаться на SQLite из Access?

Итак, нам нужно разобраться со всем вышеперечисленным , Особенно связь с SQLite.

И не ясно, планируете ли вы / хотите создать новую таблицу для каждого импорта CSV, или вы собираетесь очистить таблицу и заново заполнить?

Давайте предположим следующее:

У вас есть связанная таблица с SQLite, работающая из Access.

Вы можете щелкнуть эту связанную таблицу в Access, и вы можете просматривать / просматривать и даже редактировать данные из Access, но базу данных и таблица, конечно, является связанной таблицей с SQLite.

Если все вышеперечисленное работает? И ВСЕ из вышеперечисленного пока принимает нулевой код. Таким образом, вам «нужно», чтобы приведенная выше часть работала.

И мы предполагаем, что каждый импорт CSV должен создавать новую таблицу в базе данных SQLite?

Тогда код будет выглядеть следующим образом:

Вставьте этот саб в стандартный модуль кода доступа.

Сохраните его, а затем, поместив курсор в любом месте кода, нажмите f5 для запуска.

  Sub CsvImportToSQL()

      Dim strCsvFile    As String

      Dim f             As Object
      Set f = Application.FileDialog(3)
      f.Filters.Clear
      f.Filters.Add "Csv file", "*.csv"
      If f.Show = False Then
        ' no file selected - quite
        Exit Sub
      End If

     Dim strFromTable  As String
     strFromTable = f.SelectedItems(1)

     Dim strTable      As String
     ' get only name of file without extension for Access table name
     strTable = Mid(strFromTable, InStrRev(strFromTable, "\") + 1)
     strTable = Left(strTable, InStr(strTable, ".") - 1)

     strTable = InputBox("Select table = " & strFromTable, "Inport to Access table", strTable)

     If strTable = "" Then
        ' user hit cancel - exit
        Exit Sub
     End If

     ' transfer the table into access

     DoCmd.TransferText acImportDelim, , strTable, strFromTable, True

     ' ok, now ask for table name to export to in SQLite

     Dim strSQLiteTable   As String
     strSQLiteTable = strTable

     strSQLiteTable = InputBox("Table name to export for SQLite", "SQL lite table name", strSQLiteTable)
     If strSQLiteTable = "" Then
        ' user cancel - don't transfer - exit
        Exit Sub
     End If

     ' now transfer table to SQL site

     Dim strCon As String
     strCon = CurrentDb.TableDefs("Hotels").Connect
     ' (replace above Hotels with a KNOWN WORKING LINKED table to SQLite)

     DoCmd.TransferDatabase acExport, "ODBC Database", strCon, acTable, strTable, strSQLiteTable

     MsgBox "table exported to SQLITE"



  End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...