Requête création de table avec une connexion ADODB

cs_DATA1 Messages postés 3 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 30 mai 2007 - 29 mai 2007 à 17:53
cs_DATA1 Messages postés 3 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 30 mai 2007 - 30 mai 2007 à 11:42
Bonjour,

Voilà mon problème : je souhaite créer une connexion (ADODB) entre Visual Basic 6 et 1 table Fox Pro pour exécuter 1 requête qui créera une nouvelle table Fox Pro. Ma requête à l'air de bien s'exécuter mais il n'y a pas de Nouvelle table de créée, je ne comprends pas pourquoi.

Voici mon code :

Dim ADODB_Connec As New ADODB.Connection
Dim ADODB_Command As New ADODB.Command
Dim ADODB_Record As New ADODB.Recordset
Dim Texte_SQL as string

ADODB_Connec.Open "Provider=vfpoledb;Data Source=" + "C:\tmp\Table_client.dbf"
ADODB_Connec.Execute "SET NULL OFF"
'Ci dessous ma requeteTexte_SQL "select * into table C:\tmp\Nouvelle_Table_client.dbf from " + "C:\tmp\Table_client.dbf" + " where civilite 'M'"
ADODB_Connec.Execute ( Texte_SQL )

ADODB_Connec.Close

Merci d'avance pour votre aide

6 réponses

cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
29 mai 2007 à 18:09
Salut,

Essaye cela :

"SELECT TaTable.* INTO " _
  & "NewTable FROM TaTableWHERE civilite = 'M'"
  


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
29 mai 2007 à 19:28
Salut,
Je comprend pas l'utilisation de l'instruction SQL Select si tu veux faire une création de table.

Il existe une instruction CREATE TABLE qui serait bien plus appropriée. J'en ai pas une valide sur moi, mais si tu n'as pas résolu ton pb deman, je te la donnerai.

Aussi, j'ai pu remarqué sur Access, que si je reste sur l'onglet des tables, je ne vois pas ma nouvelle table, il faut que je rafraichisse en me mettant dans un autre onglet (modules, macros ou formulaire etc ...) et que je reviennes dessus.

Bien sur cela n'est que visuel. La table est bien reconnu des sa creation par VB.

A+
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
29 mai 2007 à 19:46
Salut Nicko,

Tu as raison, mais je pense qu'il veut créer une table par rapport à une clause Where, donc copies de données vers une table qu'il va créer...

Regarde l'aide sur Select...Into :

Crée une requête de création de table.


Syntaxe


SELECT field1[, field2[, ...]] INTO newtable
 [IN externaldatabase]
FROM source


L'instruction SELECT...INTO comprend les éléments suivants :


Élément Description
field1, field2 Noms des champs à copier dans la nouvelle table.
newtable Nom de la table à créer. Ce nom doit respecter les conventions d'appellation standard. Si newtable est identique au nom d'une table existante, une erreur récupérable se produit.
externaldatabase Chemin d’accès d'une base de données externe. Pour obtenir une description du chemin, examinez la clause IN.
source Nom de la table dans laquelle les enregistrements sont sélectionnés. Il peut s'agir d'une ou de plusieurs tables, ou encore d'une requête.
Remarques


Vous pouvez utiliser les requêtes de création de tables pour archiver les enregistrements, faire des copies de sauvegarde des tables, ou pour faire des copies à exporter dans une autre base de données ou à utiliser pour produire des états concernant des données sur une période déterminée. Par exemple, vous pouvez produire un état Ventes Mensuelles par Région en exécutant la même requête de création de table chaque mois.


Notes


· Vous souhaiterez peut-être définir une clé primaire pour la nouvelle table. Lorsque vous créez la table, les champs de la nouvelle table héritent du type de données et de la taille de champ de chaque champ présent dans les tables sous-jacentes de la requête. Aucune autre propriété de champ ou de table n'est transférée.
· Pour ajouter des données à une table existante, utilisez l'instruction INSERT INTO au lieu de créer une requête Ajout.


· Pour savoir quels enregistrements seront sélectionnés avant d'exécuter la requête de création de table, lancez d'abord une requête Sélection avec les mêmes critères de sélection puis examinez les résultats obtenus.


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
cs_DATA1 Messages postés 3 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 10:56
Bonjour,

Merci de votre aide, mon problème est en parti résolu.
L’instruction "créate Table" marche bien , mais je n'ai aucune table de créée avec :
 "Select Champ1, Champ2
Into


table
Newtable from Table where Champ1 ='M'"
Le problème vient peut-être que je ne travail pas avec Accès. En effet, j'attaque 1 Table Visual Fox Pro qui est à la racine d'un répertoire. Cette table Visual Fox Pro n'est pas une base de données.
Pour faire tourner mon instruction Select je dois mettre "
Into


table
", il faut que je rajoute "Table" après le « Into » sinon il n'en veut pas. Cela vient peut-être d'une spécificité de Fox Pro.
Je ne comprends pas pourquoi l'intruction "Create Table" marche alors que le "Into Table" ne marche pas.
Si vous avez une idée
0

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

Posez votre question
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
30 mai 2007 à 11:12
Et c'est un pb de faut en 2 fois, createtable puis insert ?
0
cs_DATA1 Messages postés 3 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 11:42
Merci de ton aide Nicko,
Effectivement si je fais en 2 requêtes d'abord le "Create" puis "Insert" avec ma close "Where" sa marche<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"></v:shapetype>.

Si je ne trouve pas le moyen de créer une nouvelle table avec un "Select ... Into Table NewTable From ..." je ferai comme ci dessus. Mais cela ne m'arrange pas car je suis amené à travailler avec des Tables qui ont 100 ou 200 champs ! Et créer 1 nouvelle table identique avec autant de champ en dynamique ca ne va pas être simple.
Sinon saurais-tu pourquoi "Select ... Into Table NewTable From ..." ne marche pas ?<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
0