ADOサンプル

  lightbox.lib の LboxListview でデータ一覧をリストビューにセット



  
// *********************************************************
// データ一覧をリストビューにセット
// 戻り値 : 無し
// *********************************************************
DWORD LboxAdo::LoadSqlData( LboxListview *Lview )
{
	if ( sCommand.operator == ( "" ) ) {
		sCommand.operator = ("select ");
		sCommand.operator += (&sFieldList);
		sCommand.operator += (" from ");
		sCommand.operator += (&sTable);
		if ( sCond.operator != ( "" ) ) {
			sCommand.operator += (" where ");
			sCommand.operator += (&sCond);
		}
		if ( sOrder.operator != ( "" ) ) {
			sCommand.operator += (" order by ");
			sCommand.operator += (&sOrder);
		}
	}

	_variant_t vTable(sCommand.szLboxString);

	int nErr;
	DWORD nCount;
	char szBuffer[80];

	pRs	= NULL;

	_bstr_t bstrValue("");

	_variant_t Index;
	Index.vt = VT_I2;
	_variant_t vName;
	_variant_t vValue;

	Lview->Hide( );

	nErr = 0;
	try {
		TESTHR(pRs.CreateInstance(__uuidof(Recordset)));
		nErr++;
		switch( LboxAdo::DBType ) {
			case 0:
			case 1:
				pRs->CursorLocation	= adUseServer;
				break;
			case 2:
			case 3:
			case 4:
			case 5:
				pRs->CursorLocation = adUseClient;
				break;
		}
		pRs->Open( vTable, ConnectString, adOpenKeyset, adLockOptimistic, adCmdText );

		if ( pRs->State == adStateClosed ) {
			pRs.Release();
			pRs = NULL;
			return -99;
		}
		nErr++;

		// タイトル部分の作成
		Lview->Initialize( );
		for ( int i = 0;i < (pRs->Fields->Count);i++ ) {
			Index.iVal = i;

			vName = pRs->Fields->GetItem(Index)->Name;
			bstrValue.operator = ( vName );
			Lview->AddColumn( LVCFMT_LEFT, 100, (LPTSTR)bstrValue );
		}

		nCount = 0;
		while( !(pRs->EndOfFile) ) {

			nCount++;
			if ( nCount > LboxAdo::nMax ) {
				nCount--;
				break;
			}

			Lview->AddRow();

			for ( int i = 0;i < (pRs->Fields->Count);i++ ) {
				Index.iVal = i;

				vValue = pRs->Fields->GetItem(Index)->Value;
				switch(vValue.vt) {
					case VT_LPWSTR:
					case VT_LPSTR:
					case VT_BSTR:
						bstrValue.operator = ( vValue );
						Lview->SetColumnText( i, (LPTSTR)bstrValue );
						break;
					case VT_DATE:
						bstrValue.operator = ( vValue );
						Lview->SetColumnText( i, (LPTSTR)bstrValue );
						break;
					case VT_I2:
						wsprintf( szBuffer, "%d", vValue.iVal );
						Lview->SetColumnText( i, szBuffer );
						break;
					case VT_I4:
						wsprintf( szBuffer, "%ld", vValue.lVal );
						Lview->SetColumnText( i, szBuffer );
						break;
					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:
						bstrValue.operator = ( vValue );
						Lview->SetColumnText( i, (LPTSTR)bstrValue );
						break;
					case VT_EMPTY:
					case VT_NULL:
						Lview->SetColumnText( i, "" );
						break;
					default:
						Lview->SetColumnText( i, "???" );
						break;
				}
			}

			pRs->MoveNext();
		}

		LboxAdo::Count = pRs->RecordCount;

		pRs->Close();
		pRs.Release();
		pRs = NULL;

	}
	catch ( _com_error &e )
	{
		ProviderError( pRs );
		if ( nErr >= 2 ) {
			pRs->Close();
		}
		if ( nErr >= 1 ) {
			pRs.Release();
			pRs = NULL;
		}
		ErrMessage.Insert( "\n" );
		ErrMessage.Insert( sCommand.szLboxString );
		Lview->MsgOk(
			Lview->Parent(),
			ErrMessage.szLboxString
		);
		nCount = -1;
	}

	if ( nCount != -1 ) {
		Lview->Fit();
	}
	Lview->Show();
	return nCount;

}
  










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ