BDE ParadoxからFireDAC TFDMemTableにデータコピーする方法[JAPAN]

Posted by on in Programming

毛利です。

 

古いC++Builder 5, 6 などののBDE ParadoxをFireDACのTFDMemTableに入れる方法をご紹介いたします。

今回行った手順

  1. C++Builder5で BDEを使いParadoxデータを作成
    1. (今回テストしたのは文字列と実数のみです。※コピーできない型もあります)
  2. Paradox(*.db)データを10.2東京が入っているWindows10に移動
  3. 10.2 TokyoにBDEをインストール
  4. TADOQueryを使いParadoxを抽出
  5. TFDMemTableに取り出したデータをコピー

他にも良い方法はあるかもしれませんが僕はこの方法を使いました。


 

[C++Builder5で BDEを使いParadoxデータを作成]

C++Builderのメニュー->ツール->[データベースデスクトップ]を起動しParadoxテーブルを作成しました。

table1.DBと言うテーブル名です。

参考:: http://ext-web.edu.sgu.ac.jp/HIKO/Prog03/SenpaiKyozai/Imai/2_2_1.htm

 


[データを10.2 Tokyoが入っているWindows10に移動]

C++Builder 5で作ったParadoxテーブル(table1.DB)を10.2 Tokyoが入っているWindows10にコピーします

「C:\Embarcadero\paradox\data 」にコピーしました。

 


[10.2にBDEをインストール]

https://cc.embarcadero.com/Item/30752

http://support.embarcadero.com/article/44082

 


[TADOQueryを使いParadoxのデータを抽出]

DEKOさんや、Mr.XRAYさんがドキュメントを書いています。

http://mrxray.on.coocan.jp/Delphi/plSamples/568_ADO_Paradox.htm

http://ht-deko.com/tech075.html

Mr.XRAYさんのドキュメントにあるようにレジストリの変更が必要です。

 

HKEY_LOCAL_MACHINE Software\Microsoft\Jet\4.0\Engines\Paradox\CollatingSequenceを "Japanese"に変更します

C++Builderのコード部分でTADOQueryのConnectionStringを設定とActive = trueです。

TDataSourceTDBGridと繋いでいます。

 

コードは下記のようにシンプルです

////
ADOQuery1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
"Data Source=c:¥¥Embarcadero¥¥paradox¥¥data;Extended Properties=Paradox 5.x;";
ADOQuery1->SQL->Text = "select * from table1.db";
ADOQuery1->Active = true;

 

 


[TFDMemTableに取り出したデータをコピー]

次は、Paradox のテーブルがTADOQueryに取り出せたので CopyDataSet()を使いFireDAC TFDMemTableにコピーします。

////
FDMemTable1->CopyDataSet(ADOQuery1,
	TFDCopyDataSetOptions() << Firedac_Comp_Dataset__3::coStructure << Firedac_Comp_Dataset__3::coAppend << Firedac_Comp_Dataset__3::coRestart);
FDMemTable1->Active = true;



TFDStanStorageJSONLinkを置いて TFDStorageFormat::sfJSONにし FDMemTable1のデータをTMemoに出力します

DataSource1->DataSet はFDMemTable1に繋ぎ変えています。

コードです

////
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	ADOQuery1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
		"Data Source=c:¥¥Embarcadero¥¥paradox¥¥data;Extended Properties=Paradox 5.x;";
	ADOQuery1->SQL->Text = "select * from table1.db";
	try
	{
		ADOQuery1->Active = true;

		FDMemTable1->CopyDataSet(ADOQuery1,
			TFDCopyDataSetOptions() << Firedac_Comp_Dataset__3::coStructure << Firedac_Comp_Dataset__3::coAppend << Firedac_Comp_Dataset__3::coRestart);
		FDMemTable1->Active = true;

		TStringStream* _ss = new TStringStream("", TEncoding::UTF8, false );
		try
		{
			FDMemTable1->SaveToStream( _ss, TFDStorageFormat::sfJSON );
			Memo1->Lines->Text = _ss->DataString;
		}
		__finally
		{
			delete _ss;
		}
	}
	catch(Exception &e1)
	{

	}
}
//---------------------------------------------------------------------------

 

ParadoxのテーブルデータがTFDMemTableにコピーできたら

あとはTFDBatchMoveなどを使い 新しいDB環境にコピーする事が可能です


 

https://community.embarcadero.com/blogs/entry/c-builder-firedac-tfdbatchmove?utm_source=dlvr.it&utm_medium=gplus

ParadoxからInterBaseへの移行(2000年作成 文書)



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: