none
une requete qui passe sous MSSMS mais qui butte sur un contrainte à l 'exécution RRS feed

  • Question

  • Bonjour,

    J'ai un bug qui apparait uniquement à l'exécution.  La requête passe bien sur MSSMS.

    je vous donne le code, le message d'erreur "Officiel" et le message de l'erreur.

          if( dwNbResultFound == 0)
          {
    //    	   [Insert into the table T_LEMMA with "nuIdLemma"="hidNewLemmaID",
    //    	   ("vcString" = "wsLemma", "cExcluded" ="bExcluded", "siIdPOS" = "POS", "siIdGender" ="Gender") of current item of "ListAnalysedWord",
    //         "siIdLang"="Language"]
    		    int TypeDoc = enDocumentType;
    			std::wstring wsTemp = L"'" + ShapeWString(wsLemma) + L"'";
    			int iPOS = pLemma->POS;
    			int Gen = pLemma->iGender;
    			int Lang = Language;
    			System::String^ Lemma = gcnew System::String( wsTemp.c_str());
    			SqlCommand ^ cmdDatabase = gcnew SqlCommand(L"INSERT INTO T_LEMMA ( vcString, cExcluded, siIdPOS, siIdGender, siIdTypD, siIdD, siIdLang) VALUES ( @Text, @POS, @ValWord, @Gender, @TypeDoc, @idDoc, @Lang);", CInterbaseManagerM::myConnexion);
    			cmdDatabase->Parameters->Add(L"@Text", SqlDbType::VarChar);
    			cmdDatabase->Parameters["@Text"]->Value = Lemma;
    			cmdDatabase->Parameters->Add(L"@POS", SqlDbType::Int);
    			cmdDatabase->Parameters["@POS"]->Value = iPOS;
    			cmdDatabase->Parameters->Add(L"@ValWord", SqlDbType::Int);
    			cmdDatabase->Parameters["@ValWord"]->Value = pLemma->iExcluded;
    			cmdDatabase->Parameters->Add(L"@Gender", SqlDbType::Int);
    			cmdDatabase->Parameters["@Gender"]->Value = Gen;
    			cmdDatabase->Parameters->Add(L"@TypeDoc", SqlDbType::Int);
    			cmdDatabase->Parameters["@TypeDoc"]->Value = TypeDoc;
    			cmdDatabase->Parameters->Add(L"@idDoc", SqlDbType::Int);
    			cmdDatabase->Parameters["@idDoc"]->Value = iIdDoc;
    			cmdDatabase->Parameters->Add(L"@Lang", SqlDbType::Int);
    			cmdDatabase->Parameters["@Lang"]->Value = Lang;
    			CInterbaseManagerM::StartTransaction( cmdDatabase);
    			CInterbaseManagerM::ExecuteRequest( cmdDatabase, &dwNbResultFound);
    //	   [Update "ullLemmaID" of the current item of "ListAnalysedWord" with "hidNewLemmaID"]
                CInterbaseManagerM::CommitTransaction();
          }

    Le message "Officiel":

    Une exception de première chance de type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll
    

    et le message de l'erreur

    chars = 0x08ED9518 "L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "T_POS_FK1". Le conflit s'est produit dans la base de données "COHERENCE", table "dbo.T_POS", column 'siIdPOS'.
    L'instruction a été arrêtée."
    Je ne vois pas en quoi le contrainte est violée?


    Jean Noël Martin

    mardi 8 juillet 2014 20:06

Réponses

Toutes les réponses

  • Tu dois inversser dans ta requete cExcluded et siIdPOS.
    mercredi 9 juillet 2014 07:27
  • j'ai donc modifié la requête:

    			SqlCommand ^ cmdDatabase = gcnew SqlCommand(L"INSERT INTO T_LEMMA ( vcString, siIdPOS, cExcluded, siIdGender, siIdTypD, siIdD, siIdLang) VALUES ( @Text, @ValWord, @POS, @Gender, @TypeDoc, @idDoc, @Lang);", CInterbaseManagerM::myConnexion);
    

    et ça n'a rien changé.

    chars = 0x0BD7E5E8 "L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "T_POS_FK1". Le conflit s'est produit dans la base de données "COHERENCE", table "dbo.T_POS", column 'siIdPOS'.
    L'instruction a été arrêtée."


    Jean Noël Martin

    mercredi 9 juillet 2014 07:51
  • Tu as inverssé les deux ? Je pense qu'il faut que siIdPOS corresponde à @POS et que cExcluded corresponde à @ValWord

    NSERT INTO T_LEMMA ( vcString, siIdPOS, cExcluded , siIdGender, siIdTypD, siIdD, siIdLang) VALUES ( @Text, @POS, @ValWord, @Gender, @TypeDoc, @idDoc, @Lang);

    mercredi 9 juillet 2014 07:56
  • Bonjour

    Jean Noël avez-vous des nouvelles pour nous?

    Merci!

    Bien cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 14 juillet 2014 12:45
    Modérateur
  • Suite aux différentes correction ce problème à disparu

    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mardi 15 juillet 2014 10:09
    mardi 15 juillet 2014 10:09