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

Access Discussion :

Plantage bizarre en VBA


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut Plantage bizarre en VBA
    Bonjour,

    Je viens de creer une fonction qui me retire les lignes inutiles d une requete et qui me l affiche dans une liste de mon formulaire.

    Je cree donc sous VB une requete qui contient toutes les lignes non desirees, et une autre qui fait un NOT IN cette requete pour avoir mon resultat final.

    Mon code marche bien jusqu au moment ou je demande a ma liste de changer de source

    Me.lst_resultat.RowSource = "select * from finalquery"

    La Access plante, et je ne sais pas pourquoi... alors que quand je mets un breakpoint juste avant cette ligne et que j ouvre les requetes que j ouvre les requetes que j ai crees en VB, elles marchent sans problemes.

    Si quelqu un a une idee, cela serait genial. Je vous mets mon code en dessous si vous avez la patience de mettre le nez dedans.

    Merci d avance



    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Private Sub Command122_Click()
     
    Dim oRst As DAO.Recordset
    Dim colonnes As Single
    Dim i As Single
    Dim nul As Boolean, exist As Boolean
    Dim sql As String, osql As String
     
    colonnes = CurrentDb.QueryDefs("ZeroQuery").Fields.count
    Set oRst = CurrentDb.OpenRecordset("SELECT * FROM ZeroQuery")
    i = 0
    sql = ""
    osql = ""
    exist = False
     
    For Each qry In CurrentDb.QueryDefs
        If qry.Name = "TestQuery" Then
           exist = True
         End If
    Next
     
    If exist = True Then
        DoCmd.DeleteObject acQuery, "TestQuery"
    End If
     
     
    Do Until (i + 1 >= colonnes)
    sql = sql & oRst.Fields(i + 1).Name & " <> 0 AND "
    osql = osql & oRst.Fields(i + 1).Name & " = 0 AND "
    i = i + 1
    Loop
     
    sql = "SELECT * FROM ZeroQuery Where " & sql
    sql = Left(sql, Len(sql) - 4) & ";"
     
    osql = "SELECT * FROM ZeroQuery Where " & osql
    osql = Left(osql, Len(osql) - 4) & ";"
     
    DoCmd.DeleteObject acQuery, "FinalQuery"
     
    CurrentDb.CreateQueryDef "TestQuery", osql
     
    sql = "SELECT zeroquery.* FROM zeroquery WHERE zeroquery.tagtimestamp Not In (Select testquery.tagtimestamp From testquery);"
    CurrentDb.CreateQueryDef "FinalQuery", sql
     
    'Me.lst_resultat.RowSource = "select * from finalquery"
    strSql = sql
     
    'Me.lst_resultat.Requery
    'Me.RcdLines = Me.lst_resultat.ListCount

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour,

    Quel est le message d'erreur ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    bonjour,

    Je n ai pas de message d erreur malheureusement, c est le logiciel access qui ne repond plus. J ai l impression, lorsque j execute ma requete FinalQuery, que le probleme vient de l extreme lenteur de la lecture des record, c est a dire que je clique sur le bouton qui me renvoie au dernier enregistrement, je suis oblige de breake l operation tellement cela prend du temps, alors que le nombre de ligne est en fait inferieur a 1000...

    Je ne sais donc pas si le probleme vient du fait que ma requete n est pas optimale du tout, ou bien si l ordinateur que j utilise n est pas assez performant... enfin ce dernier cas de figure me parait improbable.

    Auriez vous une idee?

    merci a nouveau

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    C'est plutot une de tes boucles qui ne se termine pas. Essaye en mode pas à pas

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Je ne sais pas si mes boucles ont un probleme parce que lorsque je mets un break point apres mes boucles et un watch sur ma variable de texte SQL, j ai bien le resultat escompte.

    D ailleurs, meme quand je cree manuellement ma requete et que je l execute, ca plante tout pareil lorsque je tente d acceder au dernier record.

    C est aussi la premiere fois que j utilise la fonction NOT IN, peut etre que le probleme vient de la...


    Aurais tu une nouvelle idee?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 147
    Points : 172
    Points
    172
    Par défaut
    Bonjour,
    quel est l'interet de :
    Do Until (i + 1 >= colonnes)
    sql = sql & oRst.Fields(i + 1).Name & " <> 0 AND "
    osql = osql & oRst.Fields(i + 1).Name & " = 0 AND "
    i = i + 1
    Loop

    sql = "SELECT * FROM ZeroQuery Where " & sql
    sql = Left(sql, Len(sql) - 4) & ";"
    puisque sans utiliser ta variaible sql tu lui passe la valeur :
    sql = "SELECT zeroquery.* FROM zeroquery WHERE zeroquery.tagtimestamp Not In (Select testquery.tagtimestamp From testquery);"
    De ce fait tu pers les éléments de ta vairable sql
    En espérant t'avoir (un peu) aidé...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    merci de ta reponse

    en fait osql va definir le texte de ma requete dans laquelle je stocke les lignes que je ne veux pas. J utilise cette boucle parce que ce ne sont pas toujours les memes champs qui sont dans mes orst.fields.name

    En revanche effectivement, ma chaine sql ne sert a rien...

    Mais je me rends compte que le probleme ne vient pas de VB, car quand je cree une nouvelle requete en mettant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT zeroquery.*
    FROM zeroquery
    WHERE zeroquery.tagtimestamp Not In (Select testquery.tagtimestamp From testquery);
    et que je la lance, elle s ouvre et donne l impression de marcher, mais quand je veux la parcourir en entier, elle plante, sans message d erreur et access ne repond plus.

    merci a nouveau de votre aide

Discussions similaires

  1. [AC-2010] Plantage Access Code VBA
    Par Lologolas dans le forum VBA Access
    Réponses: 7
    Dernier message: 13/12/2011, 09h10
  2. Plantage bizarre de mon application:
    Par lisco dans le forum MFC
    Réponses: 1
    Dernier message: 18/11/2010, 16h37
  3. [AC-2010] Plantages fréquents partie VBA
    Par Depite dans le forum Access
    Réponses: 1
    Dernier message: 30/06/2010, 18h55
  4. Plantage d'Access vba!?!?
    Par bdpatrice dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/04/2008, 13h43
  5. [Visual Studio]Plantage bizarre
    Par zooffy dans le forum ASP
    Réponses: 5
    Dernier message: 19/07/2006, 18h03

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