PDA

Visualizza versione completa : Eliminare querydef da codice?


Fast-M
12-11-2004, 15.33.08
Salve, ho creato una query tramite querydef nel codice dietro una maschera e va tutto bene. L'unico problema č che quando chiudo la maschera e la riapro mi da errore dicendo che la query č gią esistete!
Effettivamente ho capito che creare una querydef nel codice ha lo stesso effetto che crearla manualmente in access, ma come faccio poi ad eliminarla quando chiudo la maschera??
:(

LoryOne
12-11-2004, 16.14.31
E' una cosa estremamente semplice.
Poichč una querydef trae origine dall'omonima classe, a te basta richiamare il metodo associato a quella classe per ottenenre il risultato sperato.

Premi F2 all'interno dell' IDE di VBA. :)
Vb non l'hai mai utilizzato ?

Fast-M
12-11-2004, 17.21.03
Eh ma io avevo provato a farlo, ma nella lista di scelte non mi compare niente che faccia pensare ad una eliminazione.
L'unica proprietą che mi ha fatto pensare č Close, ma non credo che la rimuova proprio dal db o sbaglio?
Ho solo provato ad eliminarla usando l'insieme QueryDefs che ha la proprietą Delete(QueryDefs.Delete(MiaQuery)), ma non sono riuscito a farlo funzionare.
:|

LoryOne
12-11-2004, 20.02.41
Lo so č abbastanza incasinato, soprattutto per chi si trova a doverci lavorare senza aver fatto un po di pratica e spesso e volentieri ACCESS spinge il malcapitato a piantar chiodi nei muri a testate :D.

In effetti la classe QueryDef centra ma devi ragionare sulla classificazione gerarchica delle classi.
Come avrai sicuramente notato, oltre alla classe QueryDef c'č anche la classe QueryDefs.
Quest'ultima altro non č che una collezione di classi; nella fattispece di QueryDef.

QueryDefs, infatti, possiede le identiche proprietą e gli stessi metodi dell' oggetto Collections in VB, solo che questa volta č riferito all'insieme di QueryDef memorizzate all'interno di ACCESS.

La classe principale che in un certo senso ingloba le altre due č ACCESS stesso, ossia la classe Database.
Infatti, per creare una QueryDef hai dovuto utilizzare la funzione CreateQueryDef di Database.
Purtroppo non esiste la funzione DeleteQueryDef ma esiste una proprietą QueryDefs che fa riferimento alla Collection di QueryDef presenti in ACCESS, tant'č che tale prorietą č dichiarata come:

Property QueryDefs As QueryDefs

Detto questo, l'unica riga di codice che dovrai scrivere sarą:

Dim db As Database ' Sicuramente tu avrai definito la tua variabile in altro modo

Set db=CurrentDb()
db.QueryDefs.Delete "Nomequery"

Ci siamo ? :)