I am writing an application in C# (.NET 4.0) which has to integrate with another, much older application. Part of the requirement is that my program must read data from three Btrieve files. I can assume that these Btrieve data files will already exist on the computers where my program is installed, and I can also assume that Pervasive PSQL V9 will also be installed and the relational and transactional service programs are running.
I have the associated DDF files, and I can install them as part of my application. The way they were created I have to put them in a different directory to where the Btrieve data files are. (They have to be a sub-directory of the directory where the data files are).
I didn't know anything about Pervasive or Btrieve when I started, but after a bit of experimentation I have got to the point where I can create a DSN using the 32 bit ODBC administration tool, and I can read from the data files using the ODBC ADO connector. All good so far.
My question is, is it possible to read from these files from my .NET program without having to create an ODBC DSN on the machine? In other words, is it possible to specify the directory where the *.DAT files are and the directory where the *.DDF files are in the ODBC connection string?
I'm not committed to using ODBC, I'm happy to use OLEDB or any other technology that allows me to reliably read from these files using .NET.
While a DSN-less connection allows your to connect without a DSN, you would still need a Database Name. Pervasive Database Names can be created on the fly using DTI or DTO. Using C#, I would suggest DTO.
If you can't create a Database Name, you can use OLEDB. It supports using a path in the Data Source parameter of the connection string as documented in the Remote Connections section of the OLEDB documentation.
One more caveat, make sure to compile your .NET program as x86 and not AnyCPU. The Pervasive OLEDB provider is only 32 bit. If you install your app on a 64 bit Operating System compiled as AnyCPU, it will look for a 64 bit provider and fail.
You should search for DSN-less connection. Instead of passing DSN=mydsn to the connect method (where mydsn is the DSN you set up) you pass DRIVER=xxx (where xxx is the name of the driver) and any other attributes it needs to direct it at the files. There are loads of sites with lists of connection strings for different ODBC drivers so one is bound to list Pervasive if you cannot locate the documentation for your ODBC driver. Another alternative to so look at your DSN in the registry where you'll find the names of the attributes you need to specify.
Related
From reading the docs, which are not to the point imho, when wanting to extract from a Source Oracle DB:
do you need to install OGG Classic on the same Server of the Source Oracle DB always for the Extract?
or, can we move with a script the archived log files to another machine?
or can the extract work out that the Oracle Source DB is on another server via tnsnames, ldap, oranames, etc?
That is not clear to me from the docs.
Looking at this from licensing cost issues on big db server. Sure, we can shareplex to another machine.
Picture provided:
All three scenarios are supported. Migrating log files from one machine to another is referred to as Downstream Capture and using GoldenGate on one machine to capture from the DBMS over the network is referred to as Remote Capture.
In addition, with Oracle GoldenGate 19.1 for Oracle, you can capture across operating systems. This means you can run GoldenGate on a Linux machine to capture data from your AIX DBMS environment.
I have my windows 10 pc with ODBC datasource as my_odbc
This will connect to my remote informix server.
So for I am using this odbc for my local as well as php website development.
I want to use Adonis Js which uses knex.
How to give database connection properties, as to that of mysql, pg, mssql etc.
using odbc data source.
my connection is "DSN=my_odbc;UID=vijayan;PWD=vijayan;"
No.
But you can write your own ODBC client. There was some initial work done for it, but nowadays all new dialects should be added as separate npm modules like described in CONTRIBUTING.md https://github.com/tgriesser/knex/blob/master/CONTRIBUTING.md#i-would-like-to-add-support-for-new-dialect-to-knex-is-it-possible
(I'm not going to copy-paste that boilerplate code here, because it is more probable that knex changes and that linked document changes in compared to knex github getting offline)
Initial work that was done for the support is found here: https://github.com/tgriesser/knex/pull/2116
In which way can I access another database (not OpenEdge) via ODBC from OpenEdge without using DataDirect?
The use case is data migration from one system to another, so performance cannot be neglected completely but it's a one time thing that is allowed to take a little longer.
Why without DataDirect? Extra cost. Our client doesn't have the license.
Why not dump and load (via CSV f.e.)? The client doesn't want to do the mapping between the systems this way but with database views.
As far as I know there is no way to directly access other database if you're not using DataDirect or something like DataServer for Oracle etc.
However, you could call a third party ODBC library as external functions, and write your handle your queries to the foreign database by accessing. This wouldn't allow you to use OpenEdge constructs like FOR EACH, buffers etc, but it would allow you to retrieve the data and process it using custom functions, and then insert into the OpenEdge tables etc.
See the following KB for accessing external library functions:
https://knowledgebase.progress.com/articles/Article/P183546
Another approach you could use, assuming your tables are in OpenEdge already, is to use the OpenEdge SQL92 ODBC driver from another language (C/VB/Java/whatever works for you), and read the data from the source database and insert into OpenEdge via SQL92 ODBC.
Looking at the website there are downloadable ODBC drivers for most platforms:
https://www.progress.com/odbc/openedge
I have an Access 97 database that serves as a front-end, via ODBC and linked tables, to a MySQL database, running under Wiin7-64. (Yes, it does work!) The database contains info about places of worship and pilgrimage in the part of France where I live. In addition, I have tens of thousands of photos of the sites in Photoshop Elements 9. The underlying database engine of PSE9 is SQLite, and interesting data about the photos is there (titles, which ones I like, etc.). I would like to link from Access to the tables in the SQLite database as I do to the MySQL database.
My problem: I am unable to create an ODBC connection to the PSE9 SQLite database. I have done multiple searches via Google, read multiple posts at stackoverflow and elsewhere, tried various suggestions, and still no ODBC connection, neither in the 32bit or 64bit ODBC tools of Win7-64. I'm stumped.
So far, I've
downloaded sqliteodbc.exe from http://www.ch-werner.de/sqliteodbc/ and run it (multiple times)
copied sqlite3odbc.dll, sqlite3.def, sqlite3.dll, and sqlite3.exe to the \windows\system32 folder
entered this command at the Windows command line: "rundll32 c:\windows\system32\sqlite3odbc.dll,install", which produced this error message "Copy c:\windows\system32\sqlite3odbc.dll to c:\windows\system32\sqlite3odbc.dll failed."
When I look at the ODBC and ODBC (32-bit) windows, I don't find a User DSN, System DSN or File DSN for SQLite. Any suggestions?
Thanks,
Harvey in balmy Bordeaux
Whats with all that copying dlls around - you don't need to do any of that. Just download the 32 bit version and double click on it - the driver will be installed. Then find the 32 bit ODBC Administrator (note there are 2 on 64 bit windows and only one is 32 bit), fire it up and create a DSN. You should see sqlite3 in the drivers tab.
DSNs are not there automatically, you have to create them yourself. There should be an "Add" button in the ODBC administrator. Then you select the type of driver "SQLite", and then configure the details in the next dialog.
A DSN normally contains all the configuration information needed to connect to a specific database instance so that all this - which may be different from one database system to the other - can be referenced by one name. That is where the name "Data Source Name" comes from.
What I want is a Powerbuilder application that runs on Windows that runs from a CD (or some other external disk) that can read from an ASA database whose file is located on the same disk. But I want to do so without deploying the ODBC or OLEDB drivers. That is, I do not want to have to copy the driver files to the client's hard disk or add any registry entries. Is this possible?
In the Powerbuilder and ASA documentation they mention something about "embedded database connections" and supposedly you can specify the executable for the database server in the connection string. But that was no help.
When you attempt to connect to a database and "ODBC" is specified for the DBMS property of the transaction object, PowerBuilder is going to want to start loading drivers and looking to an ODBC datasource for the driver's info.
The only thing I can think to try, is to create all the registry entries at run time and point them to the driver files and the .db file on the CD. You might be able to make things easier with a file based datasource on the CD already, but you'll still need to create registry entries to setup the driver details. Then you can remove all those entries when you disconnect/close the application. I don't think you can do this completely without registry entries.
You do have to deploy the ODBC driver, that's how PB talks to SQL Anywhere. You dont have to create a DNS entry though, you can usr a DNSless connection.
http://www.carlprothman.net/Default.aspx?tabid=90#ODBCDriverForSybaseSQLAnywhere
Since you aren't getting much feedback I thought I'd offer this. I've done this with MS Access, but MS Access is much easier to connect to and most Windows PC's are able to connect via File based DSN.
You definitely want to avoid ODBC if at all possible look for File based DSN in ASA, but because it is more of a full database engine I doubt it is possible without ODBC and setting up ODBC via Registry Entries is possible but no fun at all especially if your clients are running different versions of Windows.
Here is the connect string I used for something similar but MS Access. I choose Access for this exact reason, it was for a RPG program and I wanted a database but didn't want to mess with ODBC.
Sample:
"Connectstring='Driver={Microsoft Access Driver
(*.mdb)};UID=abc;PWD=123; Dbq=C:\Program Files\Mafia Manager\mm.mdb;
Exclusive=1;'"