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 ?
    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.
      1. bonjour

        Au début de ton code tu utilise un recordset fais de meme a la place du docmd.runsql
        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)...
          1. Dlookup est très long à executer surtout si on doit l'utiliser sur 3000 enregistrement
          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 & "'")
          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
          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...
        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 ?