[RISOLTO] Risultato di una funzione come argomento di una nuova funzione

di il
7 risposte

[RISOLTO] Risultato di una funzione come argomento di una nuova funzione

Ciao,
premetto che sto trovando molti suggerimenti utili e riscontri positivi su questo forum e ringrazio tutti per la cortesia e disponibilità ho un piccolo quesito che vorrei capire.

Ho sviluppato una funzione che restituisce una stringa come risultato finale.

Funzione1 restituisce variabile1 che genera filtri per una query di una form.

All'interno dello stesso form ho un pulsante che lancia un report e vorrei passargli lo stesso filtro generato dalla funzione1 ma senza dover riscrivere tutta la funzione

Qual è la sintassi per fare in modo che Funzione2 (quella del pulsante che apre il report) possa usare la stesso risultato di Funzione1 ?
Grazie ancora
P.S.
è possibile ringraziare gli utenti che forniscono riposte ? non ho trovato il pulsante di menzione o di ringraziamento, so che in altri forum esiste questa possibilità

7 Risposte

  • Re: [RISOLTO] Risultato di una funzione come argomento di una nuova funzione

    Salve,
    la domanda posta in questi termini mi fa sorgere qualche dubbio perciò ti faccio qualche domanda.

    dici:
    Ho sviluppato una funzione che restituisce una stringa come risultato finale.
    Funzione1 restituisce variabile1 che genera filtri per una query di una form.
    All'interno dello stesso form ho un pulsante che lancia un report e vorrei passargli lo stesso filtro generato dalla funzione1
    Si tratta di una funzione o di una condizione where ?

    quindi una risposta secca alla tua domanda mi farebbe rispondere : si una funzione può essere richiamata sia all'interno della stessa form, se dichiarata "Private Function" e persino in ogni form se inserita in un modulo e dichiarata "Public Function " ma come poni la domanda mi fa intuire che questa non solo non è una funzione e men che meno pubblica.

    Potremmo risolvere l'arcano se ci presenti il codice che hai scritto in quel pulsante.
    Saluti
  • Re: [RISOLTO] Risultato di una funzione come argomento di una nuova funzione

    Ciao,
    al momento non ho il codice sottomano ma stasera da casa potrò postarlo
    In breve la mia funzione è una private che in base a filtri di menù a tendina genera un filtro per un form

    Quindi ha una variabile chiamata "sqlcmd"

    la mia funzione compone la sqlcmd in base a vari select case , o IIF o altri filtri chiamati e impostati (ce ne sono davvero tanti)
    alla fine ottego qualcosa tel tipo:

    sqlcmd = " data_transazione is null and numero_dcumento >20 and citta_compratore = "Perugia"

    La funzione finisce con l'applicazione del filtro alla form interessata

    Form_Documenti_messi.Form.Filter = sqlcmd

    Tutto bene

    Il mio problema è quando voglio stampare un report basato su questo filtro
    il pulsante PRINT vorrei che chiamasse come filtro lo stesso risultato senza dover copiare e incollare la funzione nella private sub del tasto.

    Quindi vorrei che riutilizzasse il risultato della prima funzione impostando come filtro la mia variabile sqlcmd

    spero di aver spiegato chiaramente
    Grazie
  • Re: [RISOLTO] Risultato di una funzione come argomento di una nuova funzione

    Se usi OPENTEPORT... passa Me.Filter alla WHERE condition... se non passi per OpenReport... è un problema da affrontare diversamente.
  • Re: [RISOLTO] Risultato di una funzione come argomento di una nuova funzione

    Ciao eccomi di nuovo
    La faccio breve

    la mia funzione public è:

    Public Function calcSqlCmd()
    Dim sqlcmd As String
    Dim Skonst As String
    Skonst = " and"
    sqlcmd = ""
    sqlcmd = "ins_registro_affari = -1 and ID_tipo_mandato <>4 and"

    poi seguono una serie di select e condizioni che non credo servano ma per semplificare ne metto solo uno

    Select Case CmbPrintAcquisti.Value
    Case 0
    sqlcmd = sqlcmd
    Case 1
    sqlcmd = sqlcmd & " stampa_reg_affari = -1" & Skonst
    Case 2
    sqlcmd = sqlcmd & " stampa_reg_affari = 0" & Skonst
    End Select

    etc etc etc

    alla fine

    ' TAGLIO FINALE PER SKONST

    If Len(sqlcmd) > 0 Then
    sqlcmd = Left(sqlcmd, Len(sqlcmd) - Len(Skonst))
    Else
    sqlcmd = ""
    End If

    subfrm_registri.Form.Filter = sqlcmd
    subfrm_registri.Form.FilterOn = True
    End Function


    ok fin qui la funzione che genera il mio filtro per la maschera con la quale gestisco i miei record

    volendo aprire un report basato su questo filtro come faccio a passare il valore della variabile sqlcmd come filtro del report ?

    stavo tentando questa strada

    Private Sub cmdPrintRAcquisto_Click()
    stDocName = "rpt_RAcquisto"
    DoCmd.OpenReport stDocName, acPreview, , COME FACCIO A METTERE QUI IL FILTRO GENERATO DALL'ALTRA FUNZIONE ?
    Exit_cmdPrintRAcquisto_Click:
    Exit Sub

    Err_cmdPrintRAcquisto_Click:
    MsgBox Err.Description
    Resume Exit_cmdPrintRAcquisto_Click

    End Sub


    Grazie
  • Re: [RISOLTO] Risultato di una funzione come argomento di una nuova funzione

    Ma la funzione che hai postato non fa quello che dicevi inizialmente... anzi la funzione che usi è inutile come funzione basterebbe una SUB...
    Se tu avessi usato una Functuon in modo corretto questa avrebbe dovuto restituire la stringa... cosa che non fai...
    Oltretutto una Function o Sub come dovrebbe essere questa non deve avere riferimenti ad oggetti nella form altrimenti tolto lo scopo..., parlo di queste:
    
    subfrm_registri.Form.Filter = sqlcmd
    subfrm_registri.Form.FilterOn = True
    
    A resri dovuto scrivere una funzione che restituiva il valore assegnando ad una variabile e poi usare la variabile da passare al parametro WHERE CONDITION di OpenReport.
    
    Function Nomefunction() as string
    .... tutti i tuoi codici di costruzione
    Nomefunctuon=stringa SQL
    End Function 
    
    Nel click
    Dim sSQL AS Sring
    sSQL= Nomefunction()
    If len(sSQL)>0 Then
        subfrm_registri.Form.Filter = sqlcmd
        subfrm_registri.Form.FilterOn = True
    End if
    DoCmd.OpenReport stDocName, acPreview, , sSQL
    ....
    
    Devi acquisire più basi tecniche per manipolare il codice... quello chenhai scritto non va proprio bene.
  • Re: [RISOLTO] Risultato di una funzione come argomento di una nuova funzione

    Ciao,
    ho corretto le funzioni come mi hai giustamente quindi:

    Function calcSqlCmd() As String
    Dim sqlcmd As String
    Dim Skonst As String
    Skonst = " and"
    sqlcmd = ""
    sqlcmd = "ins_registro_affari = -1 and ID_tipo_mandato <>4 and"

    ' CONTROLLI PER PRODOTTI ACQUISTATI

    '[1] verifico se il prodotto è stato stampato nel registro affari = registro acquisti
    Select Case CmbPrintAcquisti.Value
    Case 0
    sqlcmd = sqlcmd
    Case 1
    sqlcmd = sqlcmd & " stampa_reg_affari = -1" & Skonst
    Case 2
    sqlcmd = sqlcmd & " stampa_reg_affari = 0" & Skonst
    End Select

    VARI FILTRI AGGIUNTIVI

    ' TAGLIO FINALE PER SKONST

    If Len(sqlcmd) > 0 Then
    sqlcmd = Left(sqlcmd, Len(sqlcmd) - Len(Skonst))
    Else
    sqlcmd = ""
    End If

    End Function

    poi la funzione che deve stampare il report diventa?

    Private Sub cmdPrintRAcquisto_Click()
    Dim sqlcmd As String
    sqlcmd = calcSqlCmd()
    stDocName = "rpt_RAcquisto"
    DoCmd.OpenReport stDocName, acPreview, , sqlcmd

    ma non credo sia corretto perchè non funziona, anche senza impostare alcu filtro dovrebbe comunque passare la condizioni iniziale
    sqlcmd = "ins_registro_affari = -1 and ID_tipo_mandato <>4 and"

    P.S. lo so... sono un principiante e ringrazio comunque per la disponibilitià
  • Re: [RISOLTO] Risultato di una funzione come argomento di una nuova funzione

    RETTIFICO
    GRAZIE!!! HO RISOLTO E FUNZONA
    mi ero scordato la dichiarazione finale:
    nomefunction = stringa sql
Devi accedere o registrarti per scrivere nel forum
7 risposte