IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Copie de tables, BDD access


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut Copie de tables, BDD access
    Bonjour,

    Alors je code sous visual studio 2012 en vb.net avec mdb Access.

    Sous mon Windows app j'ai un form qui me permet de créer une table dans une base de données. Jusque la aucun problème xD
    Le problème vient que j'essaie de créer dans une base y une table en copiant les champs d'une autre table se trouvant dans une base z.
    J'ai pu trouvé plein de méthodes foireuses sur internet, et la j'ai pensé à quelque chose. Est-ce possible (la solution ?) de remplir un DataTable avec ma table de référence et de copier ce DataTable dans ma nouvelle table ?

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je ne suis pas expert en datatable donc je ne répondrait pas sur la faisabilité de la version fénéante ^^

    mais sinon tu peux remplir un datatable avec la table d'une base puis faire un for each ligne insert into l'autre base via une autre connexion
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Désolé pour le titre pas évocateur, j'y veillerais pour la prochaine fois

    D'accord. Donc mon idée du DataTable était la bonne
    Merci je pars la dessus.

    ps : je ne met pas encore le sujet en résolu au cas où je ne réussis pas ^^ Dès que ça fonctionne je coche

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Bon, 1ère partie réussi : mon DataTable est bien rempli avec ma table comme je le voulais.
    Mais j'ai un problème ensuite dans mon for each. Il ne veut pas exécuter ma requête insert into, soit disant que mon DataTable n'est pas connecté :/
    Le message d'erreur étant : Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source 'Souche'. Assurez-vous qu'elle existe et qu'elle est correctement orthographiée.

    Je ne referme pas ma connexion à la base donc je vois pas le soucis. Mais je ne suis pas sur de mon for each en fait xD
    Voici le petit bout de code ou ça plantouille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim s As String
            conection.Open()                                  'Ouvrir la connexion
            For Each s In ObjetDataTable.Rows.ToString
                strSql = "INSERT INTO [" & TextBox_nametable.Text & "] SELECT * FROM " & ObjetDataTable.ToString                         
                MsgBox(strSql)
                cmd = New OleDb.OleDbCommand(strSql, conection)
                cmd.ExecuteNonQuery()
            Next
    Sachant que la connexion que j'ouvre ici c'est pour ma table dans laquelle je veux copier.

  5. #5
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Hello,

    Je vais peut être dire une bétise mais tu ne devrais pas plutôt faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = "INSERT INTO [" & TextBox_nametable.Text & "] SELECT * FROM " & s
    Je ne comprend pas trop pourquoi tu fais un "for each S in ObjetDataTable.Rows.ToString" et tu n'utilises pas le "S" après.

    Cordialement

    DeWaRs

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu dois bien voir que ton strsql ne correspond à rien de probant via ton msgbox

    il faudrait écrire explicitement les noms des colonnes et les valeurs qui vont avec
    le mieux serait alors de passer par des parameters
    pour qu'au final ca soit
    "insert into table (c1, c2, c3) values (?, ?, ?)"
    cmd.parameters.Addwithvalue("p1", dtRow(y).value(x)
    ca peut s'adapter en automatique avec quelques lignes de code en plus

    sinon il reste la possibilité de faire une table liée dans access, ca permet d'avoir une table utilisable, mais qui est située dans une autre base de données

    il n'y aurait alors que peu de code, juste
    "insert into t (colonnes, ...) select * from tableliee"
    et au passage ca serait plus performant

    après si tu peux faire une liaison à la main pas de soucis, si tu dois créer la liaison par code je ne sais pas comment on fait, peut etre qu'il y a une requete pour faire ca (en spécifiant le chemin de l'autre mdb et le nom de la table)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    @DeWaRs : Oui en effet xD Mon problème quand je pars à faire quelque chose j'en oublis d'autre. C'est parce qu'on est beaucoup dans me tête ^^

    @Pol63 : En fait j'ai juste besoin des colonnes, pas des valeurs.
    Je vais m'intéresser aux tables liées (je l'ai pas encore fait :o), peut être que ça va m'aider. Mais la liaison de tables pour ça il faut que je lie ma base de destination à ma table source nan ? j'ai peut être pas compris x)

    Merci en tout cas de m'aider

  8. #8
    Invité
    Invité(e)
    Par défaut
    C'est toujours possible e trouver une solution en bidouillant mais pourquoi ne pas passer tout simplement par un ETL (Extract-Transform-Load) type SSIS ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Pourquoi ? Parce que je ne connais pas ^^
    Mais je viens de regarder, ça concerne les base SQL Server uniquement non ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Je vais essayer de mieux réexpliquer mon problème.

    J'ai une base de données Access (mdb) sur mon serveur avec une table Souche dedans.
    Je veux que sur n'importe quel pc et sur n'importe quelle autre base de données, lorsque je créé une table, la "syntaxe" (à savoir les champs) de ma base Souche, se recopie sur ma table que je suis en train de créer.

    Je sais pas si c'était bien expliqué jusque la xD
    Merci de vos éclaircissements

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    non, il faut être très précis

    Citation Envoyé par Thyyb Voir le message
    lorsque je créé une table,
    n'importe quelle table ?
    une table souche ?

    Citation Envoyé par Thyyb Voir le message
    la "syntaxe" (à savoir les champs)
    rien à voir avec une syntaxe
    une table contient des colonnes, qui ont entre autres un type et un nom

    Citation Envoyé par Thyyb Voir le message
    de ma base Souche
    tu viens de dire que souche était une table, et maintenant c'est une base ?
    ou alors souche est un mot mal choisit comme exemple ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Ma table Souche est déjà créée et elle ne bougera surement pas. Je veux juste m'en servir pour faire des copies.
    Donc quand je créé une table, une nouvelle table qui ne sera pas une table souche, j'aimerais recopier ma table Souche dans la nouvelle mais sans les enregistrements. Tout ça juste pour récupérer les nom et les types des champs.

    J'ai mit "syntaxe" et non syntaxe parce que je sais que ça n'est pas une syntaxe mais c'est le mot qui m'est venu à l'idée.

    Quand j'ai dit base Souche, je me suis trompé, c'est bien ma table Souche.

    En fait j'aimerais faire quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO @newtable SELECT * FROM Souche WHERE 1=2"

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    sur la classe oledbconnection il y a un truc genre getschema qui permet d'avoir la liste des tables de la base
    si on fait select * from unetable il est possible de faire .getschematable sur le oledbreader pour avoir la liste des colonnes et leurs types

    avec tout ca tu peux te construire un moteur qui créé des tables (CREATE TABLE ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Ok, je vais fouiné un peu par la et voir si je peux m'en sortir. Merci

    Au fait, rien à voir mais bon, Visual Studio Express n'est pas gratuit normalement ? Parce que la il me demande une clé :o

  15. #15
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si, et normalement il ne demande pas de clé
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Merci pol63, avec le getschematable j'ai trouvé mon bonheur

    Par contre ouais je dois avoir un problème dans le visual studio que j'ai dl. Il ne me reste plus que quelques jours, j'aurais jamais fini mon soft xD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Obtenir champ d'une table BDD Access
    Par hari37 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/07/2007, 14h22
  2. Import des tables d'une BDD access vers une autre table
    Par Darki dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/07/2007, 15h06
  3. Manipulation d'objet MS-Access (Copie de table, états, form)
    Par Mustard007 dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/02/2006, 21h37
  4. Copie de tables access vers Sql ?
    Par franck06 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 01/03/2005, 14h10
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo