Access 2010 : requête qui ignore des données

Résolu/Fermé
Phoenellion Messages postés 116 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 30 août 2012 - Modifié par Phoenellion le 13/02/2012 à 06:12
Phoenellion Messages postés 116 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 30 août 2012 - 20 févr. 2012 à 21:46
Bonjour,

je passe par access pour regrouper deux tables (détail et facture) de manière à compléter la table détails avec les informations contenues dans la table facture quand elles existent.

voici donc le code de ma requête :
"SELECT " & Store & "_detail.*, " & Store & "_facture.TYPFACT, " & Store & "_facture.DATFACT INTO " & Store & "_DetFact " & _  
    "FROM " & Store & "_detail INNER JOIN " & Store & "_facture ON " & Store & "_detail.NUMFACT = " & Store & "_facture.NUMFACT;"


Malheureusement, Access me zappe une quantité incroyable de données.
La table facture contient les dates de facturation, et s'étend d'une période de janvier 2009 à aujourd'hui.
Pour une raison que j'ignore, parfois, la requête fonctionne, et parfois, je me retrouve avec seulement une partie des informations, et je m'en rendse vite compte quand dans le résultat de la requête je me retrouve avec toute une année manquante.

Access serait-il limité dans la taille des tables pour éxécuter ses requêtes ?

J'ai trouvé une boucle en pure VB pour contourner la requête mais c'est bien plus long donc j'aimerais bien trouver une solution à ce bug de requête.

@+
Phoe
A voir également:

3 réponses

Phoenellion Messages postés 116 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 30 août 2012 32
13 févr. 2012 à 07:31
Petit détail qui vient de m'apparaître :

déjà voici le code complet utilisé pour ma requête :
Sub Compil_DetFact()
Chemin_Gestock = "C:\Users\NHBC\Documents\Travaux Gestion Stocks\Compilations tables\AcImport\"

For Compteur = 1 To 10
    Store = Choose(Compteur, "DC", "BD", "SDN", "DT", "KD", "SDN-II", "MB", "MD", "PBT", "PD")
    Chemin_DBF = "D:\DATA\XLPM2\" & Store & "\"

    'Import Detail et Facture dans Access
    DoCmd.TransferSpreadsheet acImport, , "Detail", Chemin_Gestock & "Detail " & Store & ".xlsx", 1
    DoCmd.TransferSpreadsheet acImport, , "Facture", Chemin_Gestock & "Facture " & Store & ".xlsx", 1
    
    ' Déclaration Clé Primaire Facture
    Prime_Key = "CREATE UNIQUE INDEX MyIndex ON Facture (NUMFACT) With Primary"
    DoCmd.RunSQL Prime_Key

    ' Envoi Requête pour DetFact
    My_Querry = "SELECT Detail.NART, Detail.QTE, Facture.TYPFACT, Facture.DATFACT INTO DetFact " & _
    "FROM Detail INNER JOIN Facture ON Detail.NUMFACT = Facture.NUMFACT;"
    DoCmd.RunSQL My_Querry
    
    ' Extraction DetFact vers Excel
    DoCmd.TransferSpreadsheet acExport, , "DetFact", Chemin_Gestock & "Base DetFact " & Store & ".xlsx", 1

    ' Supression des tables
    DoCmd.RunSQL "drop table Detail"
    DoCmd.RunSQL "drop table Facture"
    DoCmd.RunSQL "drop table DetFact"
    
Next Compteur
End Sub


dans la table détail, il y a en fait le détail de toutes les ventes enregistrée. j'ai donc plusieurs fois le même numéro de facture qui apparait, je me suis laissé dire que c'est peu être la cause de mon malheure, même si je ne vois pas comment.
0
Phoenellion Messages postés 116 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 30 août 2012 32
Modifié par Phoenellion le 14/02/2012 à 23:56
Re,

J'ai beau retourner le problème dans tous les sens, toujours pas d'améliorations.

Etant persuadé que je me plante dans mes requêtes, j'ai creusé un peu le domaine donc j'ai quelque peu modifié le programme comme suit :

Sub Compil_DetFact()  
Set xlApp = CreateObject("Excel.Application")  
xlApp.ScreenUpdating = False  
Chemin_Gestock = "C:\Users\NHBC\Documents\Travaux Gestion Stocks\Compilations tables\AcImport\"  

For Compteur = 1 To 10  
    Store = Choose(Compteur, "DC", "BD", "SDN", "DT", "KD", "SDN-II", "MB", "MD", "PBT", "PD")  
    Chemin_DBF = "D:\DATA\XLPM2\" & Store & "\"  
    If Store = "BD" Then  
        Tier = 9000  
    Else: Tier = 9900  
    End If  
      
    xlApp.Workbooks.Open FileName:=Chemin_DBF & "detail.dbf"  
    xlApp.ActiveWorkbook.SaveAs FileName:=Chemin_Gestock & "Detail " & Store & ".xlsx"  
    xlApp.ActiveWorkbook.Close  
      
    xlApp.Workbooks.Open FileName:=Chemin_DBF & "facture.dbf"  
    xlApp.ActiveWorkbook.SaveAs FileName:=Chemin_Gestock & "Facture " & Store & ".xlsx"  
    xlApp.ActiveWorkbook.Close  
      
    'Import Detail et Facture dans Access  
    DoCmd.TransferSpreadsheet acImport, , "Detail", Chemin_Gestock & "Detail " & Store & ".xlsx", 1  
    DoCmd.TransferSpreadsheet acImport, , "Facture", Chemin_Gestock & "Facture " & Store & ".xlsx", 1  
      
    ' Requêtes de préparation pour Detail  
    My_Querry = "SELECT detail.NUMFACT, detail.NART, detail.QTE INTO Prépa_Détail " & _  
    "FROM Detail;"  
    DoCmd.RunSQL My_Querry  

    ' Requêtes de préparation pour Facture  
    My_Querry = "SELECT facture.NUMFACT, facture.TYPFACT, facture.DATFACT INTO Prépa_Facture " & _  
    "FROM facture " & _  
    "WHERE (((facture.TYPFACT)=""A"" Or (facture.TYPFACT)=""F"") AND ((facture.TIERS)<=9900)) " & _  
    "ORDER BY facture.NUMFACT;"  
    DoCmd.RunSQL My_Querry  
      
    ' Déclaration Clé Primaire Facture  
    Prime_Key = "CREATE UNIQUE INDEX MyIndex ON Prépa_Facture (NUMFACT) With Primary"  
    DoCmd.RunSQL Prime_Key  
      
    ' Requêtes de consolidation pour DetFact  
    My_Querry = "SELECT detail.NART, detail.QTE, Prépa_Facture.TYPFACT, Prépa_Facture.DATFACT INTO Prépa_DetFact " & _  
    "FROM detail INNER JOIN Prépa_Facture ON detail.NUMFACT = Prépa_Facture.NUMFACT " & _  
    "ORDER BY detail.NART, Prépa_Facture.DATFACT DESC;"  
    DoCmd.RunSQL My_Querry  

    ' Extraction DetFact vers Excel  
    DoCmd.TransferSpreadsheet acExport, , "Prépa_DetFact", Chemin_Gestock & "Base DetFact " & Store & ".xlsx", 1  

    ' Supression fichiers et des tables temporaires  
    Kill Chemin_Gestock & "Detail " & Store & ".xlsx"  
    Kill Chemin_Gestock & "Facture " & Store & ".xlsx"  
    DoCmd.RunSQL "drop table Detail"  
    DoCmd.RunSQL "drop table Facture"  
    DoCmd.RunSQL "drop table Prépa_Détail"  
    DoCmd.RunSQL "drop table Prépa_Facture"  
    DoCmd.RunSQL "drop table Prépa_DetFact"  
      
Next Compteur  
End Sub


je me rends compte maintenant qu'à l'importation, la colonne de date (DATFACT) est considérée comme du texte, alors que dans le fichiers excel source, c'est bien une colonne date.
C'est peut être la base du problème ?
De plus, j'aimerais conserver les lignes de la table détail qui n'ont pas de correspondance avec la table facture.

Je retourne bucher en attendant qu'un cerveau plus fécond que le mien ne passe par là.

@+
Phoe
0
Phoenellion Messages postés 116 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 30 août 2012 32
20 févr. 2012 à 21:46
Re bonjour,

je repasse par là juste pour signaler que le code roule parfaitement, après mille et unes vérifications, j'ai fini par douter de la BDD elle même et il s'est avéré qu'elle était corrompue.

Affaire classée !

@+ phoe
0