Exporter le résultat d'une requête vers un fichier access [Résolu]

Messages postés
37
Date d'inscription
lundi 24 mars 2003
Dernière intervention
22 septembre 2010
- - Dernière réponse : cs_CanisLupus
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
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
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Messages postés
308
Date d'inscription
mardi 1 juin 2004
Dernière intervention
23 mars 2010
0
Merci
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!@$ >>>>
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Dernière intervention
22 septembre 2010
0
Merci
Je préfère que ça soit automatique dans une fonction VB. Tu n'as pas une idée ??

Jujunio
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
8 janvier 2014
0
Merci
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]
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Dernière intervention
22 septembre 2010
0
Merci
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
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Dernière intervention
22 septembre 2010
0
Merci
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
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
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Dernière intervention
22 septembre 2010
0
Merci
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
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
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Dernière intervention
22 septembre 2010
0
Merci
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.