VC++ DBアクセス( lightbox ライブラリでダイアログ処理 )


  CSV 出力



出力するファイルの参照
  
if( LOWORD(wParam) == IDC_BUTTON2 ) {
	LboxCommdlg Comm;
	LboxString Path;
	Comm.lpstrFilter = "CSV,*.csv";
	if ( Comm.SaveFileName( Path ) ) {
		Dlg->EditSetText( IDC_EDIT1, Path );
	}
}
  

文字列の処理として、4種類のオブジェクトを使用しています。

1) CString
大きなバッファを確保するのに使用しています。文字列を処理する為の本来の CString の機能は使用していません。

2) LboxString
タイアログ処理に lightbox ライブラリを使用している為、通常の文字列処理をこのクラスで行っています。

3) _variant_t
データベース処理に要求されるデータ型として使用しています。本来いろいろな型を持ちますが、
ここでは文字列として使用されています。

4) _bstr_t
データベースより戻される文字列の為の型として使用しています。
実際に使う場合は (LPTSTR) にキャストして使用します。

CSV出力
  
void CsvOut( LboxDlg &Dlg )
{
	LboxString Work;
	LboxString Table;

	// 出力ファイルパス
	Dlg.EditGetText( IDC_EDIT1, Work );
	if ( Work == "" ) {
		Dlg.MsgOk( "出力ファイルを指定して下さい   " );
		return;
	}

	// 対象テーブル
	if ( 0 >= Dlg.ListSelectedGetText( IDC_LIST1, Table ) ) {
		Dlg.MsgOk( "対象テーブルを選択して下さい   " );
		return;
	}

	// SQL
	Table = "select * from " + Table;

	// データ取得の為の大きなバッファを CString で確保
	CString strBuffer;
	LPTSTR szBuff = strBuffer.GetBufferSetLength( 4096 );

	// データベース処理用バッファ
	_variant_t VBuff;
	_bstr_t BBuff;

	// Query は variant で渡す
	VBuff = (LPTSTR)Table;

	ADO_QUERY(VBuff)

	// ファイルポインタを定義
	FILE *fp;

	// ファイルを開く
	fp = fopen( (LPTSTR)Work, "wt" );
	if ( NULL == fp ) {
		Dlg.MsgOk( "%s を OPEN できませんでした   ", (LPTSTR)Work );
		return;
	}

	// ループ用変数
	int i,nField;

	// フィールド数取得
	nField = pRs->Fields->Count;

	// チェックボックスの処理
	if ( Dlg.ButtonIsCheck( IDC_CHECK1 ) ) {
		// 列名取得
		VBuff = pRs->Fields->GetItem((LONG)0)->Name;
		// bstr に変換
		BBuff = VBuff;
		// LboxString の ファイル出力用バッファにセット
		Work = (LPTSTR)BBuff;

		for( i = 1; i < nField; i++ ) {
			VBuff = pRs->Fields->GetItem((LONG)i)->Name;
			BBuff = VBuff;
			Work += ",";
			Work += (LPTSTR)BBuff;
		}
		Work += "\n";

		// ファイル書き込み
		fputs( (LPTSTR)Work, fp );
	}

	QUERY_LOOP

		// 最初のフィールド
		QUERY_GET(((LONG)0),szBuff)
		Work = szBuff;

		for( i = 1; i < nField; i++ ) {
			QUERY_GET(((LONG)i),szBuff)
			Work += ",";
			Work += szBuff;
		}
		Work += "\n";
		fputs( (LPTSTR)Work, fp );

	QUERY_END

	// 出力ファイルを閉じる
	fclose( fp );
	// CString で確保していた領域を開放
	strBuffer.ReleaseBuffer();
	// レコードセットを開放
	pRs->Close();

	Dlg.MsgOk( "CSV 出力が終了しました   " );

}
  












  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ