Requete sql select vba

Bonjour,

Je souhaite faire une requête select comme ceci :

Dim TPTX As Recordset
Set data_base = CurrentDb
Set TPTX = data_base.OpenRecordset("T Pgm TX", dbOpenTable)
cTPTX = TPTX.RecordCount ' nombre d'enregistrement

az = TPTX![COMMUNES]

TPTX.MoveFirst

For a = 1 To cTPTX

sql = "SELECT [T Liste des communes].[code INSEE] FROM [T Liste des communes] WHERE [T Liste des communes].Commune =" & az & ""

Sauf que docmd ne fonctionne pas sur une requete sql select.

Je voudrais savoir comment récupéré le code INSEE qui en résulte.

Merci cordialement,

5 réponses

  1. Modérateur
    Salut,

    beaucoup de confusion dans ton code.

    Tu cherches à récupérer quoi, à partir de quoi, et pour en faire quoi ?
    0
    1. En faite c'est pour comparé des codes insee existant dans une table (T Pgm TX) qui a été importé d'un fichier excel à une base contenant les communes et leurs code insee qui sont exacte (T liste des communes). Comme je suis sur que l'orthographe des commune dans les 2 tables ont identique il me reste a comparer les code insee.

      sql = "SELECT [T Liste des communes].[code INSEE] FROM [T Liste des communes] WHERE [T Liste des communes].Commune =" & az & ""

      az étant le nom de commune de l'enregistrement en cour après j'ai plus qu'a comparé mais j'arrive pas à executer la requete sql.
      0
      1. bonjour

        Au début de ton code tu utilise un recordset fais de meme a la place du docmd.runsql
        0
        1. Modérateur
          Tu peux plutôt utiliser 'dlookup', regarde l'aide et tu verras que c'est la meilleure solution à problème (pas de requête, ni de recordset)...
          0
          1. Dlookup est très long à executer surtout si on doit l'utiliser sur 3000 enregistrement
            0
          2. Modérateur
            Justement, utiliser dlookup est plus rapide que de créer 3000 recordset pour les parcourir.
            Si le champ commune possède un index, l'accès à l'information sera immédiat.

            dlookup("[code INSEE]","[T Liste des communes]","commune = '" & az & "'")
            0
          3. J'ai aucun champ d'indexé .. Mais sa reste long car toutes mes table de base sont sur un serveur (on est 10 à l'utiliser) donc l'accès est long
            0
          4. Modérateur
            Ca sera toujours plus rapide que de faire du SQL, car access ne se comporte pas comme un vrai sgbd quand il est en réseau : il rapatrie toutes les données en local avant de faire son WHERE...
            0
        2. "Au début de ton code tu utilise un recordset fais de meme a la place du docmd.runsql"

          Comment sa utiliser un recorset ?
          0