|
|
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#include <windows.h>
#include <ole2.h>
#include <stdio.h>
#include <oleauto.h>
#include <conio.h>
| |
|
|
|
|
#include "stdafx.h"
// **********************************************************
// オブジェクト使用宣言
// **********************************************************
_ConnectionPtr pCn = NULL;
_RecordsetPtr pRs = NULL;
// **********************************************************
// インスタンス作成用
// **********************************************************
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
// **********************************************************
// 関数宣言
// **********************************************************
BOOL ProviderError( _RecordsetPtr pRsTarget );
int main(int argc, char* argv[])
{
// **********************************************************
// COM 使用初期化
// **********************************************************
CoInitialize(NULL);
// **********************************************************
// ターゲット Excel
// **********************************************************
_bstr_t Target( "C:\\TEMP\\社員マスタ.xls" );
// **********************************************************
// ワーク
// **********************************************************
_bstr_t Buffer;
_bstr_t Work;
_variant_t Query;
_variant_t vValue;
_variant_t nIndex;
nIndex.vt = VT_I2;
FILE *Csv;
int i,nErr;
// **********************************************************
// 接続文字列
// **********************************************************
_bstr_t ConnectString("Provider=Microsoft.Jet.OLEDB.4.0;");
ConnectString.operator += ( "Data Source=" );
ConnectString.operator += ( Target );
ConnectString.operator += ( ";" );
ConnectString.operator += ( "Extended Properties=\"Excel 8.0;\"" );
nErr = 0;
try {
// *******************************
// オブジェクト作成
// *******************************
if ( pCn == NULL ) {
TESTHR(pCn.CreateInstance(__uuidof(Connection)));
}
nErr = 1;
if ( pRs == NULL ) {
TESTHR(pRs.CreateInstance(__uuidof(Recordset)));
}
nErr = 2;
// *******************************
// カーソルタイプ設定
// *******************************
pCn->CursorLocation = adUseServer;
pRs->CursorLocation = adUseServer;
// *******************************
// 接続
// *******************************
pCn->Open(ConnectString, "", "", adConnectUnspecified);
nErr = 3;
// *******************************
// レコードセット取得
// *******************************
Query.operator = ( "select * from [社員マスタ]" );
pRs->Open(
Query,
_variant_t((IDispatch *)pCn,true),
adOpenKeyset,
adLockOptimistic,
adCmdText);
nErr = 4;
// *******************************
// 出力ファイルオープン
// *******************************
Csv = fopen( "社員マスタ.csv", "wt" );
if ( Csv == NULL ) {
printf( "出力ファイルをオープンできません" );
pRs->Close();
pRs.Release();
pRs = NULL;
pCn->Close();
pCn.Release();
pCn = NULL;
return 1;
}
// *******************************
// タイトル出力
// *******************************
Buffer.operator = ( "" );
for (i = 0;i <= (pRs->Fields->Count-1);i++) {
if ( Buffer.operator != ("") ) {
Buffer.operator += (",");
}
nIndex.iVal = i;
vValue = pRs->Fields->GetItem(nIndex)->Name;
Work.operator = (vValue);
Buffer.operator += (Work);
}
fprintf( Csv, "%s\n", (LPTSTR)Buffer );
// *******************************
// データ出力
// *******************************
while( !(pRs->EndOfFile) ) {
Buffer.operator = ( "" );
for (i = 0;i <= (pRs->Fields->Count-1);i++) {
if ( Buffer.operator != ("") ) {
Buffer.operator += (",");
}
nIndex.iVal = i;
vValue = pRs->Fields->GetItem(nIndex)->Value;
switch(vValue.vt) {
case VT_LPWSTR:
case VT_LPSTR:
case VT_BSTR:
case VT_DATE:
case VT_BOOL:
case VT_R4:
case VT_R8:
case VT_CY:
case VT_I1:
case VT_UI1:
case VT_UI2:
case VT_UI4:
case VT_INT:
case VT_UINT:
case VT_DECIMAL:
case VT_I2:
case VT_I4:
Work.operator = (vValue);
Buffer.operator += (Work);
break;
case VT_EMPTY:
case VT_NULL:
Buffer.operator += ("");
break;
default:
Buffer.operator += ("???");
break;
}
}
fprintf( Csv, "%s\n", (LPTSTR)Buffer );
pRs->MoveNext();
}
// *******************************
// ファイルクローズ
// *******************************
fclose( Csv );
// *******************************
// レコードセットクローズ
// *******************************
pRs->Close();
pRs.Release();
pRs = NULL;
// *******************************
// 接続解除
// *******************************
pCn->Close();
pCn.Release();
pCn = NULL;
}
catch (_com_error &e)
{
printf( "%s\n", e.ErrorMessage() );
if ( nErr == 3 ) {
ProviderError( pRs );
pCn->Close();
pCn.Release();
pCn = NULL;
}
if ( nErr == 4 ) {
ProviderError( pRs );
pRs->Close();
pRs.Release();
pRs = NULL;
pCn->Close();
pCn.Release();
pCn = NULL;
}
}
// **********************************************************
// COM 使用終了処理
// **********************************************************
CoUninitialize();
return 0;
}
// **********************************************************
// プロバイダエラーメッセージ取得
// **********************************************************
BOOL ProviderError( _RecordsetPtr pRsTarget )
{
if ( pRsTarget == NULL ) {
printf( "レコードセットは無効です" );
return false;
}
_bstr_t Message;
_variant_t vtConnect = pRsTarget->GetActiveConnection();
_ConnectionPtr pCnWork;
ErrorPtr pErr;
long i,nCount;
if ( vtConnect.vt == VT_DISPATCH ) {
pCnWork = (_ConnectionPtr)vtConnect;
nCount = pCnWork->Errors->Count;
Message.operator = ( "" );
for( i = 0; i < nCount; i++ ) {
pErr = pCnWork->Errors->GetItem(i);
Message.operator += ( pErr->Description );
Message.operator += ( "\n" );
}
printf( "%s", (LPTSTR)Message );
}
else {
printf( "接続が無効です" );
return false;
}
return true;
}
| |
|
|
|
|
#include <lightbox.h>
#include <LboxDatabase.h>
#pragma comment( lib, "lightbox.lib" )
#pragma comment( lib, "shlwapi.lib" )
| |
|
|
LboxDatabase + Excel ( バッチ ) |
|
|
#include "stdafx.h"
// **********************************************************
// オブジェクト使用宣言
// **********************************************************
LboxDatabase *CurDb;
int main(int argc, char* argv[])
{
// **********************************************************
// COM 使用初期化
// **********************************************************
CoInitialize(NULL);
// **********************************************************
// オブジェクト作成
// **********************************************************
CurDb = new LboxDatabase();
// **********************************************************
// ターゲット Excel
// **********************************************************
LboxString Target("C:\\TEMP\\社員マスタ.xls");
// **********************************************************
// ワーク
// **********************************************************
LboxString Buffer;
LboxString Work;
FILE *Csv;
BOOL bRet;
int i;
// **********************************************************
// 接続文字列
// **********************************************************
CurDb->SetConnectString( 0, &Target );
// **********************************************************
// 接続
// **********************************************************
if ( !CurDb->Connect() ) {
printf( "データベースの接続に失敗しました");
delete CurDb;
return 1;
}
// **********************************************************
// レコードセット取得
// **********************************************************
LboxString Query( "select * from [社員マスタ]" );
bRet = CurDb->Query( &Query );
if ( !bRet ) {
printf( "%s\n", CurDb->ErrMessage.szLboxString );
CurDb->DisConnect();
delete CurDb;
return 1;
}
// **********************************************************
// 出力ファイルオープン
// **********************************************************
Csv = fopen( "社員マスタ.csv", "wt" );
if ( Csv == NULL ) {
CurDb->DisConnect();
delete CurDb;
return 1;
}
// **********************************************************
// タイトル出力
// **********************************************************
Buffer.operator = ( "" );
for (i = 0;i <= (CurDb->nFieldCount-1);i++) {
if ( Buffer.operator != ("") ) {
Buffer.operator += (",");
}
CurDb->GetName( i, &Work );
Buffer.operator += (&Work);
}
fprintf( Csv, "%s\n", Buffer.szLboxString );
// **********************************************************
// データ出力
// **********************************************************
while( bRet ) {
Buffer.operator = ( "" );
for (i = 0;i <= (CurDb->nFieldCount-1);i++) {
if ( Buffer.operator != ("") ) {
Buffer.operator += (",");
}
CurDb->GetText( i, &Work );
Buffer.operator += (&Work);
}
fprintf( Csv, "%s\n", Buffer.szLboxString );
bRet = CurDb->Query( );
}
// **********************************************************
// ファイルクローズ
// **********************************************************
fclose( Csv );
// **********************************************************
// 接続解除
// **********************************************************
CurDb->DisConnect();
// **********************************************************
// オブジェクト削除
// **********************************************************
delete CurDb;
// **********************************************************
// COM 使用終了処理
// **********************************************************
CoUninitialize();
return 0;
}
| |
|
|
|