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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    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 Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    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 éclairé 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
    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 Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    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

+ 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