probleme requete Sql sur update clef primaire

probleme requete Sql sur update clef primaire - C#/.NET managed - Programmation

Marsh Posté le 23-05-2009 à 10:22:22    


Bonjour,
 
Je développe en C# avec une BDD Oracle XE. Je souhaiterai mettre à jour des données d'une table (reserver). Cette table possède une clef primaire (pk_reserver) qui comporte 4 champs. Lorsque je veux mettre à jour la clef primaire, j'ai cette erreur:
 
ORA-00001: violation de contrainte unique (GESTION_TENNIS.PK_RESERVER)
 
 
Voici ma requete:
 
UPDATE réserver SET numTerrainRéserver = '24', dateRéserver = '19/06/09', heureRéserver = 10 WHERE numAdhérentRéserver = 24;
 
Dans cette requete je peux mettre à jour (numTerrainRéserver , dateRéserver, heureRéserver), ces 3 champs font partie de la clef primaire de reserver. L'autre champs qui compose la clef primaire est:numAdhérentRéserver
 
 
Merci pour votre aide
 

Reply

Marsh Posté le 23-05-2009 à 10:22:22   

Reply

Marsh Posté le 23-05-2009 à 11:11:30    

suethi a écrit :

 

Dans cette requete je peux mettre à jour (numTerrainRéserver , dateRéserver, heureRéserver), ces 3 champs font partie de la clef primaire de reserver. L'autre champs qui compose la clef primaire est:numAdhérentRéserver


Euh.... 4 champs qui composent une clé primaire ???
Une clé primaire est en général composée d'un seul champ, qui permet d'identifier l'enregistrement de façon unique. La plupart du temps il s'agit d'un id numérique autoincrémenté. Pourquoi diable as tu 4 clés primaires ??
Si tu as une violation de contrainte unique, ça veut dire que tu as déjà un enregistrement dont ces 4 champs sont identiques à celui que tu essaies d'insérer.

 

edit: grilled, ça m'apprendra à mettre 3 plombes pour rédiger un post


Message édité par Harkonnen le 23-05-2009 à 11:12:04

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-05-2009 à 11:42:54    

je n'ai pas 4 clef primaire, c'est la concaténation des 4 champs qui font une clef primaire. Lorsque tu réprésentes cette table en MCD, c'est une association porteuse de donnée.

Reply

Marsh Posté le 23-05-2009 à 22:53:29    

Non, il n'existe pas l'enregistrement. C'est cela qui me semble bizarre. Est ce un rapport avec les clef étrangère. Tous ces champs sont des clefs étrangère.


Message édité par suethi le 23-05-2009 à 22:54:16
Reply

Marsh Posté le 23-05-2009 à 23:20:05    

Bon, ce sont des clés primaires ou des clés étrangères ? J'ai un peu l'impression que tu te mélanges les pédales là...
Je veux bien croire qu'Oracle soit une grosse merde, mais de là à balancer une 00001 pour rien, ça je ne l'ai jamais vu de sa part.
Donc vérifie que les champs référencés par ta contrainte d'unicité PK_RESERVER n'existent pas déjà dans ta table. C'est la seule et unique raison de son déclenchement.


Message édité par Harkonnen le 23-05-2009 à 23:20:21

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-05-2009 à 23:41:07    

mais non, je n'ai pas le même enregistrement, c'est cela qui est dingue.

Reply

Marsh Posté le 24-05-2009 à 01:16:18    


+1


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-05-2009 à 09:13:38    

ok mais si un autre adhérent réserve le même terrain à la même heure, il pourra être inséré dans la bdd. Donc il y a un problème. C'est pour cela que j'ai créé cette clef primaire (numTerrainRéserver , numAdhérentRéserver, dateRéserver, heureRéserver).
 
 
voici ma création table:
 
CREATE TABLE  "RÉSERVER"  
   ( "NUMTERRAINRÉSERVER" NUMBER(*,0) NOT NULL ENABLE,  
 "NUMADHÉRENTRÉSERVER" NUMBER(*,0) NOT NULL ENABLE,  
 "DATERÉSERVER" DATE NOT NULL ENABLE,  
 "HEURERÉSERVER" NUMBER NOT NULL ENABLE,  
  CONSTRAINT "PK_RESERVER" PRIMARY KEY ("NUMTERRAINRÉSERVER", "NUMADHÉRENTRÉSERVER", "DATERÉSERVER", "HEURERÉSERVER" ) ENABLE,  
  CONSTRAINT "FK_3" FOREIGN KEY ("NUMTERRAINRÉSERVER" )
   REFERENCES  "TERRAINS" ("NUMTERRAIN" ) ENABLE,  
  CONSTRAINT "FK_4" FOREIGN KEY ("NUMADHÉRENTRÉSERVER" )
   REFERENCES  "ADHÉRENTS" ("NUMADHÉRENT" ) ENABLE
   )
 
 
voici mon code C#:
 
 public static void update_resa(string numAdherent, string numTerrain, string date, string heure)
        {
            MessageBox.Show(heure);
            reqSql = "UPDATE réserver SET numTerrainRéserver = '" + numTerrain + "', dateRéserver = '" + date + "', heureRéserver = '" + heure + "' WHERE numAdhérentRéserver = '" + numAdherent + "'";
            command = new OracleCommand(reqSql, connect);
            command.CommandType = CommandType.Text;
            command.ExecuteNonQuery();
        }
 
 
merci pour votre aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed