C++Builder Tips


Jetデータベース・テーブルのCSV or Excelエクスポート(DAO/OLE経由)


 このサンプルを実行すると、実行プログラムと同一フォルダにschema.iniというファイルが作成されます。このファイルの中身を見てみるとフィールド名とデータ型等の内容が記載されており、SQL文を実行する時にこのschema.iniというファイルを参照してエクスポートいるようです。このファイルは一度作成されてしまうと以降のエクスポート処理では再作成されず、参照だけされるのでテーブルの中にフィールドを追加したり、データ型を変更した場合はこのファイルを削除しておく必要があります。削除しないと以前のフィールド名とデータ型等でエクスポート処理が実行されるため望んだ結果になりません。


//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString str = ExtractFilePath(Application->ExeName);

  Export(str + "TEST.mdb","新規テーブル",str + "work.csv");
  Export(str + "TEST.mdb","新規テーブル",str + "work.xls");

}

//---------------------------------------------------------------------------

void TForm1::Export(AnsiString strDbPath, AnsiString strTblName, AnsiString strExpPath)
{
  Variant vDAO;
  Variant vDB;
  Variant vDBExport;
  AnsiString strConnect;
  AnsiString strSql;

  vDAO = Variant::CreateObject("DAO.DBEngine.35");

  if (ExtractFileExt(strExpPath) == ".csv"){
    vDBExport = vDAO.Exec(Function("OpenDatabase") << ExtractFilePath(strExpPath) << 0 << 0 << "Text;");
    strConnect = "[Text;database=" + ExtractFilePath(strExpPath) + "].";
  }
  if (ExtractFileExt(strExpPath) == ".xls"){
    vDBExport = vDAO.Exec(Function("OpenDatabase") << strExpPath << 0 << 0 << "Excel 5.0;");
    strConnect = "[Excel 5.0;database=" + strExpPath + "].";
  }

  vDB = vDAO.Exec(Function("OpenDatabase") << (strDbPath) << false << false);

  strSql = "SELECT * INTO " + strConnect + ExtractFileName(strExpPath) + " FROM " + strTblName;

  vDB.Exec(Procedure("Execute") << strSql);

  vDB.Exec(Procedure("Close"));

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

DownLoad bcbtips051.lzh 8KB(BCB5)