Convert DBF to CSV in MS Access - vba

In MS Access, is there a way using VBA to export an arbitrary DBF file to CSV format without needing to manually export it first / create a specification file? I just want to make a function that will work for any DBF. Is there a function that does this already?

Not an arbitrary file, but you can use
DoCmd.TransferDatabase acLink, ...
' and
DoCmd.TransferText acExportDelim, ...
to first link a specific dBase file, then export it to a text file. Using neither an import/link specification nor an export specification, the commands will use the default settings of Access.

Related

Access VBA - Export table to CSV file

I know many variations of this question were already asked but I kinda hit a dead end. I am trying to export a table with 2 columns into a .csv file. I tried it using similar question with this line of code.
Once without specification:
DoCmd.TransferText acExportDelim, , "+SapDebExp", "U:\Desktop\sapDeb1.csv", True
Once with specification:
DoCmd.TransferText acExportDelim, a11, "TSapDebExp", "U:\Desktop\sapDeb.csv", True
But no matter what I try all the columns are compressed into a single column in the created .csv
I also tried a workaround with this:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "TSapDebExp", "U:\Desktop\sapDeb.xlsx", True
FileCopy "U:\Desktop\sapDeb.xlsx", "U:\Desktop\sapDeb.csv"
This worked and the columns were separated in the end file but when you first open the .csv there comes a pop-up message saying "you sure you want to trust this file". This wouldn't be a problem since you only need to click it once but I want to import this file somewhere else (so no one will open the .csv file between the export and import). Is there another workaround or am I doing something wrong with the first method?

Export data from Oracle SQL Developer to Excel .xlsx

I have a small project where data from Oracle SQL Developer needs to be exported to Excel (using commands rather than tools in SLQ Developer), then create a graph.
Using "spool" I can export to csv fine (but cant make a graph in csv) but when I try to export to xlsx it corrupts the whole excel sheet saying
"Excel cannot open the file "ExcelFile.xlsx" because the file format or file extention
is not valid. Verify that the file has not been corrupted and that the
file extension mathces the format of the file."
Here is the code I used in SQL Developer.
spool FileLocation\ExcelFile.xlsm
SELECT * FROM Table;
spool off;
Is there any way I can stop the data from becoming corrupted or is there another way to export data to a .xlsx file?
Nooooooo.
set sqlformat csv
spool c:\file.sql
select * from table;
spool off;
then open the file in excel.
OR
Run your query interactively.
Right click on the grid, Export > XLSX. Open the file.
Spool only writes the query output to the file, it doesn't look at the file extension and figure out HOW to write the output at that point.
So you either have to code it yourself via the query, or use one of the format outputs we support
SET SQLFORMAT
CSV
JSON
DELIMITED
XML
HTML
INSERT
LOADER
Use 'help set sqlformat' for help.
Hi sql developer from what I know for exporting is using sqlplus(code is same) so perhabs there are other ways but this one should be good enough
I would try changing first line to look like this:
spool ExcelFile.xls
Probably you also need to turn on
SET MARKUP HTML ON
http://www.orahow.com/2015/09/spool-sqlplus-output-to-excel-format.html
Anyway there is workaround - you can just generate .CSV file and then open it in excel and save as .xlsx file
I was also facing the same problem then applied below code and it exported successfully..
import xlsxwriter
from xlsxwriter import Workbook
import cx_Oracle
import datetime
from datetime import date
dsn_tns = cx_Oracle.makedsn('HOST', 'PORTNO', sid='BGRDB')
db = cx_Oracle.connect(user=r'username', password='password', dsn=dsn_tns)
cursor = db.cursor()
workbook = xlsxwriter.Workbook('C:/Path/outfile.xlsx')
sheet = workbook.add_worksheet()
cursor.execute("select * from TABLENAME")
for r, row in enumerate(cursor.fetchall()):
for c, col in enumerate(row):
sheet.write(r, c, col)
workbook.close()
cursor.close()

Export Access Query WITHOUT Formatting

Relatively simple, but I can't seem to work it out. I want to export a query from access into a .csv (tab or comma delimited). When I do it manually through the wizard it works fine. But when I do it via vba, it comes complete with dash formatting that looks like the borders in the table!
I tried two methods and got the same results
DoCmd.OutputTo acOutputQuery, "Qry_GRADE", "MS-DOSText(*.txt)",_
"grade.csv", True, *ExportSpec*, , acExportQualityScreen
I used it with or without "ExportSpec", which is a specification I created when exporting manually.
This is the second method:
Dim testSQL As String
Dim qd As DAO.QueryDef
testSQL = "SELECT * FROM Qry_Grade"
Set qd = db.CreateQueryDef("tmpExport", testSQL)
DoCmd.TransferText acExportDelim, , "tmpExport",_
"C:\Users\Databoe\Documents\KidsTV\grade.csv"
db.QueryDefs.Delete "tmpExport"
This is a solution I've found which seems like overkill
And this is what the output looks like:
You can see it's not actually split any of the columns when opening the file in excel and that every second line is just a string of "-"'s
What about DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, myQueryName, myExportFileName, True for direct excel file export.
I tried your approaches, but I only get formated text with your first try DoCmd.OutputTo acOutputQuery, "Qry_GRADE", "MS-DOSText(*.txt)",_
"grade.csv", True, *ExportSpec*, , acExportQualityScreen which is as expected because it's a text export not csv.
With your second method I always get an excel compatible result. Maybe you have an error trap that hides an error and the first grade.csv is not overwritten. Use a different filename for the second method to prevent that.
Found a second trap. You don't specify full file path in first method, but in second. If C:\Users\Databoe\Documents\KidsTV is not your default document path, you have 2 grade.csv in different folders, but you maybe think that you only have one that gets overwritten.
I just ran into this problem myself, and found a great work around. It doesn't save as a .csv, but you can save as a comma delimited .txt file.
Use the export wizard on the External Data tab to export your query as a .txt file without formatting.
Once the file is exported you get a dialogue box asking if you want to save export steps. Click the box and save the export.
There is an action available in the Macro wizard called "Run Saved Import/Export." Select this action and choose your saved export from the dropdown menu.
Very frustrating that even now I cant seem to make Access export a simple csv file. I do not know why they think I need pretty formatting. Try this: open Excel, Click Get Data, From Database, From MicroSoft Access Database. Select the Access Database you wish to export from. Select the table/query we want saved as an csv. This will set up a link to this table. Once imported, save the Excel file to an csv file.

How to import csv file to Access with VBA code?

I have a csv file, that I need to import to Access using VBA.
I'm using the following code :
Call DoCmd.TransferText(acImportDelim, , TableName, SourceFile, HasFieldNames)
Where TableName, SourceFile and HasFieldNames are variables that store information about the file.
The import works but I have only one column imported in the table.
Does anyone have an idea please ?
The file is a csv with the separator ";" and has multiple columns.
Thank you.
"CSV" stands for "Comma Separated Values". Hence, the default import functionality looks for commas.
If you're using anything but commas, try this:
Start importing the file manually.
When you have specified the settings, just before clicking Finish, click Advanced...
Click "Save As" and specify a name (or accept the one proposed by Access).
Make note of the name you choose, let's say "Data Import Specification".
Click OK twice, then cancel the import.
Now use the import specification that you created in the code:
DoCmd.TransferText acImportDelim, "Data Import Specification", "Table1", "D:\Data.csv", False
You need to create (and use in .TransferText) an Import Specification where you specify the separator string. See e.g. these answers:
https://stackoverflow.com/a/3417067/3820271
https://stackoverflow.com/a/32806065/3820271

How can I change the path of a saved export from a form in Access using VBA?

I'm using 'Saved exports' to update an application in Access. Until recent it has been working fine because every user was using the same location. Since Windows 8, this location is protected and some have relocated the target file. An input box asks for the path to this new location.
Now I'm looking for a way to introduce this path into the Saved Export or a VBA-way to export forms and queries to the target file.
My research showed me a lot of export of data, but never the export of components.
If you really want to continue using Saved Exports to transfer the database objects then you'll have to tweak the XML in the ImportExportSpecification object as described in the answers to the question here:
How to specify a different file path for a saved Excel import
However, that approach offers little benefit in your case because you don't need the extra features of a Saved Import/Export (column mapping, date formats, character sets, etc.). It would be much more straightforward to use the VBA DoCmd.TransferDatabase method like this
targetDbSpec = "C:\Users\Public\SomeOtherDb.accdb"
DoCmd.TransferDatabase _
TransferType:=acExport, _
DatabaseType:="Microsoft Access", _
DatabaseName:=targetDbSpec, _
ObjectType:=acQuery, _
Source:="ClientQuery", _
Destination:="ExportedQuery"