Modifications sur une base de données Access

Signaler
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007
-
patheo
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
-
Bonjour, je poste ce topic parceque j'ai un problème à executer une "non-query" requête sur ma base de données access. J'arrive à en extraire des infos(dataAdapter + dataSet), mais pas à creer de table ou d'insérer des champs. Je ne comprend pas, tout semble pourtant correct... alors si quelqu'un peut m'aider... .
Mon Code :


OdbcConnection connection=
new OdbcConnection();

string connectionString = "DNS=MS Access Database";
connection.ConnectionString = connectionString;

string requete = "
CREATE TABLE table (id int4, categorie varchar(64));";
OdbcCommand commande =
new OdbcCommand(requete, connection);
commande.ExecuteNonQuery();
//ici j'ai l'erreur : Une exception non gérée du type 'System.Data.Odbc.OdbcException' s'est
//produite dans system.data.dll

//Informations supplémentaires : Erreur système.

Merci d'avance..

17 réponses

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
Salut,

A mon avis :

OdbcCommand commande = new OdbcCommand(requete, connection);
connection.Open();
commande.ExecuteNonQuery();
...
connection.Close();

/*
coq
MVP Visual C#
*/
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007

Heu...non, désolé, ça ne marche pas mieux... J'ai la même erreur même après avoir ouvert la connection après la création de la commande...
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
"string connectionString = " DNS =MS Access Database";"
Du peu que je me souvienne du monde ODBC, il s'agit plutot de DSN (Data Source Name)

Sinon regarde aussi du côté des connexions DSN-less.

Un petit site bien pratique pour ce genre de chose : ConnectionStrings.com

/*
coq
MVP Visual C#
*/
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007

Je me suis trompé dans le code que j'ai posté, j'ai bien "DSN" dans mon appli, désolé.
Sinon, du coté des connections sans DSN, j'ai eu aucun résultat, et toujours cette même erreur... De toute façons, je doit faire une application utilisant les DSN (pour permettre à l'utilisateur de changer le DSN)... Je suis donc re-bloqué...
Messages postés
22
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
22 février 2006

Moi j'utiliserai un try catch autour de ton instruction pour avoir un message d'erreur plus clair.

Comme ceci :

OdbcConnection connection=
new OdbcConnection();

string connectionString = "DNS=MS Access Database";
connection.ConnectionString = connectionString;

string requete = "
CREATE TABLE table (id int4, categorie varchar(64));";
OdbcCommand commande =
new OdbcCommand(requete, connection);

try{
connection.open();
commande.ExecuteNonQuery();
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}

Et on se rend compte que ton erreur vient de ta ligne connection.open().
Et on obtient : "Source de données introuvable et nom de pilote non spécifié".
Il reste à plancher là dessus...
Messages postés
22
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
22 février 2006

Autant pour moi, en mettant DSN on a l'erreur "Echec SQLSetConnectAttr du pilote".

Késako ?

Y'aurai pas quelque chose à paramétrer dans le panneau de configurations, Outils d'administration, Source de données (ODBC)....?
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
Oui ce message là chez toi c'est normal si tu n'as pas définie la source de données ODBC sur ton système.

/*
coq
MVP Visual C#
*/
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007

Oups...désolé pr le dernier post, c une erreur....(c ma signature)
C'était juste pour dire que tu peux configurer ton "alias" entre DSN et Base de données dans le panneau de configuration->Outils d'administration->Sources de données (ODBC)
Merci en tt cas de vous pencher sur mon problème...
Messages postés
22
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
22 février 2006

Tout à fait coq, maintenant que c'est paramêtré, j'obtiens l'erreur "Erreur de syntaxe dans l'instruction CREATE TABLE".

Ca se précise...!?
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007

"Y'aurai pas quelque chose à paramétrer dans le panneau de configurations, Outils d'administration, Source de données (ODBC)....?"
ok, alors visiblement je suis à l'ouest , désolé homerrrrr , il faut que dans l'onglet "sources de données utilisateur" tu cliques sur "ajouter", tu choisis ton type de base (ici "Access (*.mdb)" et tu lui attribut un DSN, que tu peu rappeler dans ton prog ("DSN=monDSN")..voilà...
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007

OK...j'ai un train de retard...
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
Ah oui exact Homerrrrr je n'avais pas trop vérifier la requête en elle même.
Logiquement "table" est un mot réservé, c'est donc peut être le nom qui pose problème.

/*
coq
MVP Visual C#
*/
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007

Apparemment, ce n'est pas ça. J'ai déjà essayé avec d'autres noms de table sans succès...

//I love geeks
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
Ok mais visiblement l'erreur est dans la requête quand même.
Une piste : je te laisse dégainer la doc d'Access afin de vérifier la prise en charge du type "varchar". (ce ne serais pas plutot "text" ?)

/*
coq
MVP Visual C#
*/
Messages postés
22
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
22 février 2006

Bon voilà une syntaxe qui fonctionne :

string requete = "CREATE TABLE t (id integer, categorie varchar(64));";

En gros, tu ne peux pas créer une table appelée "table" et tu ne peux définir une longueur pour ton champ de type INTEGER.

Voilà !
Messages postés
15
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
26 janvier 2007

Merci!!!! En fait, je cherchai un problème du coté C# ou SQL alors ke c'était un problème Access... Enfin bref, merci d'avoir passé du tps pr me sortir de là...

//I love geeks
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014

Bonjour! j'ai créer une base de données sous Access et je souhaitait créer une inerface de connection par laquelle les utilisateurs pourront accéder à la base de données en entrant leur compte utilisateur et leur mot de passe. Puis-je avoir un exemple de code.
Merci d'avence!