[Résolu][Base]Copier une vue dans autre base

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Base]Copier une vue dans autre base

Messagepar plonge » 14 Mars 2014 19:46

Bonsoir à tous,
N'ayant pas trouver de solution pour pouvoir compléter la macro que j'utilise, je fais appel à vous.
J'utilise depuis un certain temps sans problème une copie de table (ici source.odb dans le rép S2) pour basculer les enregistrements dans une autre table (ici source.odb dans le répertoire S1). Lorsque les deux base n'avaient que des tables, tout marché, mais je suis obligé de rajouter une vue, et la macro ne fonctionne plus.
Ma question: comment est il possible de copier également la vue qui est maintenant indispensable à mon application.
Merci de votre aide par avance
Pièces jointes
S1.zip
(22.45 Kio) Téléchargé 74 fois
Dernière édition par plonge le 18 Mars 2014 08:22, édité 2 fois.
LO version 6073 et 6262 sous windows 10 standard, java 1.8.0_221
plonge
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 270
Inscrit le : 09 Sep 2010 20:06

Re: [Base]Copier les tables et vues dans autre base

Messagepar Dude » 17 Mars 2014 15:10

Salut,

plonge a écrit:Ma question: comment est il possible de copier également la vue

Donc, pourquoi parles-tu de "table" ? :roll:
Modifie ton titre pour qu'il reflète ce problème : [Base] Copier une vue dans un autre ODB

Tu n'as qu'à exécuter une requête "CREATE VIEW" tout simplement.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20939
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Base]Copier une vue dans autre base

Messagepar plonge » 17 Mars 2014 17:06

Bonsoir Dude,
Oui bien sûr, mais cela veux dire que je vais demander à des personnes qui ne savent pas utiliser base d'aller créer leur propre vue. La macro dans le zip ci-dessus sert à: permettre lorsque je donne une nouvelle version de mon application de transférer toutes les tables d'une version x à une version x+1 ceci étant "transparent" pour l'utilisateur lambda, donc je tiens à rester dans cette optique pour la vue. Copier la vue par comme les tables.
LO version 6073 et 6262 sous windows 10 standard, java 1.8.0_221
plonge
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 270
Inscrit le : 09 Sep 2010 20:06

Re: [Base]Copier une vue dans autre base

Messagepar Dude » 17 Mars 2014 17:29

plonge a écrit:Oui bien sûr, mais cela veux dire que je vais demander à des personnes qui ne savent pas utiliser base d'aller créer leur propre vue.

Qui te parle de ça ?
Tu exécutes par macro ta requête tout simplement.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20939
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Base]Copier une vue dans autre base

Messagepar plonge » 17 Mars 2014 17:47

OK, j'ai mal interprété ta réponse, effectivement il suffit de supprimer la vue dans la version X avant la copie des tables pour éviter l'erreur, copier les tables et recréer la vue dans la version x+1 par la macro.
Est-on d'accord?
LO version 6073 et 6262 sous windows 10 standard, java 1.8.0_221
plonge
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 270
Inscrit le : 09 Sep 2010 20:06

Re: [Base]Copier une vue dans autre base

Messagepar plonge » 18 Mars 2014 08:21

Bonjour Dude,
Ca j'avais bien compris. Pour simplifier tout, avant distribution de mon appli je vais supprimer la vue, les tables seront copier comme d'habitude à l'utilisation de la nouvelle version et la vue sera recréé à la suite.
Je clos ce fil.
Cordialement
LO version 6073 et 6262 sous windows 10 standard, java 1.8.0_221
plonge
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 270
Inscrit le : 09 Sep 2010 20:06

Re: [Résolu][Base]Copier une vue dans autre base

Messagepar Piaf » 18 Mars 2014 13:00

Bonjour
Un peu tard comme d'habitude :lol:
A tester
Code : Tout sélectionner   AgrandirRéduire
Sub copierTables( URLsource, URLcible )
On Error GoTo fermerConn
Dim oDC as Object, oCTW as Object
Dim oConnSource as Object, oConnCible as Object
Dim oSource as Object, contenuSource as Object, contenuSourceV as Object
Dim oCible as Object, contenuCible as Object, ContenuCibleV as Object
Dim sTable as String, strSQL as String, creervue as String
Dim marequete as Object

   oDC = createUnoService("com.sun.star.sdb.DatabaseContext")

   oSource = createUnoService("com.sun.star.sdb.DataAccessDescriptorFactory").createDataAccessDescriptor
   oConnSource = oDC.getByName(URLsource).getConnection("","")
   oSource.activeConnection = oConnSource
   oSource.commandType = com.sun.star.sdb.CommandType.TABLE
   contenuSource = oConnSource.tables
   contenuSourceV = oConnSource.views
   oCible = createUnoService("com.sun.star.sdb.DataAccessDescriptorFactory").createDataAccessDescriptor
   oConnCible = oDC.getByName(URLcible).getConnection("","")
   oCible.activeConnection = oConnCible
   ContenuCible = oConnCible.Tables
   ContenuCibleV = oConnCible.Views
   oCible.databaseLocation = URLcible
   For Each sTable In contenuSourceV.elementNames
      If ContenuCibleV.hasByName(sTable) Then
         If msgbox("Une vue """ & sTable & """ existe déjà dans le document cible." & chr(10) & _
                 "Souhaitez-vous la supprimer ?", 4+48, "Avertissement") = 6 Then
            contenuCibleV.dropByName(sTable)
         Else GoTo signet1
         End If
      End If   
   signet1:
   Next
   oConnCible.Parent.Databasedocument.store
   For Each sTable In contenuSource.elementNames
      If contenuSourceV.hasByName(sTable)Then
          strSQL =  contenusourcev.getByName(sTable).Command
         creervue =   "CREATE VIEW  """ & sTable & """ AS " & strSql
         marequete = oConnCible.createStatement()
         maRequete.executeQuery(creervue)
         goto signet
      ElseIf ContenuCible.hasByName(sTable) Then
         If msgbox("Une table """ & sTable & """ existe déjà dans le document cible." & chr(10) & _
                 "Souhaitez-vous la supprimer ?", 4+48, "Avertissement") = 6 Then
            contenuCible.dropByName(sTable)
         Else GoTo signet
         End If
      End If   
   oSource.command = sTable
   oCTW = com.sun.star.sdb.application.CopyTableWizard.create(oSource,oCible)
   oCTW.operation = com.sun.star.sdb.application.CopyTableOperation.CopyDefinitionAndData
   oCTW.setTitle("COPIE DES TABLES")
   oCTW.destinationTableName = sTable
   oCTW.useHeaderLineAsColumnNames = true
   oCTW.execute()
   signet:
   Next
   msgbox("Opération terminée. ")
   oConnSource.close()
   oConnCible.close()
   on error goto 0
   Exit Sub
   
fermerConn:
msgbox error,,"Erreur " & err
if not isNull(oConnSource) then oConnSource.close()
if not isNull(oConnCible) then oConnCible.close()
End Sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Résolu][Base]Copier une vue dans autre base

Messagepar plonge » 18 Mars 2014 19:18

Bonsoir Piaf,
Un grand merci à toi, ton complément de macro répond bien à mon premier souhait. :super:
Cordialement

... Je confirme, après test ton complément à la macro fonctionne bien.
Encore merci Piaf
LO version 6073 et 6262 sous windows 10 standard, java 1.8.0_221
plonge
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 270
Inscrit le : 09 Sep 2010 20:06

Re: [Résolu][Base]Copier une vue dans autre base

Messagepar Bour EmileMarie » 24 Mars 2014 18:53

plonge a écrit:Bonsoir à tous,
N'ayant pas trouver de solution pour pouvoir compléter la macro que j'utilise, je fais appel à vous.
J'utilise depuis un certain temps sans problème une copie de table (ici source.odb dans le rép S2) pour basculer les enregistrements dans une autre table (ici source.odb dans le répertoire S1). Lorsque les deux base n'avaient que des tables, tout marché, mais je suis obligé de rajouter une vue, et la macro ne fonctionne plus.
Ma question: comment est il possible de copier également la vue qui est maintenant indispensable à mon application.
Merci de votre aide par avance

:roll: Bonsoir ,
J'étais contente de trouver ta réponse mais malheureusement ton formulaire n'est pas accessible en modification alors j'ai peur de faire des sottises puisque je ne sais pas ce qu'il appelle.
peux-tu refaire une autre version accessible. merci d'avance
OpenOffice 4.0.1 sous Windows 8
Bour EmileMarie
Membre lOOyal
Membre lOOyal
 
Message(s) : 35
Inscrit le : 17 Fév 2014 20:28

Re: [Résolu][Base]Copier une vue dans autre base

Messagepar Piaf » 24 Mars 2014 19:34

Bonsoir
Ne poste pas dans le fil d'un autre qui en plus est marqué [Résolu].
Poste dans ton fil en faisant référence à ce fil au besoin et en expliquant précisément ce que tu veux obtenir avec un fichier permettant de te répondre (mêmes structures, sans données confidentielle), plutôt que devoir en fabriquer un qui ne correspondrait pas.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Résolu][Base]Copier une vue dans autre base

Messagepar Oukcha » 24 Mars 2014 21:06

Bonjour,

Nous nous devons de verrouiller ce fil de discussion. Nous vous rappelons les règles de ce forum et notamment la n° 7
Un sujet = le problème d'une seule personne

Comme vous avez pu le lire, ce sujet est désormais résolu. Si vous avez également ce problème, c'est que ce dernier est différent. Votre configuration n'est peut être pas la même que celle de l'auteur de ce fil.

Dans ce cas et pour des raisons de lisibilité sur ce forum, nous vous demandons de créer une nouvelle question en rappelant que vous avez le même problème que dans ce fil.

Merci de votre participation.
                                        
:arrow: A lire avant tout ! Image
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
 
Message(s) : 3087
Inscrit le : 06 Oct 2008 09:03


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 4 invité(s)