*その他 **ミリネジとインチネジ -ミリネジ (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