| 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 出力が終了しました " );
}
| |