49 messaggi dal 15 marzo 2006
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 -
1.509 messaggi dal 27 dicembre 2005
in access mi sa che invece del % si usa *.
49 messaggi dal 15 marzo 2006
Fa la stessa identica cosa, non funziona neanche quello...
49 messaggi dal 15 marzo 2006
Trovato!

Per l'assegnazione dei parametri nella query, va uysato LIKE anzichè =

WHERE TblInt.Intmov=2 AND TblClf.ClfKey LIKE @ClfKey AND TblCol.ColKey LIKE @ColKey AND TblInt.IntEse LIKE @IntEse

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.