База данных на основе текстовых файлов из Excel 2010 VBA - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать базу данных, которая использует простые текстовые файлы в качестве источников данных для своих таблиц.Кажется, это единственный вариант, потому что я не могу установить что-то другое на корпоративных ПК.Я попытался использовать различные строки подключения для инициализации базы данных (см. Код ниже).

У меня есть две проблемы: во-первых, если мне удается соединиться с strConnectionString2, возникает ошибка, что десятичный разделитель (запятая) соответствует разделителю текста (запятая).Это НЕ вариант изменить что-либо в реестре, потому что компьютеры сильно защищены.

Вторая проблема: если я использую ConnectionString3, я получаю сообщение об ошибке «Слишком длинное имя источника данных».Когда я пытаюсь использовать более короткий, он говорит, что источник данных не может быть найден.Система 64-битная Windows 7

Любая помощь будет очень ценится.Также принимаются альтернативные методы, но они не могут включать установку какого-либо дополнительного программного обеспечения и изменение чего-либо в каталоге.Изменение десятичного разделителя в Excel также невозможно, так как это может привести к сбою других рабочих процессов.

Sub testDatabase()

Dim strDatabaseDirectory As String
Dim strConnectionString1 As String
Dim strConnectionString2 As String
Dim strConnectionString3 As String
Dim dbMurenaDatabase As ADODB.Connection
Dim rcsRecords As ADODB.Recordset

strDatabaseDirectory1 = ThisWorkbook.path & "\database\"
strDatabaseDirectory2 = "Libraries\Documents"
strDatabaseDirectory3 = "C:\db"
strConnectionString1 = "Data Source='" & strDatabaseDirectory & "';Delimiter=';'"
strConnectionString2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDatabaseDirectory1 & ";" & _
                        "Extended Properties=""" & "text;HDR=Yes;FMT=Delimited""" & ";"
strConnectionString3 = "Data Source='" & strDatabaseDirectory3 & "';Delimiter=';';" & _
                        "Has Quotes=True;Skip Rows=0;Has Header=True;Comment Prefix='#';" & _
                        "Column Type=String,String,String,Int32,Boolean,String,String;" & _
                        "Trim spaces=False;Ignore Empty Lines=True;"

Set dbMurenaDatabase = New ADODB.Connection
dbMurenaDatabase.Open strConnectionString3

dbMurenaDatabase.Execute "CREATE TABLE [firstTable.txt] (FirstCol TEXT, SecCol TEXT)"
dbMurenaDatabase.Execute "INSERT INTO [firstTable.txt] Values ('smth', 'smth2');"
dbMurenaDatabase.Execute "SELECT * FROM firstTable.txt"

End Sub

1 Ответ

0 голосов
/ 27 сентября 2018

Я знаю, что VBA умирает, и никто, вероятно, не найдет это полезным, но вот решение.

  1. Драйвер для использования.Драйвер, который я использовал, был Microsoft Text ODBC Driver.что он делает, он создает базу данных, чьи данные хранятся в виде текстовых файлов.

Он объявлен следующим образом:

Dim strDatabaseDirectory As String
Dim strConnectionString1 As String
Dim strConnectionString2 As String
Dim strConnectionString3 As String
Dim dbMurenaDatabase As ADODB.Connection
Dim rcsRecords As ADODB.Recordset

strDatabaseDirectory1 = ThisWorkbook.path & "\database\"
strConnectionString1 = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" &    strDatabaseDirectory1 & ";" & _
                        "Extensions=asc,csv,tab,txt;"

Теперь, когда вы инициализировали базу данных, вы еще не установили параметры для таблиц.Это может привести к конфликтам, если ваш десятичный разделитель и разделитель базы данных совпадают.Решение очень простое: вы должны установить все параметры в INI-файле (просто создайте текстовый файл и измените расширение).Пример того, как это сделать, приведен здесь: https://www.connectionstrings.com/microsoft-text-odbc-driver/info-and-download/

Там вы устанавливаете разделитель и свойства полей.CREATE TABLE из VBA не работает для меня, потому что там вы не можете указать разделители.Таким образом, вы создаете все текстовые файлы (таблицы), файл .ini, и все работает просто отлично.

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