How to copy a database's table to another database's corresponding one using TSQLConnection/dbExpress? - delphi

I'm using C++ Builder (or Delphi 2007 and XE2) using DBExpress.
I connected two databases one for firebird(my local hard disk) one for MySQL(on Web)
using TSQLConnection.
Then, my question is ...
how can i use(make) SQL statement(or anything) to copy one table in Firebird into another table in MySQL?
any comment will be very appreciate.. thanks a lot in advance..

You can't copy the content from Firebird table to an MySQL Table using a SQL statement. Another RDBMS has this functionality for example Sql Server has Linked Servers and MySQL has FEDERATED engine (only works for MySQL Databases).
So I eee two options to handle this task:
Iterate over the Datasets using a SqlExpr.TSQLQuery or a SqlExpr.TSQLDataSet and then Insert each record (row) manually in the MySQL Table.
Use a TClientDataSet to dump the Firebird table data using the SaveToFile method and then with another TClientDataSet load the Data using the LoadFromFile method, finally you can merge the Data of the second TClientDataSet to the MySQL Table.

Related

How can I create SSIS using stored procedure?

A group in my company granted me access to execute a stored procedure, and the stored procedure, if executed from excel, gives me a table. I want to store this table in SQL via SSIS.
I tried this via:
Within DFT, I created a connection using SQL Server Native Client. And within source assissstant, I entered SQL command
EXEC [dbname].[storedprocedure]
But then it returns an error:
No column information was returned by the SQL command.
Is there anyway to make this work?
Add the proper data source and then connect it to the OLE DB Command. Under the Connection Manager tab, setup your connection. Under the Component Properties Tab in the SqlCommand line enter EXEC [Stored Procedure Name] ? use as many ?s for as many variables declared in your Stored Procedure. Under the Column Mappings tab you will map your variables from the Stored Procedure to the relevant columns in your SQL Server DB.

FireDAC SQLite backup saves no data

When executing the following code, the database file only has table names. No field names or actual data seems to be getting copied over.
procedure TdbModule.BackupDB();
begin
ADConnection1.Connected := True;
ADSQLiteBackup1.DatabaseObj := ADConnection1.CliObj;
ADSQLiteBackup1.DestDatabase := 'd:\dan.sdb';
ADSQLiteBackup1.Backup;
end;
The dan.sdb file is being created, it just lacks any backup data. The application displays data and works fine.
Ideas?
Do you have a SQLite in-memory database with several TADMemTable / other datasets connected to it using FireDAC LocalSQL ?
If yes, then backup will not copy content of the datasets, because they are represented as SQLite virtual tables. Backup copies only content of the regular tables.
As workaround you should:
perform CREATE TABLE ... AS SELECT ... commands for each ADMemTable to copy them to regular tables;
set ADLocalSQL.Active to False;
perform backup.

How can I create a D-Base IV table using Delphi ADO components please?

I am working on the software for an instrument that logs batch results into single DBase 4 (*.dbf) disk files in a folder. In preparation for adding new logging analysis capability which is planned to work with multiple of these DBF files, I am changing the existing simple BDE TTable and CreateTable which reopen and create a new DBF file respectively into use of the Delphi ADO components.
Using other suggestion here on SO I have successfuly created a test application which opens an existing DBF file using the following core code using a TAdoDataSet and a TAdoConnection:
ADODataSet1.DisableControls;
try
S := ExtractFileDir( ParamStr(0) ); //set the dbf folder location here
ADOConnection1.LoginPrompt:=false;
ADOConnection1.ConnectionString:=Format('Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;Extended Properties=dBase IV;',[S]);
ADOConnection1.Connected:=True;
ADODataSet1.CommandText:='Select * from test.dbf'; //The SQL query uses the name of the dbf file
ADODataSet1.Open;
finally
AdoDataSet1.EnableControls;
end;
This works fine but before my DBF is used for the first time I will also need to creat an empty DBF file ready to add my log records. I could do this by opening an exising 'empty' DBF file each time but I was hoping that there was an SQL? way of creating my file if I have already created and defined my fields (which is easy for me). I tried this with a TAdoTable where I could created the required fields but I could not find any examples of how to get this table structure out onto disk when nothing was already there, mainly because there are so many ADO examples but almost always working on existing data tables.
Can anyone help me create a sample DFB table file with a couple of fields using ADO components please? I'm sure I can then build on that.
Many Thanks.
Use TADOCommand and execute Create Table SQL, for example something like this :
Create Table Test (TestField1 char(64), TestField2 integer)

How to use vfpoledb

I have installed vfpoledb I am running it against VFP 8 tables. When I execute the command
connection = SQLSTRINGCONNECT([Provider=vfpoledb;Data Source=C:\temp\;Collating Sequence=general;])
I get a popup dialog with SELECT DATA SOURCE
I am trying to use the connection string specified here http://www.connectionstrings.com/visual-foxpro#89 where I want access to free tables using OLEDB. I can connect using an ODBC connection string.
Am I using it correctly?
You don't specify the language you are trying to build against. Here's another link of an instance using OleDB to connect to VFP Tables
It may not be a perfect match, but does show how to properly create an OleDB connection to the path where the VFP data exists, and perform a SQL-Insert using parameterized queries (prevent sql injection), and attempting to pack/delete from too.
Once you get the basic connection down, and basics on parameterizing queries, your queries can be like almost any other VFP SQL-Select, Update, Delete query.
From within Foxpro you need to use the ADODB connector:
oConn = CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString = "Provider=VFPOLEDB.1;Data Source=C:\temp\;Password="";Collating Sequence=MACHINE;"

Missing table in Visual FoxPro DB

I'm using VFPOLEDB to connect to an VFP database (directory of dbf files).
Once connected, I manually create a table using:
create dbf critera(field_name c(30))
At this point, I verify a new dbf file is created in the database directory. I then try to query the new table, it should return no rows.
select * from criteria
I am presented with the following error:
File "criteria.dbf" does not exit.
Strange, eh?
So I manually delete the DBF file (VFPOLEDB doesn't support drop) and then run the following query.
create db criteria(field_name c(30)); select * from criteria
And get no error, no results returned as expected.
What gives? Any suggestions?
First, (could be a type-o), you had
create dbf Critera (missing the "i")
and then
select * from Criteria (has the "i")
If not that... for your connection string, are you just connecting to the PATH that the .dbf files will be located, or are you explicitly connecting to a path and database.
If just a path
string YourVFPConnectionString =
"Provider=VFPOLEDB.1;Data Source=c:\\SomePath\\WhereDataIs\\";
Or with a specific database container
string YourVFPConnectionString =
"Provider=VFPOLEDB.1;Data Source=c:\\SomePath\\WhereDataIs\\YourDatabase.dbc";
It might be easier to test just by pointing to the directory. The VFP OleDB provider will consider the path the root for any tables queried vs a full .dbc (database container) which could give you access to other stored procedures and such.
The OleDb doesn't support "DROP TABLE". You can still delete a file by running an ERASE "Criteria.dbf" via the OleDbCommand's ExecuteNonQuery()
As for the last one, VFP doesn't utilize the ";" as a break between statements like other SQL engines do where you could send a series of queries all together one after another. ";" in VFP is considered a "this command continues on the next line", and should have thrown an exception is it wouldn't have been able to process it.

Resources