Hola a tutti!
Ho una pagina di ricerca, contenente un modulo in cui ci sono 3 menu a tendina, un pulsante di submit e 3 checkbox. I risultati vengono visualizzati in una datagrid.
Che cosa vorrei fare (anzi faccio, ma con un problema):
i 3 menu a tendina popolati da database sono le request form che passano i parametri alla query SQL del mio dataset, concatenati con l'operatore AND.
Solo che per vari motivi potrei voler usare insieme anche solo 2 di questi parametri, o anche 1 solo...ho così creato i 3 checkbox che se selezionati usano il valore del dropdown e lo passano alla query, altrimenti dovrebbero restituire "%".
Ecco come ho fatto:
Sub Popola_datagrid_filter(Src As Object, E As EventArgs)
Dim Connessione As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=percorsofisicosulserver\database.mdb")
'Connessione.Open()
Dim sql As String
Dim cmd As New OleDbDataAdapter("SELECT TblInt.IntKey, TblCol.ColNom, TblDep.DepCom, TblInt.IntDat, TblInt.IntEse, TblClf.ClfRso, TblInt.IntFat, TblArt.ArtDeb, TblIntArt.IntArtQta, TblArt_1.ArtDeb, TblIntArt.IntArtIni, TblIntArt.IntArtFin FROM TblDep INNER JOIN (TblClf INNER JOIN ((TblInt LEFT JOIN ((TblIntArt LEFT JOIN TblCol ON TblIntArt.ColKey = TblCol.ColKey) LEFT JOIN TblArt ON TblIntArt.ArtKey = TblArt.ArtKey) ON TblInt.IntKey = TblIntArt.IntKey) LEFT JOIN ((TblIntMac LEFT JOIN TblMac ON TblIntMac.MacKey = TblMac.MacKey) LEFT JOIN TblArt AS TblArt_1 ON TblMac.ArtKey = TblArt_1.ArtKey) ON TblIntArt.IntArtKey = TblIntMac.IntArtKey) ON TblClf.ClfKey = TblInt.ClfKey) ON TblDep.DepKey = TblInt.DepKey WHERE TblInt.Intmov=2 AND TblClf.ClfKey=@ClfKey AND TblCol.ColKey=@ColKey AND TblInt.IntEse=@IntEse ORDER BY TblInt.IntKey DESC", Connessione)
Dim dsInterventi As New System.Data.DataSet()
If (me.ckCliente.Checked) Then
cmd.SelectCommand.Parameters.Add ("@ClfKey", System.Data.SqlDbType.BigInt)
cmd.SelectCommand.Parameters("@ClfKey").Value = Request.Form("ClfKey")
Else
cmd.SelectCommand.Parameters.Add ("@ClfKey", System.Data.SqlDbType.BigInt)
cmd.SelectCommand.Parameters("@ClfKey").Value = "%"
End If
If (me.ckTecnico.Checked) Then
cmd.SelectCommand.Parameters.Add ("@ColKey", System.Data.SqlDbType.BigInt)
' cmd.SelectCommand.Parameters("@ColKey").Value = Request.Form("ColKey")
Else
cmd.SelectCommand.Parameters.Add ("@ColKey", System.Data.SqlDbType.BigInt)
cmd.SelectCommand.Parameters("@ColKey").Value = "%"
'End If
If (me.ckEse.Checked) Then
cmd.SelectCommand.Parameters.Add ("@IntEse", System.Data.SqlDbType.Char)
cmd.SelectCommand.Parameters("@IntEse").Value = Request.Form("IntEse")
Else
cmd.SelectCommand.Parameters.Add ("@IntEse", System.Data.SqlDbType.Char)
cmd.SelectCommand.Parameters("@IntEse").Value = "%"
End If
cmd.Fill(dsInterventi)
TblInt_datagrid.Datasource = dsInterventi
TblInt_datagrid.Databind()
End Sub
Qual è il problema?
Che il simbolo "%" non funziona assolutamente , per cui quando non ho un checkbox selezionato ottengo l'errore:
"System.Data.OleDb.OleDbException: Data type mismatch in criteria expression."
Se metto "like" invece di "=" non mi accetta l'operatore...
Dove sbaglio?
Grazie
Modificato da R1((ky il 13 aprile 2006 08.58 -