Как экспортировать базу данных Access в формате CSV? - PullRequest
1 голос
/ 24 февраля 2009

У меня есть база данных Access, которую я хотел бы экспортировать в текстовый файл. У меня есть схема, определенная в Access, и в настоящее время использую макрос для ее экспорта. Я хотел бы использовать VBScript, чтобы всегда добавлять результат запроса в один и тот же файл. Если невозможно использовать мою определенную схему, мне нужно только, чтобы поля были разделены запятой и заключены в ", а текстовый файл должен иметь формат UTF-8.

Я нашел следующий фрагмент кода, но я не уверен, как принять его для своих нужд.

db = "C:\Docs\LTD.mdb"
TextExportFile = "C:\Docs\Exp.txt"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open _
   "Provider = Microsoft.Jet.OLEDB.4.0; " & _
   "Data Source =" & db

strSQL = "SELECT * FROM tblMembers"

rs.Open strSQL, cn, 3, 3

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.CreateTextFile(TextExportFile, True)

a = rs.GetString

f.WriteLine a

f.Close

Ответы [ 4 ]

1 голос
/ 24 февраля 2009

НАПРАВЛЕНИЕ (2) Это какой-то VBA, запущенный из базы данных Access:

Sub InsertRecs()
Set db = CurrentDb

'DSN=Suitable system DSN for MySQL
'Then, depending on your set up, you can incude:
'Database=DBName;
'Trusted_Connection=Yes;

'NameOfMySQLTable
strSQL = "INSERT INTO [ODBC;DSN=baywotch;].tblAuction Select * FROM tblAuction;"

db.Execute strSQL, dbFailOnError
End Sub

Это то же самое, но в VBScript с использованием DAO:

Dim objEngine
Dim objWS
Dim objDB
Dim db: db = "C:\Docs\baywotch.db5"

Set objEngine = wscript.CreateObject("DAO.DBEngine.36")

Set objDB = objEngine.OpenDatabase(db)

objDB.Execute "INSERT INTO [ODBC;DSN=baywotch].[tblAuction] SELECT * FROM tblAuction;"

НАПРАВЛЕНИЕ (1)

Я предлагаю совершенно другое направление, и это позволит MySQL сделать работу:

MySQL Migration Toolkit

Я проверил это на вашей базе данных, и, похоже, он правильно импортируется, занимает всего несколько минут и генерирует всевозможные повторно используемые сценарии и т. Д.

Если у вас возникли проблемы с настройкой MySQL, вы можете прочитать: 9.1.4. Наборы символов соединения и сопоставления

DiRECTION (0)

переписать (2)

'========================================================================'
'
'                   FROM: AnthonyWJones, see post ' 
'
'========================================================================'
Dim db: db = "C:\Docs\baywotch.db5"
Dim exportDir: exportDir = "C:\Docs\" '" SO prettify does not do VB well
Dim exportFile: exportFile=NewFileName(exportDir)


Dim cn: Set cn = CreateObject("ADODB.Connection")

cn.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source =" & db

cn.Execute "SELECT * INTO [text;HDR=Yes;Database=" & exportDir & _
   ";CharacterSet=65001]." & exportFile & " FROM tblAuction"

'Export file

'========================================================================'

'Support functions

Function NewFileName(ExportPath)
Dim fs 
Dim NewFileTemp

Set fs = CreateObject("Scripting.FileSystemObject")

NewFileTemp = "CSV" & Year(Date) _
    & Right("00" & Month(Date),2) & Right("00" & Day(Date) ,2) & ".csv"

a = fs.FileExists(ExportPath & NewFileTemp)

i = 1
Do While a
    NewFileTemp = "CSV" & Year(Date) _
        & Right("00" & Month(Date),2) & Right("00" & Day(Date) ,2) & "_" & i & ".csv"

    a = fs.FileExists(ExportPath & NewFileTemp)
    i = i + 1
    If i > 9 Then
        'Nine seems enough times per day to be 
        'exporting a table
        a = True
        MsgBox "Too many attempts"
        WScript.Quit
    End If
Loop

NewFileName = NewFileTemp
End Function 
1 голос
/ 24 февраля 2009

Пожалуй, самый простой способ - использовать [text ...]. Имя файла: -

Dim db: db = "C:\Docs\LTD.mdb"
Dim exportDir: exportDir = "C:\Docs\" '" SO prettify does not do VB well
Dim exportFile: exportFile = "Exp.txt"

Dim cn: Set cn = CreateObject("ADODB.Connection")

cn.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source =" & db

cn.Execute "SELECT * INTO [text;HDR=Yes;Database=" & exportDir & _
   ";CharacterSet=65001]." & exportFile & " FROM tblMembers"

FileSystemObject не поможет вам, поскольку он не поддерживает UTF-8. UTF-8 достигается путем указания CharacterSet = 65001 (65001 - кодовая страница UTF-8). Обратите внимание, что созданный файл не содержит спецификацию UTF-8, но созданный файл schema.ini заметит, что для CharacterSet используется UTF-8.

Обратите внимание, что это не соответствует вашим требованиям к добавлению. Вы уверены, что в любом случае это имеет смысл, разве вы не получите много дубликатов?

Редактировать

Вышеуказанное скорректировано с учетом требования UTF-8. Вы можете просто добавить что-то вроде даты, чтобы создать несколько файлов снимков для таблицы.

0 голосов
/ 24 февраля 2009

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adClipString = 2
Const ForWriting = 2
Const ForAppending = 8
Const strDB = "C:\Docs\LTD.mdb"
Const strCSV = "C:\Docs\Exp.csv"

Set objAccessConnection = CreateObject("ADODB.Connection")
objAccessConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strDB

Set objAccessRecordset = CreateObject("ADODB.Recordset")

strAccessQuery =  "SELECT * FROM tblMembers"
objAccessRecordset.Open strAccessQuery, objAccessConnection, adOpenStatic, adLockOptimistic

Set objCSV = CreateObject("Scripting.FileSystemObject").OpenTextFile(strCSV, ForAppending, True)
objCSV.Write objAccessRecordset.GetString(adClipString,,",",CRLF)

objCSV.Close
Set objCSV = Nothing
objAccessRecordset.Close
Set objAccessRecordset = Nothing
objAccessConnection.Close
Set objAccessConnection = Nothing
0 голосов
/ 24 февраля 2009

Я пронумеровал строки для справки.

1. db = "C:\Docs\LTD.mdb"
2. TextExportFile = "C:\Docs\Exp.txt"
3. strSQL = "SELECT * FROM tblMembers"
4. Set f = fs.CreateTextFile(TextExportFile, True)

Строка 1 - это текущий файл базы данных доступа, с которым вы работаете. в данном случае это LTD.mdb
Строка 2 - это имя файла, который вы собираетесь записать / добавить. Это Exp.txt
Строка 3 - это оператор SQL, который будет использоваться для сбора данных.
Строка 4 - команда для открытия файла для записи.

Измените в строке 2 имя нужного файла.
Измените строку 3 на таблицу, которую вы хотите использовать. Выберите * будет использовать все столбцы, если вы хотите, чтобы только пара идентифицировала их по имени. выберите col1, col2 ... из mytable. Вы также можете захотеть использовать предложения where.

Измените строку 4 с CreateTextFile на OpenTextFile и используйте ForAppending для добавления. MSDN VBA

Я рисую пробел при форматировании строки. Один из способов, которыми я пользуюсь, - это изменить оператор select, добавив запятые. Например, выберите col1 & "," & col2 из mytable.

Для UTF-8 (у меня нет рабочего примера) Попробуйте:

utf = new String(a, 0, a.length, UTF-8);
f.WriteLine utf;

UTF-8 VBA

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