archimede ha scritto:dovresti poter aggiungere e togliere campi a tuo piacimento senza toccare il codice. Le uniche limitazioni sono:
1) Il nome del controllo sulla maschera dev'essere uguale al nome del corrispondente campo sulla tabella
2) Il controllo dev'essere una casella di testo (quindi niente radio buttons, menu a tendina, ecc. -- altrimenti bisogna mettere mano al codice)
Oltre a queste raccomandazioni e alle parti nel tuo codice che ho segnato in rosso, quali righe vanno modificate per rendere il tuo pulsante utilizzabile in qualsiasi database?
Private Sub Comando41_Click()
On Error GoTo Err_Comando41_Click
Dim stDocName As String, strSQL As String, myWhere As String
Dim ctl As Control, fieldType As Long
strSQL = "select * from libri" suppongo sia il nome della tabella, come più sotto myWhere = ""
For Each ctl In Me.Controls
If (ctl.ControlType = 109) Then
fieldType = CurrentDb().TableDefs("libri").Fields(ctl.Name).Properties("Type")
If (fieldType = 10 Or fieldType = 12) Then ' Testo
If (Nz(ctl.Value) > " ") Then
If (myWhere = "") Then
myWhere = " where [" & ctl.Name & "] like '*" & ctl.Value & "*'"
Else
myWhere = myWhere & " AND [" & ctl.Name & "] like '*" & ctl.Value & "*'"
End If
End If
ElseIf (fieldType = 8) Then ' Data
If (Nz(ctl.Value) > " ") Then
If (myWhere = "") Then
myWhere = " where [" & ctl.Name & "]=#" & ctl.Value & "#"
Else
myWhere = myWhere & " AND [" & ctl.Name & "]=#" & ctl.Value & "#"
End If
End If
ElseIf (fieldType = 4 Or fieldType = 3) Then ' Numerico
If (Nz(ctl.Value) > 0) Then
If (myWhere = "") Then
myWhere = " where [" & ctl.Name & "]=" & ctl.Value
Else
myWhere = myWhere & " AND [" & ctl.Name & "]=" & ctl.Value
End If
End If
End If
End If
Next ctl
strSQL = strSQL & myWhere
stDocName = "Libri" questo invece è il nome del report?
DoCmd.OpenReport stDocName, acPreview, strSQL
Exit_Comando41_Click:
Exit Sub
Err_Comando41_Click:
MsgBox Err.Description
Resume Exit_Comando41_Click
End Sub