|
} ::CoUninitialize(); } 使用GetItem(x)和Item[x] 下面是VB中关于Item()的标准与交互语法的演示。 Public Sub GetItemItem Dim rs As New ADODB.Recordset Dim name as String rs = rs.Open "authors", "DSN=pubs;", adOpenDynamic, _ adLockBatchOptimistic, adTable name = rs(0) '''' -or- name = rs.Fields.Item(0) rs(0) = "Test" rs.UpdateBatch '''' Restore name rs(0) = name rs.UpdateBatch rs.Close End Sub 以下则是VC++关于Item的演示 当访问collection中的Item时,索引值2必须被转换为long类型以确保正确的构造函数被调用。 #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "EndOfFile") #include <stdio.h> void main(void) { CoInitialize(NULL); try { _RecordsetPtr rs("ADODB.Recordset"); _variant_t vtFirstName; rs->Open("authors", "Provider=sqloledb;Data Source=a-tima10;" "Initial Catalog=pubs;User Id=sa;Password=;", adOpenStatic, adLockOptimistic, adCmdTable); rs->MoveFirst(); // Note 1.取得一个字段的名称 vtFirstName = rs->Fields->GetItem((long)2)->GetValue(); // -or- vtFirstName = rs->Fields->Item[(long)2]->Value; printf( "First name = ''''%s''''\n", (char*) ((_bstr_t) vtFirstName)); rs->Fields->GetItem((long)2)->Value = L"TEST"; rs->Update(vtMissing, vtMissing); // 恢复原名称 rs->Fields->GetItem((long)2)->PutValue(vtFirstName); // -or- rs->Fields->GetItem((long)2)->Value = vtFirstName; rs->Update(vtMissing, vtMissing); rs->Close(); } catch (_com_error &e) { printf("Description = ''''%s''''\n", (char*) e.Description()); } ::CoUninitialize(); } 利用(IDispatch *)转换ADO对象的指针类型 1.在一个Variant中显式地封装一个活动的Connection对象,然后用(IDispatch *)进行类型转换确保正确的构造函数被调用。同时明确地设置第二个参数为缺省的true,使该对象的引用计数在Recordset::Open操作完成后仍得到正确的维护。 2.表达式(_bstr_t)不是一个类型转换,而是一个_variant_t的操作符,用以从中提取一个_bstr_t字符串。 表达式(char*)也不是一个类型转换,而是一个_bstr_t的操作符,用以从中提取封装在_bstr_t中的字符串的指针。 下面这些代码演示了_variant_t和_bstr_t的一些常见操作。 #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "EndOfFile") #include <stdio.h> void main(void) { CoInitialize(NULL); try { _ConnectionPtr pConn("ADODB.Connection"); _RecordsetPtr pRst("ADODB.Recordset"); pConn->Open("Provider=sqloledb;Data Source=a-tima10;" "Initial Catalog=pubs;User Id=sa;Password=;", "", "", adConnectUnspecified); // Note 1 pRst->Open( "authors", _variant_t((IDispatch *) pConn, true), adOpenStatic, adLockReadOnly, adCmdTable); pRst->MoveLast(); // Note 2 printf("Last name is ''''%s %s''''\n", (char*) ((_bstr_t) pRst->GetFields()->GetItem("au_fname")->GetValue()), (char*) ((_bstr_t) pRst->Fields->Item["au_lname"]->Value)); pRst->Close(); pConn->Close(); } catch (_com_error &e) { printf("Description = ''''%s''''\n", (char*) e.Description()); 上一页 [1] [2] [3] [4] [5] [6] 下一页 没有相关教程
|