*その他
**ミリネジとインチネジ
-ミリネジ (metric screw threads)
--http://www.atmarkit.co.jp/icd/root/49/20463549.html
 =1山あたり0.5mm
-インチネジ (inch screw threads)
--http://www.atmarkit.co.jp/icd/root/63/27317663.html
 =1山あたり0.8mm(インチあたり32山)

*Visual C++ 関連情報
**ADOレコードセットを配列として使う方法
#code c++
 #include <afx.h>
 #include <afxdisp.h>	// COleSafeArray
 #include <comdef.h>
 #import "C:\Program Files\Common Files\System\Ado\msado15.dll" rename("EOF", "adoEOF")
using namespace ADODB;	// 名前空間
 using namespace ADODB;	// 名前空間

 #include <afxdisp.h>	// COleSafeArray
 #include <afxtempl.h>	// CArray
 typedef CArray< _variant_t, _variant_t& > CVariantArray;

// _variant_t の配列を取り扱うためのヘルパークラス
class CSafeVariantArray : public CVariantArray
{
public:
	operator LPVARIANT()
	{
		VariantArrayToSafeArray();
		return (LPVARIANT)m_sa;
	}
private:
	void VariantArrayToSafeArray()
	{
		COleSafeArray sa;
		int nSize = GetSize();
		sa.CreateOneDim( VT_VARIANT, nSize );
		for ( int i = 0; i < nSize; i++ )
		{
			long lArrayIndex = (long)i;
			_variant_t vValue = GetAt(i);
			sa.PutElement( &lArrayIndex, &vValue );
		}
		m_sa = sa;
		return;
	}
	COleSafeArray	m_sa;
};

/*
Sub FieldsAppendTest
    Dim rsTmp
    Set rsTmp = CreateObject("ADODB.Recordset")
    
    With rsTmp.Fields
        .Append "Field1", adVarChar, 80, adFldIsNullable
        .Append "Field2", adVarChar, 80, adFldIsNullable
    End With
    
    rsTmp.Open

    Dim vFieldList
    vFieldList = Array( "Field1", "Field2" )
    Dim vValues
    vValues = Array( "aaa", "bbb" )
    rsTmp.AddNew vFieldList, vValues
    
    vValues = Array( "CCC", "DDD" )
    rsTmp.AddNew vFieldList, vValues
    
    rsTmp.MoveFirst
    
    Dim fld
    Dim strLine
    Dim strName
    strLine = ""
    For Each fld In rsTmp.Fields
        strName = fld.Name
        strLine = strLine & strName & vbTab
    Next
    WScript.Echo strLine
    
    Dim strValue
    While Not rsTmp.BOF And Not rsTmp.EOF
        strLine = ""
        For Each fld In rsTmp.Fields
            strValue = fld.Value
            strLine = strLine & "[" & strValue & "]" & vbTab
        Next
        WScript.Echo strLine
        rsTmp.MoveNext
    Wend
End Sub
*/

void FieldsAppendTest()
{
	try
	{
		CoInitialize(NULL);
		ADODB::_RecordsetPtr rs;  // Recordsetオブジェクト

		// ADOオブジェクトの生成
		rs.CreateInstance( __uuidof(ADODB::Recordset) );

		rs->Fields->Append( L"Field1", adVarChar, 80, adFldIsNullable );
		rs->Fields->Append( L"Field2", adVarChar, 80, adFldIsNullable );
		rs->Open( vtMissing, vtMissing, adOpenForwardOnly, adLockOptimistic, adCmdUnknown );

		// テーブルのフィールドリスト用の配列を作成します
		COleSafeArray vaFieldList;
		vaFieldList.CreateOneDim( VT_VARIANT, 2 );
		CSafeVariantArray vaFieldList;
		vaFieldList.Add( _variant_t( L"Field1" ) );
		vaFieldList.Add( _variant_t( L"Field2" ) );

		// フィールド名を定義
		_variant_t vFieldName;
		long lArrayIndex;
		lArrayIndex = 0;
		vFieldName = L"Field1";
		vaFieldList.PutElement( &lArrayIndex, &vFieldName );
		lArrayIndex = 1;
		vFieldName = L"Field2";
		vaFieldList.PutElement( &lArrayIndex, &vFieldName );
		
		// 値リスト用の配列を作成し、テーブルに配置します
		COleSafeArray vaValueList;
		vaValueList.CreateOneDim( VT_VARIANT, 2 );
		// フィールドごとに値を定義します

		_variant_t vFieldValue;

		lArrayIndex = 0;
		vFieldValue = L"aaa";
		vaValueList.PutElement( &lArrayIndex, &vFieldValue );
		lArrayIndex = 1;
		vFieldValue = L"bbb";
		vaValueList.PutElement( &lArrayIndex, &vFieldValue );
		
		CSafeVariantArray vaValues;
		vaValues.Add( _variant_t( L"aaa" ) );
		vaValues.Add( _variant_t( L"bbb" ) );
		// 1レコード目
		rs->AddNew( vaFieldList, vaValueList );
		rs->AddNew( (LPVARIANT)vaFieldList, (LPVARIANT)vaValues );

		lArrayIndex = 0;
		vFieldValue = L"CCC";
		vaValueList.PutElement( &lArrayIndex, &vFieldValue );
		lArrayIndex = 1;
		vFieldValue = L"DDD";
		vaValueList.PutElement( &lArrayIndex, &vFieldValue );
		
		vaValues.RemoveAll();
		vaValues.Add( _variant_t( L"CCC" ) );
		vaValues.Add( _variant_t( L"DDD" ) );
		// 2レコード目
		rs->AddNew( vaFieldList, vaValueList );
		rs->AddNew( (LPVARIANT)vaFieldList, (LPVARIANT)vaValues );

		rs->MoveFirst();

		long i = 0;
		long nFields = rs->GetFields()->GetCount();
		// 項目名
		for ( i = 0; i < nFields; i++ )
		{
			_bstr_t vName;
			_variant_t vValue;
			vName  = rs->GetFields()->GetItem(i)->GetName();
			_tprintf( _T("%s\t"), (LPCTSTR)vName );
		}
		_tprintf( _T("\n") );
		_tprintf( _T("-------------------------------------------------\n") );

		// レコード表示
		while ( !rs->GetBOF() && !rs->GetadoEOF() )
		{
			_tprintf( _T("------------------------------------------\n") );
			long nCount = 1;
			long nFields = rs->GetFields()->GetCount();
			for ( long i = 0; i < nFields; i++ )
			for ( i = 0; i < nFields; i++ )
			{
				_bstr_t vName;
				_bstr_t vValue;
				vName  = rs->GetFields()->GetItem(i)->GetName();
				_variant_t vValue;
				vValue = rs->GetFields()->GetItem(i)->GetValue();
				_tprintf( _T("%s = [%s]\t"), (LPCTSTR)vName, (LPCTSTR)vValue );
				_tprintf( _T("[%s]\t"), (LPCTSTR)(_bstr_t)vValue );
			}
			_tprintf( _T("\n") );
			rs->MoveNext();
		}

		rs->Close();
	}
	catch ( _com_error& e )
	{
		_tprintf( _T("e.Description = [%s]\n"), (LPCTSTR)e.Description() );
		return;
	}
	catch ( ... )
	{
		_tprintf( _T("Fatal Error!\n") );
		return;
	}

	CoUninitialize();
}

int main( int argc, char* argv[] )
{
	FieldsAppendTest();

	return 0;
}
#end
--文字列の配列として COleSafeArray を使うのが味噌らしい。
***参考情報
-[mfc 38197] データベース上への追加 
--http://search.acty-net.ne.jp/mfc_search/archive/2002-1/msg01001.html

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS