Problème avec base Access : impossible de supprimer
6 réponses
fragmonster
Bonjour,
J'ai une appli winform qui me permet de choisir un fichier Access
(2000) sur mon disque dur puis de supprimer des enregistrements afin de
faire du m=E9nage.
Le souci c'est que la suppression ne marche pas et j'ai un message
d'erreur "impossible de supprimer dans les tables sp=E9cifi=E9es".
Pourtant je n'ai aucune relation entre table. Pire, la m=EAme base
access est utilis=E9e dans une autre appli winform qui marche
parfaitement et dans laquelle je peux cr=E9er et/ou supprimer des
enregistrements sans aucun probl=E8me.
Si je tente un insertion au lieu d'une suppression j'ai un autre
message "l'op=E9ration doit utiliser une requete qui peut =EAtre mise =E0
jour". J'avoue ne plus savoir quoi faire...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Bacelar
La chaine de connection SVP. -- Paul Bacelar MVP VC++
"fragmonster" wrote in message news: Bonjour, J'ai une appli winform qui me permet de choisir un fichier Access (2000) sur mon disque dur puis de supprimer des enregistrements afin de faire du ménage.
Le souci c'est que la suppression ne marche pas et j'ai un message d'erreur "impossible de supprimer dans les tables spécifiées".
Pourtant je n'ai aucune relation entre table. Pire, la même base access est utilisée dans une autre appli winform qui marche parfaitement et dans laquelle je peux créer et/ou supprimer des enregistrements sans aucun problème.
Si je tente un insertion au lieu d'une suppression j'ai un autre message "l'opération doit utiliser une requete qui peut être mise à jour". J'avoue ne plus savoir quoi faire...
La chaine de connection SVP.
--
Paul Bacelar
MVP VC++
"fragmonster" <fmeriot@gmail.com> wrote in message
news:1135692786.734592.264960@g49g2000cwa.googlegroups.com...
Bonjour,
J'ai une appli winform qui me permet de choisir un fichier Access
(2000) sur mon disque dur puis de supprimer des enregistrements afin de
faire du ménage.
Le souci c'est que la suppression ne marche pas et j'ai un message
d'erreur "impossible de supprimer dans les tables spécifiées".
Pourtant je n'ai aucune relation entre table. Pire, la même base
access est utilisée dans une autre appli winform qui marche
parfaitement et dans laquelle je peux créer et/ou supprimer des
enregistrements sans aucun problème.
Si je tente un insertion au lieu d'une suppression j'ai un autre
message "l'opération doit utiliser une requete qui peut être mise à
jour". J'avoue ne plus savoir quoi faire...
La chaine de connection SVP. -- Paul Bacelar MVP VC++
"fragmonster" wrote in message news: Bonjour, J'ai une appli winform qui me permet de choisir un fichier Access (2000) sur mon disque dur puis de supprimer des enregistrements afin de faire du ménage.
Le souci c'est que la suppression ne marche pas et j'ai un message d'erreur "impossible de supprimer dans les tables spécifiées".
Pourtant je n'ai aucune relation entre table. Pire, la même base access est utilisée dans une autre appli winform qui marche parfaitement et dans laquelle je peux créer et/ou supprimer des enregistrements sans aucun problème.
Si je tente un insertion au lieu d'une suppression j'ai un autre message "l'opération doit utiliser une requete qui peut être mise à jour". J'avoue ne plus savoir quoi faire...
fragmonster
Voilà la chaine de connexion : Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:testphyto.mdb;User Id=;Password=
Je rappelle que cette chaine de connexion fonctionne bien puisque j'arrive a lancer des requètes SELECT et a afficher le résultat. Cependant, les requetes INSERT et UPDATE ne fonctionne pas dans mon exe, alors que ces mêmes requètes fonctionnent si je les execute depuis Access. Un autre exe qui utilise la même chaine de connexion ainsi que la même base fonctionne très bien.
La seule différence que je vois c'est que c'est l'utilisateur qui choisi le fichier .mdb sur son disque dur :
Voici la méthode qui gère le choix du fichier (le truc classique quoi) :
catch(Exception ex) { MessageBox.Show(ex.Message,"Erreur de connexion à la base " + accessFile + " !" , MessageBoxButtons.OK,MessageBoxIcon.Information ); } }
En fait j'ai un bouton "connecter" qui lorsqu'il est cliqué se connecte au fichier .mdb choisi. Une fois connecté, un nouveau clic provoque la déconnexion (un bouton bascule). Ceci marche très bien car si j'utilise la connexion ainsi créée, je peux lancer des requetes sans pb, à part le fait que les update et insert ne marchent pas.
Voilà la chaine de connexion :
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:testphyto.mdb;User
Id=;Password=
Je rappelle que cette chaine de connexion fonctionne bien puisque
j'arrive a lancer des requètes SELECT et a afficher le résultat.
Cependant, les requetes INSERT et UPDATE ne fonctionne pas dans mon
exe, alors que ces mêmes requètes fonctionnent si je les execute
depuis Access. Un autre exe qui utilise la même chaine de connexion
ainsi que la même base fonctionne très bien.
La seule différence que je vois c'est que c'est l'utilisateur qui
choisi le fichier .mdb sur son disque dur :
Voici la méthode qui gère le choix du fichier (le truc classique
quoi) :
catch(Exception ex)
{
MessageBox.Show(ex.Message,"Erreur de connexion à la base " +
accessFile + " !" , MessageBoxButtons.OK,MessageBoxIcon.Information );
}
}
En fait j'ai un bouton "connecter" qui lorsqu'il est cliqué se
connecte au fichier .mdb choisi. Une fois connecté, un nouveau clic
provoque la déconnexion (un bouton bascule). Ceci marche très bien
car si j'utilise la connexion ainsi créée, je peux lancer des
requetes sans pb, à part le fait que les update et insert ne marchent
pas.
Voilà la chaine de connexion : Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:testphyto.mdb;User Id=;Password=
Je rappelle que cette chaine de connexion fonctionne bien puisque j'arrive a lancer des requètes SELECT et a afficher le résultat. Cependant, les requetes INSERT et UPDATE ne fonctionne pas dans mon exe, alors que ces mêmes requètes fonctionnent si je les execute depuis Access. Un autre exe qui utilise la même chaine de connexion ainsi que la même base fonctionne très bien.
La seule différence que je vois c'est que c'est l'utilisateur qui choisi le fichier .mdb sur son disque dur :
Voici la méthode qui gère le choix du fichier (le truc classique quoi) :
catch(Exception ex) { MessageBox.Show(ex.Message,"Erreur de connexion à la base " + accessFile + " !" , MessageBoxButtons.OK,MessageBoxIcon.Information ); } }
En fait j'ai un bouton "connecter" qui lorsqu'il est cliqué se connecte au fichier .mdb choisi. Une fois connecté, un nouveau clic provoque la déconnexion (un bouton bascule). Ceci marche très bien car si j'utilise la connexion ainsi créée, je peux lancer des requetes sans pb, à part le fait que les update et insert ne marchent pas.
Paul Bacelar
Vérifiez qu'avec utilisateur ayant les droits en écriture sur le fichier dans ID et un password renseigné, le comportement est le même. -- Paul Bacelar MVP VC++
"fragmonster" wrote in message news: Voilà la chaine de connexion : Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:testphyto.mdb;User Id=;Password Je rappelle que cette chaine de connexion fonctionne bien puisque j'arrive a lancer des requètes SELECT et a afficher le résultat. Cependant, les requetes INSERT et UPDATE ne fonctionne pas dans mon exe, alors que ces mêmes requètes fonctionnent si je les execute depuis Access. Un autre exe qui utilise la même chaine de connexion ainsi que la même base fonctionne très bien.
La seule différence que je vois c'est que c'est l'utilisateur qui choisi le fichier .mdb sur son disque dur :
Voici la méthode qui gère le choix du fichier (le truc classique quoi) :
catch(Exception ex) { MessageBox.Show(ex.Message,"Erreur de connexion à la base " + accessFile + " !" , MessageBoxButtons.OK,MessageBoxIcon.Information ); } }
En fait j'ai un bouton "connecter" qui lorsqu'il est cliqué se connecte au fichier .mdb choisi. Une fois connecté, un nouveau clic provoque la déconnexion (un bouton bascule). Ceci marche très bien car si j'utilise la connexion ainsi créée, je peux lancer des requetes sans pb, à part le fait que les update et insert ne marchent pas.
Vérifiez qu'avec utilisateur ayant les droits en écriture sur le fichier
dans ID et un password renseigné, le comportement est le même.
--
Paul Bacelar
MVP VC++
"fragmonster" <fmeriot@gmail.com> wrote in message
news:1135757191.031642.149170@g43g2000cwa.googlegroups.com...
Voilà la chaine de connexion :
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:testphyto.mdb;User
Id=;Password
Je rappelle que cette chaine de connexion fonctionne bien puisque
j'arrive a lancer des requètes SELECT et a afficher le résultat.
Cependant, les requetes INSERT et UPDATE ne fonctionne pas dans mon
exe, alors que ces mêmes requètes fonctionnent si je les execute
depuis Access. Un autre exe qui utilise la même chaine de connexion
ainsi que la même base fonctionne très bien.
La seule différence que je vois c'est que c'est l'utilisateur qui
choisi le fichier .mdb sur son disque dur :
Voici la méthode qui gère le choix du fichier (le truc classique
quoi) :
catch(Exception ex)
{
MessageBox.Show(ex.Message,"Erreur de connexion à la base " +
accessFile + " !" , MessageBoxButtons.OK,MessageBoxIcon.Information );
}
}
En fait j'ai un bouton "connecter" qui lorsqu'il est cliqué se
connecte au fichier .mdb choisi. Une fois connecté, un nouveau clic
provoque la déconnexion (un bouton bascule). Ceci marche très bien
car si j'utilise la connexion ainsi créée, je peux lancer des
requetes sans pb, à part le fait que les update et insert ne marchent
pas.
Vérifiez qu'avec utilisateur ayant les droits en écriture sur le fichier dans ID et un password renseigné, le comportement est le même. -- Paul Bacelar MVP VC++
"fragmonster" wrote in message news: Voilà la chaine de connexion : Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:testphyto.mdb;User Id=;Password Je rappelle que cette chaine de connexion fonctionne bien puisque j'arrive a lancer des requètes SELECT et a afficher le résultat. Cependant, les requetes INSERT et UPDATE ne fonctionne pas dans mon exe, alors que ces mêmes requètes fonctionnent si je les execute depuis Access. Un autre exe qui utilise la même chaine de connexion ainsi que la même base fonctionne très bien.
La seule différence que je vois c'est que c'est l'utilisateur qui choisi le fichier .mdb sur son disque dur :
Voici la méthode qui gère le choix du fichier (le truc classique quoi) :
catch(Exception ex) { MessageBox.Show(ex.Message,"Erreur de connexion à la base " + accessFile + " !" , MessageBoxButtons.OK,MessageBoxIcon.Information ); } }
En fait j'ai un bouton "connecter" qui lorsqu'il est cliqué se connecte au fichier .mdb choisi. Une fois connecté, un nouveau clic provoque la déconnexion (un bouton bascule). Ceci marche très bien car si j'utilise la connexion ainsi créée, je peux lancer des requetes sans pb, à part le fait que les update et insert ne marchent pas.
fragmonster
Oui, j'ai vérifié en forçant un ID et un password et le comportement est le même ... :/
Oui, j'ai vérifié en forçant un ID et un password et le comportement
est le même ... :/
Oui, j'ai vérifié en forçant un ID et un password et le comportement est le même ... :/
fragmonster
Ah! je crois avoir trouvé d'où vient le problème : j'ai l'impression que je OpenFileDialog grâce auquel je choisi mon fichier .mdb, garde une référence quelconque sur ce fichier et le rend impossible à modifier.
En effet, si je mets le fichier en dur dans ma chaine de connexion ça marche nikel. Par contre si je le choisi via mon OpenFileDialog ça plante.
Comment faire en sorte que le openFileDialog me rende la main sur mon fichier? J'ai beau faire un Dispose() après avoir récupéré le nom du fichier, ça continue de planter.
Merci
Ah! je crois avoir trouvé d'où vient le problème : j'ai l'impression
que je OpenFileDialog grâce auquel je choisi mon fichier .mdb, garde
une référence quelconque sur ce fichier et le rend impossible à
modifier.
En effet, si je mets le fichier en dur dans ma chaine de connexion ça
marche nikel. Par contre si je le choisi via mon OpenFileDialog ça
plante.
Comment faire en sorte que le openFileDialog me rende la main sur mon
fichier? J'ai beau faire un Dispose() après avoir récupéré le nom
du fichier, ça continue de planter.
Ah! je crois avoir trouvé d'où vient le problème : j'ai l'impression que je OpenFileDialog grâce auquel je choisi mon fichier .mdb, garde une référence quelconque sur ce fichier et le rend impossible à modifier.
En effet, si je mets le fichier en dur dans ma chaine de connexion ça marche nikel. Par contre si je le choisi via mon OpenFileDialog ça plante.
Comment faire en sorte que le openFileDialog me rende la main sur mon fichier? J'ai beau faire un Dispose() après avoir récupéré le nom du fichier, ça continue de planter.
Merci
fragmonster
Bon, finalement j'ai trouvé d'où venait mon erreur : Peut-être que ça pourra en intéresser certains : En fait, dans ma méthode qui selectionne un fichier sur le disque (qui provient elle même d'un copier/coller du SDK), il faut retirer le openFileDialog1.OpenFile() qui en fait ouvre le fichier en lecture seule. Dans mon cas, je n'ai pas besoin d'ouvrir le fichier selectionné, mais juste de récupérer son nom afin de constituer ma chaine de connexion.
if(openFileDialog1.ShowDialog() == DialogResult.OK) suffit apparemment à initialiser les properties qui m'intéressent (FileName, ...etc).
Bon, finalement j'ai trouvé d'où venait mon erreur : Peut-être que
ça pourra en intéresser certains : En fait, dans ma méthode qui
selectionne un fichier sur le disque (qui provient elle même d'un
copier/coller du SDK), il faut retirer le openFileDialog1.OpenFile()
qui en fait ouvre le fichier en lecture seule. Dans mon cas, je n'ai
pas besoin d'ouvrir le fichier selectionné, mais juste de récupérer
son nom afin de constituer ma chaine de connexion.
if(openFileDialog1.ShowDialog() == DialogResult.OK) suffit apparemment
à initialiser les properties qui m'intéressent (FileName, ...etc).
Bon, finalement j'ai trouvé d'où venait mon erreur : Peut-être que ça pourra en intéresser certains : En fait, dans ma méthode qui selectionne un fichier sur le disque (qui provient elle même d'un copier/coller du SDK), il faut retirer le openFileDialog1.OpenFile() qui en fait ouvre le fichier en lecture seule. Dans mon cas, je n'ai pas besoin d'ouvrir le fichier selectionné, mais juste de récupérer son nom afin de constituer ma chaine de connexion.
if(openFileDialog1.ShowDialog() == DialogResult.OK) suffit apparemment à initialiser les properties qui m'intéressent (FileName, ...etc).