none
une petite question de syntaxe RRS feed

Réponses

Toutes les réponses

  • Pourquoi ?

    Quel est le message d'erreur ?

    P.S.: file de message avec un vrai titre (donc une question plus précise), SVP.


    Paul Bacelar, Ex - MVP VC++

    vendredi 4 juillet 2014 14:17
    Modérateur
  • Effectivement,  System::DBNull est une classe, on ne peut pas l'affecter à une variable.

    Normalement, il suffit de laisser la variable a null lors de l'utilisation d'AD.NET.


    Paul Bacelar, Ex - MVP VC++

    vendredi 4 juillet 2014 15:47
    Modérateur
  • main null ne marche pas

    hidPrevSegment = null;
    et NULL donne 0


    Jean Noël Martin


    samedi 5 juillet 2014 00:53
  • "main null ne marche pas", normal, il n'a pas de jambe. ;-°

    Pouvez-vous donner les messages d'erreur ainsi que le contexte, ça simplifie un peu la devinette.


    Paul Bacelar, Ex - MVP VC++

    samedi 5 juillet 2014 02:21
    Modérateur
  • bonjour

    Le problème est d'initialiser la valeur hidPrevSegmentID à null et  pas à 0 lors du premier enregistrement

       if( dwNbResultFound != 1)
       {
    	hidNewSegmentID = CInterbaseManagerM::GetIdentifier( SEG_TABLE, SEG_INIT_POS, SEG_ID_SEG);
    	hidNewSegmentID++;
    	if( hidNewSegmentID == 1)
    		hidPrevSegment = null;
    	int TypeDoc = enDocumentType;
    	SqlCommand ^ cmdDatabase = gcnew SqlCommand(L"SELECT SEG_INIT_POS, SEG_SIZE_IN_CHAR, SEG_ID_SEG FROM SEG_TABLE WHERE SEG_INIT_POS = @SegInitPos AND SEG_TYPE_DOC = @TypeDoc AND SEG_ID_DOC = @idDoc AND SEG_ID_LANG = @IdLang;", CInterbaseManagerM::myConnexion);
            cmdDatabase->Parameters->Add(L"@SegInitPos", SqlDbType::Int);
            cmdDatabase->Parameters["@SegInitPos"]->Value = pAnalysedSegment->ulDocPosition;
            cmdDatabase->Parameters->Add(L"@TypeDoc", SqlDbType::Int);
            cmdDatabase->Parameters["@TypeDoc"]->Value = TypeDoc;
    		cmdDatabase->Parameters->Add(L"@IdDoc", SqlDbType::Int);
            cmdDatabase->Parameters["@IdDoc"]->Value = hidPrevSegmentID;
    		CInterbaseManagerM::ExecuteRequest(cmdDatabase, &dwNbResultFound);
    		CInterbaseManagerM::CommitTransaction();
    		
       }
    

    quant au message d'erreur il ma semble trivial:

    1>..\..\..\..\DBMS\MissionDBManager\src\MissionDatabaseManager.cpp(933): error C2065: 'null' : identificateur non déclaré
    


    Jean Noël Martin

    samedi 5 juillet 2014 07:13
  • NULL est une MACRO du C des années 70 qui est déprécié depuis C++11 à quoi on lui préfère nullptr.

    null est le concept, c'est aussi un mot clé du JAVA et du C#, désolé pour la confusion.

    Si hidPrevSegmentID est une instance d'objet "référence" (non value-type) il suffit d'utiliser nullptr.

    Si hidPrevSegmentID est d'un value type (int, ...) il faudrait substituer son type par sa version nullable http://www.codeproject.com/Articles/10423/CNullable-T-A-convenient-Nullable-T-equivalent-cla.


    Paul Bacelar, Ex - MVP VC++

    lundi 4 août 2014 13:29
    Modérateur
  • il faut utiliser une constante

    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mardi 5 août 2014 02:05
    mardi 5 août 2014 02:05
  • nullptr est une "constante" (mot-clé).


    Paul Bacelar, Ex - MVP VC++

    lundi 11 août 2014 14:18
    Modérateur