Problème de violation d'acces lors d'une suppression

AionSinner Messages postés 6 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 5 janvier 2007 - 4 janv. 2007 à 16:12
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 - 27 avril 2007 à 20:23
Bonjour à tous,


Voilà maintenant plusieurs longues heures que me casse la tête sur un problème et je n'en trouve pas la solution, alors s'il vous plait ... Qu'on me vienne en aide !!!


Je construis actuellement un programme pour application portative sous .NET, et alors que j'en suis à la phase terminale de réalisation je bloque sur un petit problème :


J'ai une table (nommée "LISTE_COMPOSANT") dans une base de donnée (nommée "pda.sdf")
J'interagit déjà avec cette table sans aucun problème (utilisation de INSERT) mais lorsque je cherche à supprimer des éléments, voir dans le cas suivant à complètement vider la table, je tombe sur une erreur de type "Violation d'accès"

Voici la compo de ma table :

LISTE_COMPOSANT
Nom_composant                     NvarChar de taille 100
Id_composant                         Int de taille 4   Clef primaire et Unique
SE_pere                                  Nvarchar de taille 100   Clef Primaire et Unique



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 







Voici la sub permettant l'utilisation du dataset et dataadapter (respectivement "dasXLComp" et "dapXLComp") :







Sub
CompXLBDD()





'Specification d'un connexion pour un data adapter





Dim
PATH AsString = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase)





Dim
SQLFile AsString = "\BasePDA.sdf"





Dim
cnn1 As SqlCeConnection New SqlCeConnection("Data Source" & PATH & SQLFile)





'Specification du dataadapter





dapXLComp = New SqlCeDataAdapter("SELECT Id_composant, Nom_composant, SE_pere " & "FROM LISTE_COMPOSANT", cnn1)





'Définition de la commande Insert (FONCTION TRES BIEN)





dapXLComp.InsertCommand = New SqlCeCommand("INSERT INTO LISTE_COMPOSANT (Id_composant, Nom_composant, SE_pere)" & "VALUES (@Id_composant, @Nom_composant, @SE_pere)", cnn1)





'Spécification des paramétres de la commande





dapXLComp.InsertCommand.Parameters.Add("@Id_composant", Data.SqlDbType.NVarChar, 40, "Id_composant")





dapXLComp.InsertCommand.Parameters.Add("@Nom_composant", Data.SqlDbType.NVarChar, 40, "Nom_composant")





dapXLComp.InsertCommand.Parameters.Add("@SE_pere", Data.SqlDbType.NVarChar, 40, "SE_pere")





'Spécification de la chaîne de commande Delete






!!! LE PROBLEME SE SITUE ICI !!!











dapXLComp.DeleteCommand New SqlCeCommand("DELETE " & "FROM LISTE_COMPOSANT " & "WHERE Id_composant @Id_composant", cnn1)








'Spécification de la valeur de critère de correspondance (SUREMENT UN PROBLEME ICI MAIS JE NE LE VOIT PAS)





Dim prm3 As SqlCeParameter = dapXLComp.DeleteCommand.Parameters.Add("@Id_composant", Data.SqlDbType.Int)








prm3.SourceColumn = "Id_composant"








prm3.SourceVersion = Data.DataRowVersion.Original








'Ouverture de la connexion





cnn1.Open()





'Remplir l'ensemble de données avec le data adapter





dapXLComp.Fill(dasXLComp, "LISTE_COMPOSANT")





'Fermeture de la connexion





cnn1.Close()





End

Sub





Et voici enfin l'utilisation que j'en fait :






Sub permettant de supprimer tout le contenu de la table. J’utilise déjà ce type de sub avec d’autre table et ça marche très bien … je suppose donc que ça provient de la façon dont j’ai déclaré la command DELETE et de ses parametres.



''Efface le contenu des bases liste





Sub DeleteList()





CompXLBDD()





''Création d'une datatable permettant de manier le contenu


Dim DtCompDeleteMe As Data.DataTable = dasXLComp.Tables(
"LISTE_COMPOSANT"
)





Dim CurrentRowComp As Integer = 0





''Si des données existe alors on procède à leur supression


If DtCompDeleteMe.Rows.Count <> 0 Then





For CurrentRowComp = 0 To DtCompDeleteMe.Rows.Count - 1





dasXLComp.Tables(
"LISTE_COMPOSANT"
).Rows(CurrentRowComp).Delete()





Next







''Et on update : c'est là que ca merde en me donnant une erreur de type violation d'acces




dapXLComp.Update(dasXLComp,
"LISTE_COMPOSANT"
)





End If





DtCompDeleteMe.Dispose()





UnloadXLComp()





End Sub





 








 




Voilà si qqun peut m’aider ça serait génial !!!


Perso j’ai plus aucune idée … A moins qu’il y ait une méthode de suppression particulière à adopter lorsque l’on à deux clefs primaire dans une table ?



 




Merci d’avance et désolé si ça semble bordélique exposé comme ça.

1 réponse

asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
27 avril 2007 à 20:23
Le .Net, ça me donne des boutons, mais :
faut voir le problème de synchro.... Tu delete et update dans la micoseconde de notre processeur et ta base essaye de suivre. En skioul, faut travailler en transactionnel car, sinon, tu ne sais pas où en est ton lot d'instructon.
Soit, coté code, tu gère les propriétés de ta connexion et tu gêre les erreurs et autres TimeOut,
Soit, tu écris une belle prcédure, coté SQL,qui fait le travail et renvoie un status ...

Alain 31
0
Rejoignez-nous