none
un type qui est refusé RRS feed

  • Question

  • bonjour

    J'ai un problème dans le code suivant:

    	bool CInterbaseManagerM::GetBit( int row)
    	{
    		bool bVal;
    		int ident;
    		Object^ myValue;
    		Int32^ MinValue;
    		try
    		{
    			myValue = myReader->GetValue( row);
    			MinValue = myValue->MinValue;
    			ident = Convert::ToInt32( MinValue);
    			if( ident > 4)
    				bVal = true;
    			else
    				bVal = false;
    		}
    		catch( Exception^ ex)
    		{
    			Display( ex);
    		}
    		return( bVal);
    	}
    

    sous débogueur J'ai accès à MinValue

    mais le compilateur ne reconnait pas cette construction

    1>..\..\..\DBMS\DBMSManager\src\InterbaseManagerM.cpp(546): error C2039: 'MinValue' : n'est pas membre de 'System::Object'
    1>          c:\program files (x86)\reference assemblies\microsoft\framework\.netframework\v4.0\mscorlib.dll : voir la déclaration de 'System::Object'

    Je remercie d'avance tous ceux qui s’intéresseront à ce problème


    Jean Noël Martin

    jeudi 26 mai 2016 17:45

Toutes les réponses

  • "myValue" est de type Object^, qui n'a pas de propriété "MinValue".

    Que l'objet lui-même est d'un type ayant un propriété "MinValue" n'importe pas, C++ a un typage statique.


    Paul Bacelar, Ex - MVP VC++


    vendredi 27 mai 2016 09:20
    Modérateur
  • moi J'ai besoin de la valeur minimum qui est seule a bouger

    Jean Noël Martin

    samedi 28 mai 2016 13:00
  • >moi J'ai besoin de la valeur minimum qui est seule a bouger

    Bin, typez correctement vos fonctions, propriété, et variable.

    Pourquoi myReader ne renvoi-t-il pas cette valeur avec une fonction "GetMinVal" pour récupérer cette valeur, ou GetValues pour renvoyer une liste de valeurs ?


    Paul Bacelar, Ex - MVP VC++

    lundi 30 mai 2016 07:53
    Modérateur
  • J'ai vérifié sur ssms que la valeur est bonne dans la base de donnée.

    pourquoi est elle mauvaise dans l'application qui la lit????


    Jean Noël Martin

    mardi 31 mai 2016 09:14
  • Je ne vois pas le rapport entre SSMS et la choucroute.

    Si vous avez des requêtes à faire dans une base de données et que vous cherchez le minimum, le SQL et les les classes dédiées à l'interrogation de base de données donnent largement les moyens de faire facilement ces choses.

    Là, cela ne strictement rien à voir avec la pertinence des données retournées par la base de données, le compilateur, et moi-même, nous ne comprenons pas ce que vous cherchez à faire.

    myReader, C'est quoi ? une entité métaphysique en relation astral avec la base ???


    Paul Bacelar, Ex - MVP VC++

    mardi 31 mai 2016 10:00
    Modérateur
  • Je cherche la valeur qui est dans la base de donnée; à savoir 132

    et quand je lis je récupère 4.

    myReader est récupéré a la requête select sur de la base de données

    J'utilise SSMS pour savoir ce qui est dans la BDD


    Jean Noël Martin



    mardi 31 mai 2016 13:47
  • >et quand je lis je récupère 4.

    Comment vous faite pour récupérer un truc avec un programme qui ne compile pas ????

    J'ai l'impression qu'on se noie dans un verre d'eau.

    Votre base, elle comprend bien le SQL, et vous pouvez donc faire une requête SQL pour retrouver le minimum d'un ensemble de valeur, c'est juste ?

    Alors montez-nous votre requête SQL.


    Paul Bacelar, Ex - MVP VC++

    mardi 31 mai 2016 13:57
    Modérateur
  • Je met ci dessous le code qui compile:

    	bool CInterbaseManagerM::GetBit( int row)
    	{
    		bool bVal;
    		System::Object^ myValue;
    		System::ValueType^ MinValue;
    		int index;
    		try
    		{
    			myValue = (System::ValueType^)myReader->GetValue( row);
    			MinValue = (System::ValueType^)myValue;
    			index = (int) MinValue;
    			if( index > 4) // ligne en erreur
    				bVal = true;
    			else
    				bVal = false;
    		}
    		catch( Exception^ ex)
    		{
    			Display( ex);
    		}
    		return( bVal);
    	}

    Je poste aussi la requête:

                            SqlCommand^ cmdDatabase = gcnew SqlCommand( L"SELECT ES.nuIdElemn, ES.nuidTypeElement, ES.siNbChunk, ES.nuIdOccurence, ES.vcName, ES.nuIdPar, ES.wsText, ES.ListParagraph, ES.siIdD, ES.iNextPredicat, EC.nuIdChunk, C.nuIdChunkType, C.siNbWord, C.nuIdDrivingPos, W.nuIdWord, W.vcString, W.siIdPOS, W.nuIdLemma,  W.siOccurrence, L.cExcluded, L.vcString, L.siIDGender FROM T_ELEMENT_SEMANTIQUE ES LEFT JOIN T_ELEMENT_CHK EC ON ES.nuIdElemn = EC.nuIdElemn LEFT JOIN T_CHUNK C ON EC.nuIdChunk = C.nuIdChunk LEFT JOIN T_CHUNK_WORD CW ON C.nuIdChunk = CW.nuIdChunk LEFT JOIN T_WORD W ON CW.nuIdWord = W.nuIdWord LEFT JOIN T_LEMMA L ON W.nuIdLemma = L.nuIdLemma AND W.siIdPOS = L.siIdPOS WHERE ES.siIdD = @IdDoc AND EC.nuidChunk > 0 ORDER BY ES.nuIdOccurence DESC, ES.nuIdElemn, EC.siChkRank, CW.siWordRank", CInterbaseManagerM::myConnexion);
    			cmdDatabase->Parameters->Add(L"@IdDoc", SqlDbType::VarChar);
    			cmdDatabase->Parameters["@IdDoc"]->Value = iIdDoc;
    			dwNbResultFound = 0;
    C'est la variable iNextPredicat qui pose problème


    Jean Noël Martin



    mardi 31 mai 2016 15:47
  • Donc le problème est dans la conception de la requête SQL, pas dans le code C++, non ?

    Je vous invite donc à corriger votre requête SQL en utilisant un client SQL de base pour la mettre au point.

    Le site dispose de forum dédiés aux bases de données.


    Paul Bacelar, Ex - MVP VC++

    mardi 31 mai 2016 17:35
    Modérateur
  • La solution

    2 observations:

    Les nom des variables sont basées sur les recherche en cours lors que je les ai nommée

    J'ai déplacé la variable incriminé d'un pas et ça a changé le comportement


    Jean Noël Martin


    mardi 31 mai 2016 17:55
  • ?????????????

    Paul Bacelar, Ex - MVP VC++

    jeudi 2 juin 2016 09:15
    Modérateur