Bonjour,
Comme vu dans le code, j'utilise OpenSchema sur une base de données ORACLE. Bof ! Après cette fonction, une exception est immédiatement détectée par le try...catch... Et si je mets pour test varData = vtNull, pas d'exception mais le recordset retourné ne contient rien (adoEOF = true).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 int CHowToADOView::OnCreate(LPCREATESTRUCT lpCreateStruct) { HRESULT hr = m_pConnection.CreateInstance(__uuidof(ADODB::Connection)); if (FAILED(hr)) { AfxMessageBox(_T("CREATE CONNECTION INSTANCE ERROR !!!")); } m_pConnection->CursorLocation = ADODB::adUseClient; HRESULT hr2 = m_pConnection->Open(L"Provider=MSDAORA.1;Password=systemtest1;User ID=system;Data Source=test1sid_10.12.1.2;Persist Security Info=True", L"",L"", ADODB::adConnectUnspecified); if (FAILED(hr2)) { AfxMessageBox(_T("OPEN CONNECTION ERROR !!!")); } return 0; } void CHowToADOView::OnBnClickedOpenschema2() { // open it try { _variant_t vSourceSchema = L"MYSCHEMA"; _variant_t vSource = L"TABLE1"; _variant_t varCriteria[3]; _variant_t vtNull; vtNull.vt = VT_NULL; varCriteria[0] = vtNull; varCriteria[1] = vtNull; varCriteria[2] = vSource; // Creating a safe array of variants with 3 elements. VARIANT varData; SAFEARRAY FAR* psa; SAFEARRAYBOUND rgsabound[1]; rgsabound[0].lLbound = 0; rgsabound[0].cElements = 3; psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound); // Fill the safe array. for(long lIndex = 0 ; lIndex < 3 ;lIndex++) { SafeArrayPutElement(psa, &lIndex,&varCriteria[lIndex]); } // Initialize the safearray. varData.vt = VT_VARIANT | VT_ARRAY; V_ARRAY(&varData) = psa; ADODB::_RecordsetPtr tempRS; tempRS = NULL; tempRS.CreateInstance( __uuidof( ADODB::Recordset ) ); tempRS = m_pConnection->OpenSchema(ADODB::adSchemaColumns,varData); if (!(tempRS->GetADOEOF())) AfxMessageBox(_T("IL Y QUELQUES CHOSES DANS tempRS")); else AfxMessageBox(_T("IL N'Y A RIEN DANS tempRS")); } catch (_com_error& e) { CString str = (CString)(e.Description().GetBSTR()) +"\r\n"+ (CString)(e.ErrorMessage()); AfxMessageBox(str); } }
Est-ce que OpenSchema(adSchemaColumns) ne marche pas pour Oracle ? Vu dans l'aide MSDN (http://technet.microsoft.com/en-us/l.../ms974585.aspx), il n'indique rien en ce qui concerne Oracle seulement pour ole db, vsam et AS400 !!
Partager