INSERT INTO con function

di eddy1973 il
11 risposte
Buonasera, vorrei sottoporre la seguente function:
Private Function asp_olio(ID_Analisi As Integer, contr As Controls) As Boolean
Dim db As DAO.Database
Dim strsql As String, Min As String, Max As String
Set db = CurrentDb

If DCount("*", "Q_Limiti", "ID_Analisi_Campione_Lim=" & ID_Analisi & " AND Tipo_Campione='" & tcamp & "'") = 1 Then
    Min = DLookup("[Min]", "Q_Limiti", "[ID_Analisi_Campione_Lim]=" & ID_Analisi & " And [Tipo_Campione] = '" & tcamp & "'")
    Max = DLookup("[Max]", "Q_Limiti", "[ID_Analisi_Campione_Lim]=" & ID_Analisi & " And [Tipo_Campione] = '" & tcamp & "'")
End If
If DCount("*", "Q_Limiti", "ID_Analisi_Campione_Lim=" & ID_Analisi & " AND Tipo_Campione='" & tcamp & "'") = 0 Then
    Min = "n.d."
    Max = "n.d."
End If
strsql = "INSERT INTO Valore_Analisi (ID_Analisi_Campione,ID_Assegnazione,Valore_Analisi,Min,Max)" & _
" values(ID_Analisi," & N_ID & ",'" & contr & "','" & Min & "','" & Max & "')"
db.Execute strsql
DoCmd.SetWarnings False
End Function
c'è un errore ma non riesco a trovarlo.

11 Risposte

  • Nella funzione stai passando un controllo (contr As Controls) che impieghi nei valori da inserire, probabilmente volevi intendere il riferimento al dato da aggiungere.
  • Esatto.Quel control può essere sia una textbox che una combobox. Forse è li l'errore?
  • Il setwarnings non serve usando Execute, metodo dell'oggetto Database, ma messo li dove lo hai messo non servirebbe in ogni caso a nulla.

    Innanzitutto a te non serve passare un oggetto, ma il suo valore quindi l'uso di quel parametro è tecnicamente errato.
    Sarà poi vero che Min/Max sono campi Testo...?
    Dichiaranil parametro come Type relativo al dato, mi pare tu lo tratti come Testuale quindi stringa... anche se il Nome del campo all'assessore stregua di Min/Max mi suona più Numerico.
  • Min e Max non sono numerici. Nello specifico, a seconda del caso, possono essere sia numerici che stringa e pertanto li dichiaro sempre come stringa e li converto in numerici dove serve.
  • Interessante scelta quella dei numeri non numeri... spero non sia per visualizzare del testo in caso di valori particolari... sarebbe bizzarro condizionare un campo per gestire solo una visualizzazione.
    Rimane il campo associato al control... che non capiamo se sia testo o numerico...
  • Si è proprio come hai detto tu. Il campo associato al control è testo.
  • Hai stampato il predicato SQL in finestra immediata prima di eseguirlo con Debug.Print...?
    Se non lo hai fatto meglio farlo magari ti accorgi dell'errore eventualmente postalo.

    P.s. ricorda che campi Numerici si trattano come numerici ed eventualmente si gestisce la visualizzazione di un testo solo ai fini di Visualizzazione e/o Stampa usando i campi calcolati nelle query.
  • P.s. ma [ID_Analisi] come primo campo da dove pensi possa essere valorizzato...? Per me da nessuno... scritto così è interpretato come testo ID_Analisi
  • La function potrebbe essere eseguita come:
    asp_olio 45, me.cbo_aspetto
    col debug.print ottengo:
    INSERT INTO Valore_Analisi (ID_Analisi_Campione,ID_Assegnazione,Valore_Analisi,Min,Max) values(ID_Analisi,20,'Limpido, omogeneo e privo di particelle in sospensione','n.d.','n.d.')
    non legge il valore integer.
  • Trovato l'errore: nella stringa sql andava scritto " & ID_Analisi & " anziché ID_Analisi.
  • Era proprio quello....
Devi accedere o registrarti per scrivere nel forum
11 risposte