Exporter le résultat d'une requête vers un fichier access

Résolu
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010 - 2 nov. 2004 à 16:22
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 8 nov. 2004 à 20:12
Bonjour à tous ,

Voilà mon problème, j'effectue une requête SQL sur une BD et je souhaiterai exporter le résultat de la requête (environ 1000 lignes) dans une nouvelle base de données (1 seule table avec 4 champs)

Merci d'avance pour votre aide très précieuse !


Jujunio

11 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 nov. 2004 à 21:28
Salut, avec sql c simple, un tit exemple en DAO mais en ADO on peut faire la même chose :

Set db = OpenDatabase("c:\temp\bd1.mdb")
db.Execute "SELECT * INTO table2 IN 'c:\temp\bd2.mdb' From table1"

"c:\temp\bd1.mdb" c'est ta base de départ
table2 c le nom de la table que tu veux créer dans la base d'arrivée.
'c:\temp\bd2.mdb' c'est la base d'arrivée
table1 c'est la table dans la base d'origine

le * ça peut être : champ1, champ2, ....

et, à la place de table1, ça pourrait être table1, table2, ...

En fait, pour être plus clair, tu construis ta requête et tu insères INTO TaTableDeReception IN 'TaBaseDeRecption'entre le select * et le from.

Si je ne suis pas assez clair, n'hésite pas, demande des précisions.

Cordialement, CanisLupus
3
alias666 Messages postés 308 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 23 mars 2010
2 nov. 2004 à 16:41
Ca marche pas si tu fais:
- tu lances ta nouvelle base tu fais "fichier/données externes/importer"
- tu sélectionnes ta requête et ensuite importer.

_______________________
4L!@$ >>>>
0
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010
2 nov. 2004 à 17:22
Je préfère que ça soit automatique dans une fonction VB. Tu n'as pas une idée ??

Jujunio
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
2 nov. 2004 à 21:08
Bhà ce que tu peux faire c'est un truc de ce genre

[code]
open "toto.txt" for output as #1 'ouverture du fichier
do until rs.eof 'Boucle jusqu'à la fin du recordset
print #1, rs.fields("LLLLLL") 'Inscription des infos contenue dans la colonne LLLLLL
loop
close #1 'Fermeture du fichier

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010
3 nov. 2004 à 09:18
Salut CanisLupus

Merci pour ton aide.
Je t'ai très bien compris, je vais faire l'essai et je te tiens au courant

Merci
Jujunio
0
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010
4 nov. 2004 à 10:31
Salut, j'ai fais l'essai mais j'ai deux erreurs au moment de la requête :

1°)La méthode Refresh échoue mais le résultat est bien récupéré dans la nouvelle table

2°)Quand je fais la requête à nouveau, un message m'indique que la table existe déjà !

3°)Si je change le nom de ma table de récéption, un message m'indique que "Cette opération n'est pas autorisé si l'objet est fermé mais la table est quand même récupérée !

Alors je suis un peu perdu !!!

Voila ma requête :
-----------------------
Adodc2.RecordSource = "SELECT Cli.Cli, Cli.Int_Loc, tie.tel, tie.gsm INTO maTable2 In 'c:\temp\bd2.mdb' From Tie inner join Cli on tie.tie=cli.tie WHERE Tie.Tie=Cli.Tie And Tie.Gsm Is Not Null And Cli.Ste='T'"

Call Adodc2.Refresh

-----------------------

Jujunio
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
4 nov. 2004 à 20:22
Ok, je ne savais pas que tu utilisais un DataControl. Personnellement je n'en utilise pas. Sinon pour tes 3 points :

1°) Cette requete ne remonte rien ni dans un recordset ni dans un datacontrol, donc refresh ne fonctionne pas. La requete que je t'ai donné ne travaille que dans la base, comme "delete from ..." par exemple.

2°) Une requete select .... into ... crée une table donc si cette table existe, il y a erreur. Dans ce cas, il faut détruire la table de réception avant. Voilà ce que j'utilise en DAO :

Dim db As Database
Dim tbl As TableDef

' Ouverture de la base de réception
Set db = OpenDatabase("c:\temp\bd2.mdb")
' Recherche de la table de réception
For Each tbl In db.TableDefs
' si elle existe, on la détruit
If LCase(tbl.Name) = "table2" Then
db.TableDefs.Delete tbl.Name
Exit For
End If
Next

' ouverture de la base de départ
Set db = OpenDatabase("c:\temp\bd1.mdb")
' exécution de la requete de transfert
db.Execute "SELECT * INTO table2 IN 'c:\temp\bd2.mdb' From table1"


3°) Si tu supprimes la table avant, tu n'auras plus ce message.

Maintenant, est-ce que tout ça peut être utilisé avec un DataControl ? je ne sais pas. Faut tester.

J'espère que j'ai pu t'être utile.

Bonne prog.

Cordialement, CanisLupus
0
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010
5 nov. 2004 à 11:42
Salut finalement j'ai utilisé le modèle objet ADODB.

Dim cnn As New ADODB.Connection

    ' Connexion à la base de donnée
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Mes Documents\MyDataBase.mdb"

    ' Suppression de la table "Table1"
    cnn.Execute "DROP TABLE Table1"

    cnn.Close
    Set cnn = Nothing



Puis j'ouvre ma base de départ et j'effectue ma requête ! Là ça fonctionne très bien.

ps : comment je peux tester si la table existe ounon dans la base ?

Merci.

Jujunio
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
5 nov. 2004 à 15:25
En ADO, j'ai testé ça :

'Référence : Microsoft ADO Ext. 2.8 for DDL and Security
Dim cnx As New ADODB.Connection
Dim mycat As New ADOX.Catalog
Dim tbl As New ADOX.Table

cnx.Provider = "Microsoft.Jet.Oledb.4.0"
cnx.ConnectionString = "C:\temp\bd1.mdb"
cnx.Open

mycat.ActiveConnection = cnx

' Recherche si la table existe
For Each tbl In mycat.Tables
If LCase(tbl.Name) = "table1" Then
mycat.Tables.Delete "table1"
Exit For
End If
Next

Bonne prog

Cordialement, CanisLupus
0
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010
8 nov. 2004 à 12:14
Salut CanisLupus et merci pour ton aide,

J'ai encore un soucis : avec une base access, ça fonctionne bien mais avec une base oracle ça plante.

base source (ORACLE) et base de destination (ACCESS)

J'ai une erreur dans la requete : "mot-clé absent"

Voici cette requête :

str3 = "SELECT * INTO maTable IN '" & base_dest & "' From Tie 


"maTable" se trouve dans la base base_dest (access)
la table "TIE" se trouve dans la base ORACLE

Je ne sais pas si la syntaxe reste la même quand on travaille sur une base ORACLE.

Jujunio
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
8 nov. 2004 à 20:12
Là, tu me colles.
En principe, le SQL de base fonctionne avec tous les types de bdd qui l'acceptent mais est ce qu'on peut utiliser le "SELECT ... INTO ..." avec des bases différentes ? Je ne sais pas, jamais testé.
Je ne peux pas te répondre ce soir. Au boulot, on a les 2 types de bdd (access et oracle), on fait des requêtes sur l'une OU sur l'autre mais pas sur les 2 en même temps. Faudra que je teste mais je ne te promet rien. Repose tout de même cette question sur le forum, peut-être quelqu'un a la solution ?

Cordialement, CanisLupus
0
Rejoignez-nous