IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]Connexion DB Access


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut [C#]Connexion DB Access
    Bonjour à tous !

    Je réalise actuellement une application basée sur une DB Access. La connexion se passe sans problème, sauf quand j'utilise un "OpenFileDialog" (afin de spécifier un lien qui doit être sauvé en DB). Lors de la sauvegarde, une erreur m'indique alors qu'il ne trouve plus le chemin de ma base de données. Actuellement, le chemin est simplement le nom du fichier dans la connectionString. Dois-je faire un traitement spécifique afin de rétablir la variable d'environnement path modifiée par le OpenFileDialog (je suppose que c'est ce qu'il fait), ou alors faut-il obligatoirement donner un nom logique à la base de données avec ODBC ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je suis pas sur d'avoir tout saisi là

    Tu peux réexpliquer ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Voici une explication plus détaillée du problème :

    Je développe actuellement une application permettant de gérer des données, stockées sous la forme d'une DB Access. Dans le formulaire d'encodage d'un nouvel enregistrement, j'ai prévu des contrôles textBox pour la valeur de chaque champ qui sera sauvegardée en DB. Jusque là, tout marche bien, après un clic sur "save", les données sont effectivement bien sauvées dans la DB.

    L'un des champs du formulaire contenant le chemin vers un fichier (ex : C:\img.jpg"), j'ai prévu un OpenFileDialog, qui après sélection du fichier, remplit automatiquement la textBox avec le chemin de ce fichier, tout simplement afin que l'encodage soit le plus ergonomique possible.

    A partir de ce moment là, ça coince. Après un clic sur "save", une erreur apparait, spécifiant que la base de données (ex: base.mdb) n'a pas été trouvée. Le chemin vers la base de données dans le message d'erreur indique : [chemin vers le fichier image sélectionné]/base.mdb. Par exemple, en sélectionnant précédament un fichier image situé dans C:\images\pic.jpg, le message d'erreur sera le suivant : "Could not find the database located at C:\images\base.mdb"

    On dirait donc que le contrôle OpenFileDialog modifie le chemin d'accès, je ne sais pas exactement de quelle manière. J'ai entendu parler de la variable d'environnement path, mais je ne sais pas si c'est celle là dont il s'agit.

    Comment contourner ce problème ?

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Peut-on voir un peu ton code ? Celui de l'OpenFileDialoget celui de l'enregistrement ?


    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Etant au travail, j'ajouterai la source demandée ce soir. Toutefois, elle n'est pas bien compliquée : Evenement DialogResult.OK sur l'OpenFileDialog :

    imageTextBox.Text = texte dans l'openFileDialog.

    Clic sur bouton save : constitution de la query avec les valeurs des différents champs et ExecuteNonQuery();

    Une petite indication qui pourrait être intéressante : le chemin vers ma base de données est indiqué dans la connectionString juste via le nom du fichier (qui se trouve dans bin/debug). Autrement dit, pas besoin d'un chemin compliqué vu que le .mdb se trouve au même niveau que l'exe.

    Mais après utilisation du OpenFileDialog, c'est fini ça ne marche plus. Lorsque l'on réouvre ce dialog, je peux constater qu'il a retenu dans quel répertoire on était la fois passée (il y a donc une notion de mémorisation du dernier dossier dans lequel on se trouve). Et c'est là où est le problème... Le programme cherche le .mdb à partir de ce chemin.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Voici en (très) résumé le contenu de la méthode ajouter :

    ADO.ExecuteNonQuery(query.ToString());

    Le contenu du OpenFileDialog :

    private void exeLocatorButton_Click(object sender, EventArgs e)
    {
    OpenFileDialog openFileDlg = new OpenFileDialog();
    openFileDlg.Filter = "Exe files (*.exe)|*.exe";
    DialogResult result = openFileDlg.ShowDialog();

    if (result == DialogResult.OK)
    exeTextBox.Text = openFileDlg.FileName;
    }


    La connectionString :

    private static String databasePath = "MyGamesListDataBase.mdb";
    private static String connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source=" + databasePath;


    La méthode ExecuteNonQuery de ma classe ADO :

    try
    {
    OleDbConnection connection = new OleDbConnection(connectionString);

    connection.Open();
    OleDbCommand OleInsert = new OleDbCommand(query, connection);
    affectedRows = OleInsert.ExecuteNonQuery();
    connection.Close();
    }
    catch (OleDbException e)
    {
    Console.WriteLine(e.Message);
    }

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Ben là, c'est un mystère.....

    Je vois pas pkoi tu as ce pb

  8. #8
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par Tips
    il y a donc une notion de mémorisation du dernier dossier dans lequel on se trouve
    C'est tout à fait ca

    Voici la preuve en exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string path1 = Environment.CurrentDirectory;
    DialogResult result = this.openFileDialog1.ShowDialog();
    string path2 = Environment.CurrentDirectory;
    ...
    A l'exécution, dans path1 tu auras le répertoire de ton exécutable et dans path2 tu auras le répertoire où tu as été avec le OpenFileDialog.

    Mais le framework est gentil avec nous et le contrôle OpenFileDialog possède une propriété RestoreDirectory qui une fois à true devrait faire ton bonheur en restaurant la valeur du répertoire courant
    Pas de questions techniques par MP

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    CA MARCHE !!!

    Super ! C'était un point sensible de mon application qui me bloquait depuis un certain temps.

    Pour info, il s'agit d'un programme permettant de gérer sa liste de jeux (photos, titres, éditeurs, types de jeu, versions, multijoueur ou non, ...), un menu admin pour gérer sa DB, une option permettant de prêter des jeux, et avoir un reminder quand la date de prêt est expirée... Si jamais ça intéresse quelqu'un, je pourrai le diffuser

    Mon prochain but avant de le fignoler : un générateur d'HTML, pour transmettre à des potes sa liste de jeux, qui sera générée selon différents critères (présence d'images ou non, que les jeux multijoueurs, la version, etc)

    Mon prochain projet sera de prévoir un programme similaire pour gérer ses films : synopsis, acteurs, ... et sûrement un système de statistiques en GDI+ (nombre de films de tel type, nombre de films de tel acteur, ...)

    En tout cas, un tout grand merci pour cette solution, StormimOn !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ACCESS] connexion base ACCESS sans VC++ ou BC++ ni wizard
    Par roce dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 18/03/2007, 23h13
  2. [JDBC] problème connexion à MS Access
    Par naz dans le forum JDBC
    Réponses: 7
    Dernier message: 03/10/2005, 10h06
  3. emuler des pages asp avec connexion a access
    Par laville dans le forum ASP
    Réponses: 2
    Dernier message: 01/06/2005, 18h44
  4. pb connexion asp/access
    Par cell dans le forum ASP
    Réponses: 5
    Dernier message: 21/04/2005, 17h31
  5. [ODBC] Connexion MS-Access sans DSN
    Par Chap$ dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/11/2004, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo