IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

OpenSchema retournant NULL sous ADO


Sujet :

Visual C++

  1. #1
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut Le problème n'est plus OpenSchema qui retourne NULL
    Bonjour,

    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);
        }
    }
    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).
    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 !!
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Une personne qui a un peu d'expérience en Oracle-VC++ pourrait surement m'aider !
    Je remarque aussi qu'en Oracle, le concept de bd est tellement différent que toutes les tables de tous les schémas sont retournés dans le recordset

    Nouveau titre approprié : Problème avec OpenSchema(adSchemaColumns) sous Oracle
    En fait, que dois contenir le 2è argument "Criteria" ?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  3. #3
    bruce-willis
    Invité(e)
    Par défaut
    adSchemaColumns retourne les colonnes des tables définies dans le catalogue.
    Le 2ème argument (criteria) est optionnel qui est un tableau de contraintes query comme celui indiqué
    adSchemaColumns
    TABLE_CATALOG (varCriteria[0])
    TABLE_SCHEMA (varCriteria[1]) : nom de base de données
    TABLE_NAME (varCriteria[2]) : nom de table
    COLUMN_NAME (varCriteria[3]) : nom de champ

    Cela marche très bien sous SQL Server mais je ne sais pas pour Oracle
    Je ne suis qu'un débutant en ADO aussi !!!

  4. #4
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Bonjour !

    Je me réponds à moi-même dans ce thread.
    Il semble qu'il n'est pas compatible avec Oracle de faire OpenSchema(ADODB::adSchemaColumns, varData). Ironie du sort, j'ai obtenu la réponse à ma question en posant la question chez les Basic-iens (forum Visual Basic): http://www.developpez.net/forums/sho...d.php?t=491908
    Les informations que bruce-willis a données sont correctes mais c'est Oracle qui fait faux-bond mais il faut quand même admettre que Microsoft a conçu ADO spécialement pour ces plate-formes : SQL Server et Access.
    Je récapitule la solution : exécuter directement la commande sql équivalente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tempRS->Open(L"SELECT COLUMN_NAME, NULLABLE, DATA_TYPE, CHAR_LENGTH FROM all_tab_columns tc WHERE tc.OWNER = \'RANDRIANO\' AND tc.TABLE_NAME = \'MYTABLE\'", m_connDb.GetInterfacePtr(), adOpenForwardOnly, adLockReadOnly, adCmdText);
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  5. #5
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Re-bonjour,

    Je m'adresse aux utilisateurs d'ADO pour se connecter si le fait qu'ado n'est pas si compatible que ça avec certains sgbd est vrai. Pouvez-vous vous manifester pour confirmer ou nier ça
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

Discussions similaires

  1. LEFT JOIN + Sous-requête retourne "NULL"
    Par wenijah dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/03/2012, 17h02
  2. opérateur + dans SELECT retourne null ?
    Par david_chardonnet dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2007, 10h47
  3. données NULL sous SQL
    Par pschmidtke dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/07/2006, 18h14
  4. accés aux BD sous ADO
    Par loubardi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/06/2006, 10h32
  5. J’ai un souci avec les valeurs null sous sql server.
    Par zoltix dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/06/2006, 10h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo