Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

usare in VBA codice scritto in una Query

277 views
Skip to first unread message

neil.rat...@gmail.com

unread,
Sep 4, 2013, 1:54:52 PM9/4/13
to
ACCESS 2000
Ho una query di un campo che mi restituisce una serie di record.
Ogni campo di questi record contiene del codice VBA
ad esempio in record può esserci:
1 "docmd.openreport ..."
2 "text1 = unvalorequalsiasi"
e cosi via

praticamente ogni record della query corrisponde a una riga di codice

al click di un pulsante in una form vorrei che il codice inserito nei record della query venisse eseguito

non so se è piu opportuno esportare i risultati dlela query in un file esterno e poi in qualche modo richiamare il file esterno contenente questo codice da vba per la sua esecuzione

o se da vba richiamare il contenuto della query record per record ed eseguire il relativo codice contenuto nel campo

ho cercato molto su internet ma non ho trovato nulla che funzionasse

se in vba eseguo una funzione del tipo
comando = dlookup("campo1", "query")

"comando" assume la stringa col codice
ma non so poi come fare ad eseguire ... "comando"

Alessandro Cara

unread,
Sep 4, 2013, 2:41:38 PM9/4/13
to
Il 04/09/2013 19.54, neil.rat...@gmail.com ha scritto:
> ACCESS 2000
> Ho una query di un campo che mi restituisce una serie di record.



> Ogni campo di questi record contiene del codice VBA
> ad esempio in record pu� esserci:
> 1 "docmd.openreport ..."
> 2 "text1 = unvalorequalsiasi"
> e cosi via
>
> praticamente ogni record della query corrisponde a una riga di codice
>
> al click di un pulsante in una form vorrei che il codice inserito nei record della query venisse eseguito
>
> non so se � piu opportuno esportare i risultati dlela query in un file esterno e poi in qualche modo richiamare il file esterno contenente questo codice da vba per la sua esecuzione
>
> o se da vba richiamare il contenuto della query record per record ed eseguire il relativo codice contenuto nel campo
>
> ho cercato molto su internet ma non ho trovato nulla che funzionasse
>
> se in vba eseguo una funzione del tipo
> comando = dlookup("campo1", "query")
>
> "comando" assume la stringa col codice
> ma non so poi come fare ad eseguire ... "comando"
>
eval

Questa e' una cosa da /pazzi/
ma........
"Ognuno ha il diritto di scegliere tempo e modo della sua distruzione"
(R.H. Heinlein)

--

ac (x=y-1) e non uso il KillFile.
La violenza e' l'ultimo rifugio degli incapaci (Salvor Hardin)

neil.rat...@gmail.com

unread,
Sep 5, 2013, 9:29:14 AM9/5/13
to
avevo già provato a usare la funziona Eval ma senza successo, probabilmente l'ho scritta male

qua il mio codice:

Dim codice As String
codice = DLookup("comando", "comandi_query")
Eval (codice)

________________________
a questo punto dovrebbe aprirmi il report, atteso che il risultato del lookup è appunto una stringa di codice, ovvero il campo "comando" della query "comandi_query", contiene:
docmd.openreport "report1", acpreview

E invece restituisce questo errore:
Errore di runtime 2434 - Errore di sintassi nell'espressione

Dove sbaglio?

Pablitomf

unread,
Sep 5, 2013, 10:30:15 AM9/5/13
to
neil.rat...@gmail.com <neil.rat...@gmail.com> ha scritto:
sbagli proprio sistema...

EVAL: È possibile utilizzare la funzione Eval per restituire
un'espressione risultante in una stringa di testo o in un valore numerico.

niente di piu' niente di meno...

credo che la questione non la sbrogli cosi' facilmente...

--
------------
Pablitomf
Napoli sempre nel "Q"uore!
"mammasantissima" si nasce, non si diventa.

TheSpaceCowboy :
Britos deve recuperare per arrivare in forma al prossimo
infortunio - 24/10/12

Alessandro Cara

unread,
Sep 5, 2013, 10:37:40 AM9/5/13
to
Tanto per cominciare, DLookUp restituisce un variant /non/ una stringa
ed, immagino, l'eventuale risultato sia un valore unico e non un
recordset (almeno nella tua testa) ma per come hai descritto la cosa su
tabella/query "comandi_query" dovrebbe esserci piu' di un record. Dov'e'
la, sempre eventuale, condizione di estrazione?
E tra l'altro non aprirebbe comunque il report ma si limiterebbe a
mettere nella variabile codice "docmd.openreport "report1", acpreview"
che "e'" il risultato della funzione chiamata. Tale risultato dovrebbe
essere poi eseguito, eventualmente, da un'altra eval


Ripeto, quello che stai tentando di fare ti potrebbe avviare presto
verso qualche struttura psichiatrica. Fatto come lo hai pensato e' una
/vera follia/

Pablitomf

unread,
Sep 5, 2013, 10:32:15 AM9/5/13
to
Alessandro Cara <alessan...@ay-1anetwork.it> ha scritto:
follia? diciamo che follia e' ancora uno status relativamente "sensato" ed
"accettabile" in questo caso... ma io credo che vada molto ma molto piu' in
la' ;)

Pablitomf

unread,
Sep 5, 2013, 10:33:46 AM9/5/13
to

> follia? diciamo che follia e' ancora uno status relativamente "sensato" ed
> "accettabile" in questo caso... ma io credo che vada molto ma molto
piu' in
> la' ;)

anche perche' va a parsarli tutti gli apici/virgolette eventuali e a dire al
sistema di funzionare bene... praticamente una assurdita'.

Pablitomf

unread,
Sep 5, 2013, 10:35:12 AM9/5/13
to
Pablitomf <pabl...@hotmail.it> ha scritto:

>
> > follia? diciamo che follia e' ancora uno status relativamente "sensato" ed
> > "accettabile" in questo caso... ma io credo che vada molto ma molto
> piu' in
> > la' ;)
>
> anche perche' va a parsarli tutti gli apici/virgolette eventuali e a dire al
> sistema di funzionare bene... praticamente una assurdita'.

inoltre, la questione MDE andrebbe a putt*** in un batter d'occhi (visto che il
codice sarebbe in tabella), e, cosa tutt'altro da sottovalutare, perdere i dati,
vorrebbe dire perdere le funzionalita' attribuite a destra e a manca...
ANATEMA!!!! :D

Alessandro Cara

unread,
Sep 5, 2013, 10:42:58 AM9/5/13
to
Il 05/09/2013 16.37, Alessandro Cara ha scritto:
> Il 05/09/2013 15.29, neil.rat...@gmail.com ha scritto:
>> avevo giŕ provato a usare la funziona Eval ma senza successo,
>> probabilmente l'ho scritta male
>>
>> qua il mio codice:
>>
>> Dim codice As String
>> codice = DLookup("comando", "comandi_query")
>> Eval (codice)
>>
>> ________________________
>> a questo punto dovrebbe aprirmi il report, atteso che il risultato del
>> lookup č appunto una stringa di codice, ovvero il campo "comando"
>> della query "comandi_query", contiene:
>> docmd.openreport "report1", acpreview
>>
>> E invece restituisce questo errore:
>> Errore di runtime 2434 - Errore di sintassi nell'espressione
>>
>> Dove sbaglio?
>>
>
> Tanto per cominciare, DLookUp restituisce un variant /non/ una stringa
> ed, immagino, l'eventuale risultato sia un valore unico e non un
> recordset (almeno nella tua testa) ma per come hai descritto la cosa su
> tabella/query "comandi_query" dovrebbe esserci piu' di un record. Dov'e'
> la, sempre eventuale, condizione di estrazione?
> E tra l'altro non aprirebbe comunque il report ma si limiterebbe a
> mettere nella variabile codice "docmd.openreport "report1", acpreview"
> che "e'" il risultato della funzione chiamata. Tale risultato dovrebbe
> essere poi eseguito, eventualmente, da un'altra eval
>
>
> Ripeto, quello che stai tentando di fare ti potrebbe avviare presto
> verso qualche struttura psichiatrica. Fatto come lo hai pensato e' una
> /vera follia/
>

P.S. Ho letto male, non usi "codice" come variabile di ritorno, e'
comunque valido quello che ho scritto, compresa la /vera follia/

Alessandro Cara

unread,
Sep 5, 2013, 10:48:44 AM9/5/13
to
Il 05/09/2013 16.35, Pablitomf ha scritto:
> Pablitomf <pabl...@hotmail.it> ha scritto:
>
>>
>>> follia? diciamo che follia e' ancora uno status relativamente "sensato" ed
>>> "accettabile" in questo caso... ma io credo che vada molto ma molto
>> piu' in
>>> la' ;)
>>
>> anche perche' va a parsarli tutti gli apici/virgolette eventuali e a dire al
>> sistema di funzionare bene... praticamente una assurdita'.
>
> inoltre, la questione MDE andrebbe a putt*** in un batter d'occhi (visto che il
> codice sarebbe in tabella), e, cosa tutt'altro da sottovalutare, perdere i dati,
> vorrebbe dire perdere le funzionalita' attribuite a destra e a manca...
> ANATEMA!!!! :D
>
>

A suo tempo un marchingegno di questo tipo lo ho fatto, ma non in questo
modo. Usavo delle funzioni pubbliche "wrapper" che , tra l'altro,
lanciavo con la "Run" e questo mi salvava anche la questione dell'MDE.

Pablitomf

unread,
Sep 5, 2013, 10:55:06 AM9/5/13
to
> A suo tempo un marchingegno di questo tipo lo ho fatto, ma non in questo
> modo. Usavo delle funzioni pubbliche "wrapper" che , tra l'altro,
> lanciavo con la "Run" e questo mi salvava anche la questione dell'MDE.

si ma poi i dati in tabella li devi trattare in altro modo... non piu' un
"docmd.openreport...."
imho non ne vale la pena...

Pablitomf

unread,
Sep 5, 2013, 11:11:24 AM9/5/13
to
Pablitomf <pabl...@hotmail.it> ha scritto:

> > A suo tempo un marchingegno di questo tipo lo ho fatto, ma non in questo
> > modo. Usavo delle funzioni pubbliche "wrapper" che , tra l'altro,
> > lanciavo con la "Run" e questo mi salvava anche la questione dell'MDE.
>
> si ma poi i dati in tabella li devi trattare in altro modo... non piu' un
> "docmd.openreport...."
> imho non ne vale la pena...

non ho capito, come facevi a salvare la questione mde?... se le funzioni
prendevano da tabella, per quanto pubbliche, crashati i dati, dell'mde non te ne
facevi cmq nulla no?

per quanto in tabella avevi
OPERAZIONE: ApriReport
NOME: TuoReport
FUNZIONE: TuaFunzione

e la tua funzione si basava su questi,
basta che in tabella avessi "TuoRPT" al posto di "TuoReport" che il
funzionamento del codice è bello che compromesso...

@Alex

unread,
Sep 5, 2013, 11:51:39 AM9/5/13
to
Devi tenere presente che le VIRGOLETTE deveno diventare parte integrante del codice, quindi vanno tutte raddoppiate...!

Suggerisco anche
Funzione CallByName

@Alex

Alessandro Cara

unread,
Sep 5, 2013, 12:04:26 PM9/5/13
to
Il 05/09/2013 17.11, Pablitomf ha scritto:
> Pablitomf <pabl...@hotmail.it> ha scritto:
>
>>> A suo tempo un marchingegno di questo tipo lo ho fatto, ma non in questo
>>> modo. Usavo delle funzioni pubbliche "wrapper" che , tra l'altro,
>>> lanciavo con la "Run" e questo mi salvava anche la questione dell'MDE.
>>
>> si ma poi i dati in tabella li devi trattare in altro modo... non piu' un
>> "docmd.openreport...."
>> imho non ne vale la pena...
>
> non ho capito, come facevi a salvare la questione mde?... se le funzioni
> prendevano da tabella, per quanto pubbliche, crashati i dati, dell'mde non te ne
> facevi cmq nulla no?

In tabella c'era solo il nome delle funzioni "wrapper" e un po' di
parametri dispersi in giro. Non mi ero certo sognato di mettere l'intera
logica sulla tabella.
E' chiaro che se qualcuno "manometteva" il /dizionario/ poteva creare
qualche problema ma a quel punto era semplicemente un /loro/ problema
(nel senso dei clienti/utenti). Facevano casino? Nessun problema, tu
paghi ed io metto a posto, piu' fai casino piu' paghi.
Classica situazione win-win ;-) (nel senso che /vincevo/ due volte,
tempo di sistemazione, 5 minuti in genere, tariffa piena)

Comunque tutta sta storia aveva un motivo /storico/ . Era una
applicazione clipper che avevo convertito e che avevo strutturato in
quel modo perche' c'erano parecchie installazioni e non c'era verso di
convincere gli utenti ad una applicazione standard.
Quando sono passato access, onde evitare di riscrivere l'intera logica,
ho mantenuto questa struttura che poi ho via via riportato a condizione
piu' /umana/ .
La applicazione iniziale (clipper) aveva praticamente una serie di
tabelle di sistema che poi, ovviamente, non sono piu' servite perche' il
servizio me lo forniva acccess. Altri tempi mica come adesso che "spigni
'n bottone" e fai una applicazione ;-)

>
> per quanto in tabella avevi
> OPERAZIONE: ApriReport
> NOME: TuoReport
> FUNZIONE: TuaFunzione
>
> e la tua funzione si basava su questi,
> basta che in tabella avessi "TuoRPT" al posto di "TuoReport" che il
> funzionamento del codice è bello che compromesso...
vedi sopra

Alessandro Cara

unread,
Sep 5, 2013, 12:06:29 PM9/5/13
to
Ciao Alex.
Ma c'e' in access?
In VB di sicuro, ma in access non me la ricordo.

neil.rat...@gmail.com

unread,
Sep 5, 2013, 12:36:00 PM9/5/13
to
dunque probabilmente sto sbagliando all'origine come affrontare il mio problema

Provo a spiegare cosa mi serve, magari riuscite a suggerirmi un metodo migliore.

Le mie pratiche si basano su una serie di casi diversi tra loro
Ogni caso ha un iter che segue varie fasi
Per ogni fase è prevista l'esecuzione di una serie di azioni

Data la diversità delle azioni di eseguire, distinte in base al caso e al punto della fase dell'iter in cui mi trovo per quel specifico caso ho creato le seguenti tabelle:
1) una tabella CASI: contiene il tipo di casi
2) una tabella FASI: contiene il tipo di fasi degli iter di tutti i casi
3) una tabella CASI_FASI: contiene l'associazione delle fasi dell'iter specifiche per ogni tipo di caso
4) una tabella azioni: contiene le azioni da eseguire... le "maledette" stringhe di codice contenute nella tabella che devo far eseguire in VBA
5) una tabella azioni_fasi: contiene l'associazione delle azioni alle fasi che devono essere eseguite.

una query mi restituisce una serie di record contenenti le stringhe delle azioni da eseguire, filtrata per caso e per stato attuale dell'iter del caso specifico.

ho pensato anche di esportare i risultati della query in un txt esterno
e in un qualche modo richiamare in VBA il txt esterno e leggerne il contenuto (che contiene le stringhe di codice da eseguire) da eseguire come codice

Probabilmente pazza anche questa come soluzione..

Se qualcuno ha un idea diversa su come gestire questa situazione ben vengano i suggerimenti! :)

@Alex

unread,
Sep 6, 2013, 6:09:23 AM9/6/13
to
Il giorno giovedì 5 settembre 2013 18:06:29 UTC+2, Alessandro Cara ha scritto:
> Il 05/09/2013 17.51, @Alex ha scritto:
>
> > Devi tenere presente che le VIRGOLETTE deveno diventare parte integrante del codice, quindi vanno tutte raddoppiate...!
>
> >
>
> > Suggerisco anche
>
> > Funzione CallByName
>
> >
>
> Ciao Alex.
>
> Ma c'e' in access?
>
> In VB di sicuro, ma in access non me la ricordo.

Nel mio c'è... ma sai che io l'ho pagato regolarmente... quelli tarocchi non so... ;-)

@Alex

Pablitomf

unread,
Sep 6, 2013, 10:29:02 AM9/6/13
to
@Alex <ik2...@libero.it> ha scritto:
ehmmmm... a proposito di... vogliamo parlare del Winsok? ;)
religioso silenzio e'!!!!! religiosissimo!!!! :D

@Alex

unread,
Sep 6, 2013, 11:01:57 AM9/6/13
to

>
> ehmmmm... a proposito di... vogliamo parlare del Winsok? ;)
>
> religioso silenzio e'!!!!! religiosissimo!!!! :D
>

WS solo chi installa VB lo può usare...
Non mi ricordo nemmeno più cosa sia.... di fatto con W7, ho provato a reinstallare VB6, e si può anche fare... ma non ne ho voglia di fare fatica...
quà in Sicilia fa caldo...

@ALex

Pablitomf

unread,
Sep 6, 2013, 11:13:50 AM9/6/13
to
> quà in Sicilia fa caldo...

So' so'... Salvix mi ha "upgradato" a riguardo... ;)

@Alex

unread,
Sep 7, 2013, 2:12:51 AM9/7/13
to
Caspita, non si può nascondere nulla... ;-)

Beh purtroppo oggi finisce la bellissima esperienza in terra sicula.

Peraltro, se mi legge mi insulta, non sono nemmeno riuscito ad andare a trovare CD... in 2 mesi di permanenza.

Vabbè..... ma l'ho minacciato che il prossimoa anno, visto che dovrei fare le ferie, lo catturo...

@Alex

CIDI

unread,
Sep 7, 2013, 5:58:35 AM9/7/13
to

"@Alex" <ik2...@libero.it> ha scritto nel messaggio
news:32d999aa-cc8b-4853...@googlegroups.com...
Caspita, non si pu� nascondere nulla... ;-)

Beh purtroppo oggi finisce la bellissima esperienza in terra sicula.

Peraltro, se mi legge mi insulta, non sono nemmeno riuscito ad andare a
trovare CD... in 2 mesi di permanenza.

per forza! lavoravi 18 ore al giorno!!

Vabb�..... ma l'ho minacciato che il prossimoa anno, visto che dovrei fare
le ferie, lo catturo...

seeeee.....campa cavallo che l'erba cresce

...e dire che avevo previsto un piano "B"...dividere la distanza...

vabb�, sono un inguaribile ottimista, voglio sperare ... :D
ciao Alex

Daniele


@Alex

unread,
Sep 7, 2013, 6:18:35 AM9/7/13
to
Eheheheh.... hai abboccato subito... ;-)

Ma tu proprio a 300Km da TP dovevi abitare....??????

Ragazzaccio, vedi che Salvino avendo deciso di abitare vicino a TP siamo riusciti a vederci...!!!

Scherzi a parte, l'idea delle ferie il prossimo anno ad oggi è abbastanza consolidata, devo trovare solo un modo economico per poi viaggiare il meno possibile perchè sai che altrimenti da Casa alla Sicilia a me serve una settimana di viaggio per l'andata ed una per il ritorno...... e questo è il solito problema...!!!!

Ne riparliamo in primavera, anche sperando si sistemino questioni lavorative per la sig.ra...

Ti saluata anche B in ogni caso, lei pensa che si è arrabbiata per molto meno... non le ho mai portato un cannolo a casa...(fosse stato inverno magari..)

Ciao
un salutone a casa.

Alex
0 new messages