[ADO.Net][VB.Net] Comment faire requête dynamique Access ?
Bonjour,
Je cherche à effectuer une requête (genre LIKE) sur une base Access(2000), qui doit aboutir dans un Datagrid.
Je me suis inspiré de cette source pour établir le code
http://www.issociate.de/board/goto/7...arameters.html
Si je fais LIKE 'BLABLA%' j'obtiens les résultats dans mon Datagrid, donc '%' fonctionne bien. Dès que j'introduit '?%' les problèmes commencent... j'obtiens l'erreur suivante :
Code:
Une exception non gérée du type 'System.Data.OleDb.OleDbException' s'est produite dans system.data.dll
en pointant la ligne : da.Fill(Dataset11)
Voici mon code avec une des tentatives :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| Private Sub FrmTitre_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim iData As IDataObject = Clipboard.GetDataObject() ' récupération du texte depuis le Clipboard
If iData.GetDataPresent(DataFormats.Text) Then
Txtbox1.Text = CType(iData.GetData(DataFormats.Text), String)
Else
Txtbox1.Text = "Impossible de récupérer le texte"
End If
Dim conn As OleDbConnection
conn = OleDbConnection1
Dim da As OleDbDataAdapter = New OleDbDataAdapter
Dim cmd As OleDbCommand
cmd = New OleDbCommand("SELECT CodeDVD, TitreOrigine, TitreTraduit, Divers, Annee FROM Films " & _
"WHERE (CodeSupport=1) AND (TitreOrigine LIKE '%' + [at]name + '%') ORDER BY TitreOrigine", conn)
cmd.Parameters.Add("@CodeDVD", OleDbType.Integer, 8)
cmd.Parameters.Add("@TitreOrigine", OleDbType.VarChar, 100)
cmd.Parameters.Add("@TitreTraduit", OleDbType.VarChar, 100)
cmd.Parameters.Add("@TitreOrigine", OleDbType.VarChar, 100)
cmd.Parameters.Add("@Divers", OleDbType.VarChar, 100)
cmd.Parameters.Add("@Annee", OleDbType.Numeric, 8)
cmd.Parameters.Add(New OleDbParameter("[at]name", OleDbType.VarChar, 20)).Value = Txtbox1.Text
da.SelectCommand = cmd
DataSet11.Clear()
da.Fill(DataSet11, "Films")
End Sub |
Mon code est mauvais (c'est bien possible... :oops: ) ou ce que je demande de faire n'est pas possible avec Access ? Une autre manière de procéder peut-être ?
PS : Les champs faisant l'objet des requêtes ne sont pas des clés primaires.
Apès 3 semaines de recherches un peu d'aide ferait plaisir...
Merci d'avance.
Re: [VBnet] Requête dynamique sur Access
Je suppose que OleDbConnection1 a déjà été instancié avec la bonne chaine de connection
Essayes
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
Private query As String = "SELECT CodeDVD, TitreOrigine, " & _
"TitreTraduit, Divers, Annee FROM Films " & _
"WHERE (CodeSupport=1) AND " & _
"(TitreOrigine LIKE '%?%')" & _
" ORDER BY TitreOrigine"
Private Sub FrmTitre_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Dim iData As IDataObject = Clipboard.GetDataObject()
If iData.GetDataPresent(DataFormats.Text) Then
Me.Txtbox1.Text = CType(iData.GetData(DataFormats.Text), String)
Me.InitDataSet11(Me.Txtbox1.Text)
Me.DataGrid1.SetDataBinding(DataSet11, "Films")
Else : Me.Txtbox1.Text = "Impossible de récupérer le texte"
End If
End Sub
Private Sub InitDataSet11(ByVal name As String)
Dim da As OleDbDataAdapter
'Normalement le DataAdapter devrait ouvrir et fermer la connection
Try
da = New OleDbDataAdapter(Me.query.Replace("?", name), Me.OleDbConnection1)
Me.DataSet11.Clear()
da.Fill(Me.DataSet11, "Films")
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub |