Requêtes SQL multiples sous Access

Résolu/Fermé
SilverM-A Messages postés 82 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 10 avril 2011 - 30 juin 2009 à 16:22
SilverM-A Messages postés 82 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 10 avril 2011 - 6 juil. 2009 à 17:47
Bonjour,

je me demandais s'il était possible de faire plusieurs requêtes SQL d'un seul coup ?

J'aimerais faire plusieurs requêtes d'insertion sans avoir à les faire une à une. Est-ce possible de faire une concaténation et d'exécuter la string par la suite ? Si oui, les requêtes doivent-elles être séparées par une virgule ? Quelle est la syntaxe.

Je vous précise que je fais tout via du code VBA.

Merci :)

2 réponses

SilverM-A Messages postés 82 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 10 avril 2011 76
6 juil. 2009 à 17:47
Voici le bout de code qui m'a permis de contourner le problème.
            'split string sql
            tabSplit = Split(stringSQL, ";")
            For cmpt = LBound(tabSplit) To UBound(tabSplit)
                CurrentDb().Execute tabSplit(cmpt)
            Next cmpt

La fonction Split permet de séparer une chaine de caractère avec le délimiteur passé en paramètre. Il met chaque string résultante dans un tableau de base 0. Il existe plusieurs autres paramètres optionnels à la fonction Split, comme par exemple, le nombre de string résultante et bien d'autre.
1
SilverM-A Messages postés 82 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 10 avril 2011 76
30 juin 2009 à 19:42
Pour ceux que ça peut aider, je vous montre mon code.

Option Compare Database

Private Sub Command1_Click()
    
    Dim sql As String
    Dim sqlDeux As String
    Dim rst As DAO.Recordset
    Dim col As DAO.Recordset
    Dim sqlString As String
       
    'Numéro d'importation
    Dim No_Importation As Integer
    No_Importation = 2
    
    'date et heure table temporaire
    sql = "SELECT [Date], [Time] FROM [Log96 - tronc];"
    Set rst = CurrentDb.OpenRecordset(sql)
         
    With rst
        'traverse les records
        Do While Not .EOF
            
            
            'numéro de colonne
            sqlDeux = "SELECT [Numero_colonne] FROM [Importations_Mesures]" & _
                           " WHERE [Importation] = " & No_Importation & ";"
            Set col = CurrentDb.OpenRecordset(sqlDeux)

            With col
                'traverse les colonnes
                Do While Not .EOF
                
                    'traitement

                    '[...]
                        
                    'next record
                    .MoveNext   'col
                    
                    'sql string concact
                    sqlString = sqlString & "INSERT INTO [Donnees] ([Date], [Heure])" & _
                        " VALUES (#" & Format(vardate, "Short Date") & "#," & _
                        " #" & Format(vartime, "Long Time") & "#);"

                Loop  'while not .eof
                .Close   'col
            End With
        
            'next record
            .MoveNext   'rst
            
            'Commit sql string
            CurrentDb().Execute sqlString
                        
        Loop  'while not .eof
        .Close   'rst
   
    End With

End Sub


Alors voilà, j'ai simplifié pour ne mettre que l'essentiel. Le fait est que j'aimerais ne pas avoir à faire de requête d'insertion chaque fois que je passe dans ma boucle, mais à la fin complètement. Cette façon me donne une erreur sur la ligne
CurrentDb().Execute sqlString
L'erreur dit: Characters found after end of SQL statement.

J'ai tenté la même chose avec la ligne
DoCmd.RunSQL sqlString
Le résultat est le même!

Donc cela me pousse a croire qu'il est impossible de faire ce que je désire. Y a-t-il un autre moyen de faire? voilà ma question.

J'accepte les réponses négatives! Je veux simplement savoir si c'est possible ou non.

Merci!
0