L'intérêt est d'illustrer comment :
- "remonter" depuis le formulaire jusqu'à la connexion
- manipuler des contrôles de formulaire
- manipuler les tables
- exécuter une requête
Le principe est de créer un formulaire comprenant :
- un formulaire nommé Standard
- un contrôle liste nommé ListeDesTables
- un bouton Actualiser auquel on associe la procédure PysActualiserListe
- un bouton Copier auquel on associe la procédure PysCopier
Le formulaire "menu" affiche la liste des tables. Sélectionner une table et cliquer sur Copier.
Nota : la nouvelle table prend le nom initial précédé de "Copie de".
Il va de soi que l'on pourrait améliorer en demandant le nom par exemple, mais bon, il me faudrait plus de temps, et puis ce n'est plus que de l'habillage
De même, la procédure de copie peut bien sûr être appelée autrement que depuis un formulaire...
Code : Tout sélectionner
option explicit
Sub PysActualiserListe(PysEvent)
dim PysConnection as object
PysConnection = PysEvent.Source.Model.Parent.ActiveConnection
with thiscomponent.DrawPage.Forms.getByName("Standard").getByName("ListeDesTables")
.StringItemList = PysConnection.Tables.ElementNames
.SelectedItems = array(0)
end with
End Sub
Sub PysCopier(PysEvent)
dim PysConnection as object, PysCols as object, PysCol as object, PysTables as object
dim PysTblDescriptor as object, PysColDescriptor as object
dim PysRequete as object, PysResultat
dim PysACopierNom as string, PysSQL as string
PysConnection = PysEvent.Source.Model.Parent.ActiveConnection
PysACopierNom = thiscomponent.DrawPage.Forms.getByName("Standard").getByName("ListeDesTables").CurrentValue
PysTables = PysConnection.Tables
if thiscomponent.DrawPage.Forms.getByName("Standard").getByName("ListeDesTables").currentvalue = "" then
msgbox "Sélectionner une table dans la liste"
else
if PysTables.hasByName("copie de " & PysACopierNom) then
msgbox "La table : " & "copie de " & PysACopierNom & chr(10) & "existe déjà", 32, "Copie de table"
else
PysTblDescriptor = PysTables.createDataDescriptor
PysTblDescriptor.Name = "copie de " & PysACopierNom
PysColDescriptor = PysTblDescriptor.columns.createDataDescriptor
PysCols = PysTables.getByName(PysACopierNom).columns
for each PysCol in PysCols
PysColDescriptor.Name = PysCol.Name
PysColDescriptor.Type = PysCol.Type
PysColDescriptor.Precision = PysCol.Precision
PysTblDescriptor.columns.appendByDescriptor(PysColDescriptor)
next PysCol
PysTables.appendByDescriptor(PysTblDescriptor)
PysSQL = "INSERT INTO ""copie de " & PysACopierNom & """ "&_
" ( SELECT """ & PysACopierNom & """.""*"" FROM """ & PysACopierNom & """)"
PysRequete = PysConnection.createStatement()
PysResultat = PysRequete.executeQuery(PysSQL)
with thiscomponent.DrawPage.Forms.getByName("Standard").getByName("ListeDesTables")
.StringItemList = PysConnection.Tables.ElementNames
.SelectedItems = array(ubound(.StringItemList))
end with
end if
end if
End SubBase exemple : http://user.services.openoffice.org/fr/ ... 030316.odb
