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

VB.NET Discussion :

Récupération dans base SQL


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur maintenance
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Par défaut Récupération dans base SQL
    Bonjour à tous,

    Lors de la recherche sur la base de données SQL (j'utilise PHPmyAdmin) d'une ligne, le temps de réponse est trop long et le programme s'arrête lorsqu'il est dans la fonction ReadRecord (qui permet d'aller chercher dans la base de données.

    Je veux, lorsque je clique sur le bouton qui me lance la recherche, que le programme aille chercher dans la base le chemin d'accès que j'ai récupéré au préalable. Il contient des anti slashs que je suppose être la cause du problème, mais sans certitude ni moyen de le vérifier. Je sais que l'anti slash est utilisé comme caractère d'espacement dans SQL, mais je ne pense pas que cela intervienne. Voici les quelques lignes qui permettent à mon programme d'aller chercher le chemin d'accès dans la base de données puis d'ouvrir le fichier correspondant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ButtonCreer_Click(sender As Object, e As EventArgs) Handles ButtonCreer.Click
            Dim requete As String = "Select chemin from references where type = '" & ComboBoxType.Text & "';"
     
            Dim reponseSelect As DataTable
            reponseSelect = readRecord(requete)
            Process.Start(reponseSelect.Rows(0).Item("chemin").ToString)
        End Sub
    J'ai fait un pas à pas détaillé, et le programme s'arrête dans la fonction ReadRecord. J'ai essayé avec d'autres entités comme la vitesse (qui est seulement un nombre à 4 chiffres), et cela fonctionne.

    Auriez vous une idée d'où cela pourrait venir ? Ou plutôt comment résoudre le problème..

    Merci beaucoup.

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    ReadRecord est une fonction perso ou du framework (je ne la connais pas) ?
    Quand tu dis "Le programme s'arrête", tu catch une exception ? Tu es en débug ?
    Dans ta base, les chemins contiennent bien l'anti-slash ? Sont-ils doublés ?

    Question annexe : Pourquoi charger une datatable si tu ne veux récupérer qu'une ligne ?

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur maintenance
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Par défaut
    Readrecord est une fonction récupérée sur internet qui permet de lire une base de données. Quand je dis que le programme s'arrête, c'est en fait une tempo à l'intérieur de la fonction ReadRecord qui arrête le programme lorsque le temps de réponse de la base est trop long.

    Les chemins d'accès contiennent bien des anti-slashs puisque je les ai doublés lors de la saisie dans la base.

    La récupération se fait bien lorsque je prend des petites entités comme la vitesse, je pense donc que cela vient du format du chemin d'accès.

  4. #4
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Peut-on voir le code de ReadRecord ?

    Si en débug tu récupères la valeur de variable requête (donc avec la concaténation de ta Combo), et que tu la c/c dans ton SGBD, elle s’exécute et tu as bien un retour ?

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    un chronomètre (c'est souvent utile d'avoir des chiffres) : system.Diagnostics.stopwatch (.Start .Stop .ElapsedMilliseconds)

    le temps de lecture d'une ligne ne doit pas être long, c'est peut etre le temps d'exécution de la requête qui est long, pour vérifier ca phpmyadmin a peut etre des outils de profiling/statistiques
    combien y a t il de lignes dans la table ? la colonne de recherche est elle indexée ?

    le code de ta fonction ? as tu compris ce code ?

    une tempo pour arrêter une requete qui met du temps ca me parait étrange, si on veut le résultat de la requete il faut bien l'exécuter même si c'est long ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur maintenance
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Public Function readRecord(ByVal query As String) As DataTable
     
            'initialiser le dataset
            Dim samplesource As New DataSet
            Dim Table As DataTable
     
     
            Try
                'initialiser l'objet de connexion
                Dim connection As New MySqlConnection(connStr)
                'créer l'objet de commande
                Dim samplecommand As New MySqlCommand
                'initialiser l'adaptateur sql
                Dim sampledataadapter = New MySqlDataAdapter()
     
                'ouvrir la connexion
                connection.Open()
     
                samplecommand.CommandText = query                   'détermine la requête
                samplecommand.Connection = connection               'connecte l'objet de commande avec la connexion active
                sampledataadapter.SelectCommand = samplecommand     'déclare l'objet de commande à l'a
                sampledataadapter.Fill(samplesource)                'rempli la table avec les données de l'adaptateur
                Table = samplesource.Tables(0)
     
                connection.Close()
     
                Return Table
     
            Catch ex As Exception
                MsgBox("Connexion impossible à la base " & ex.Message, MsgBoxStyle.Critical)
     
            End Try
     
        End Function
    Voici le code de la fonction ReadRecord. Je ne l'ai pas forcément compris puisque nous l'avons récupéré sur Internet.

    Si je debug, et rentre la requête SQL directement dans mon SGBD, j'ai effectivement un résultat qui me revient, avec le chemin d'accès correctement écrit.

    Il y a très peu de lignes pour le moment, puisque j'ai seulement fait des tests avec la base. Elle servira plus tard pour un sous-traitant, qui la remplira lui même avec l'onglet d'ajout de références.

    Je n'ai pas d'index dans la table, puisque chaque ligne à un code unique (la référence du moteur).

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

Discussions similaires

  1. [MySQL] Récupération dans base SQL
    Par worldhugo dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 17/01/2009, 09h29
  2. [SQL] Faire une recherche plus modification dans base sql
    Par ju3979 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 09/08/2007, 17h26
  3. [SQL] Problème insertion dans Base SQL après saisie d'un formulaire
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 15/05/2007, 13h44
  4. Builder Borland C++ 6 : Ecrire dans base SQL
    Par AngelFire dans le forum C++Builder
    Réponses: 1
    Dernier message: 08/05/2007, 22h40
  5. [MySQL] Supprimer entrée dans base sql par un simple clique
    Par mickado dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/03/2007, 17h15

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