16. februar 2006 - 14:52Der er
5 kommentarer og 1 løsning
Søg i flere tabeller i Db - vises i datagrid
Jeg koder i VB og ASP.NET. Mit problem er ved min søgefunktion som ser således ud:
Dim ObjConn As OledbConnection Dim ObjRs As OledbDataReader Dim objComm As OledbCommand Dim DBSti, strConn, strSQL As String
' Opret forbindelse til databasen Sub Page_Load() smartnavigation="true" OpenDb() End Sub
Sub Page_UnLoad() CloseDB() End Sub
Sub OpenDB() ObjConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.Mappath("GemDB.MDB") & ";") ObjComm = New OleDbCommand(strSQL, objConn) ObjConn.Open() End Sub
Sub CloseDB() ObjConn.Close ObjConn = Nothing End Sub
Sub Soeg_Click(sender As Object, e As EventArgs) Dim strSQL As String Dim strSearch, strTabel As String
If Droptabel.SelectedItem.Value = "1" Then strTabel = "tabel1" End if
If Droptabel.SelectedItem.Value = "2" Then strTabel = "tabel2" End if
If Droptabel.SelectedItem.Value = "3" Then strTabel = "tabel3" End if
If Droptabel.SelectedItem.Value = "4" Then strTabel = "tabel4" End if
If Droptabel.SelectedItem.Value = "Alle" Then strTabel = "tabel1, tabel2, tabel3, tabel4" End if
OpenDB()
If Len(TxtOrdreNr.Text) > 0 Then strSearch = strSearch & " OrdreNr LIKE '%" & txtOrdrenr.Text & "%' AND" End If
If Len(TxtKunde.Text) > 0 Then strSearch = strSearch & " Kunde LIKE '%" & txtKunde.Text & "%' AND" End If
If Len(TxtForhandlerkode.Text) > 0 Then strSearch = strSearch & " Forhandlerkode LIKE '%" & txtForhandlerkode.Text & "%' AND" End If
If Len(TxtLevUge.Text) > 0 Then strSearch = strSearch & " Leveringsuge LIKE '%" & txtLevUge.Text & "%' AND" End If
If strSearch <> "" Then strSearch = Mid$(strSearch, 1, Len(strSearch) - 4)
strSQL = "SELECT * FROM " & strTabel & " WHERE " & strSearch & " order by Ordrenr Asc;"
Dim objDataSet as new DataSet() Dim objAdapter as new OledbDataAdapter(strSQL, objConn)
objAdapter.Fill(objDataSet, "strTabel")
Dim objDataView as new DataView(objDataSet.Tables("strTabel")) dgResultat.DataSource = objDataView dgResultat.DataBind()
End If
End Sub ------------------------------------------------ Men bliver ved med at få denne fejl når jeg skal søge i alle tabeller:
System.Data.OleDb.OleDbException: Der er defineret for mange felter.
Kildefejl:
Linje 93: Dim objAdapter as new OledbDataAdapter(strSQL, objConn) Linje 94: Linje 95: objAdapter.Fill(objDataSet, "strTabel") Linje 96: Linje 97: Dim objDataView as new DataView(objDataSet.Tables("strTabel")) -----------------------------------------------------
Kan det være fordi tabellerne ikke har lige mange kolonner, eller er der et max antal tabeller man kan søge på samtidig??
Et lille side spsm: Er det muligt at få data fra hver deres tabel læst op i et separate datagrid??
Du er nødt til at hente en tabel ad gangen når du bruger OleDb namespacet, så vidt jeg ved. ...og hvis du ikke har noget at bruge DataSettet til bagefter, så er det lidt overkill at bruge DataSet til at hente data ind, det er langsommere og tager flere ressourcer på serveren end DataReader klassen.
Det ser ud til at du har samme kolonner i alle fire tabeller er det korrekt?
I så fald kan du, efter at have lavet din SQLsøgestreng og tilføjet ekstra DataGrids på din side (f.eks. DataGrid1, DataGrid2, DataGrid3 og DataGrid4)
- gøre som følger.
ObjConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("gemDB.MDB") & ";") objComm = New OleDbCommand 'sæt command objektet til at anvende connection objektet objComm.Connection = ObjConn
'sæt dit Command objekt til at bruge SQL'en objComm.CommandText = sql1 'åben forbindelsen objConn.Open() 'Afvikl SQL sætningen DataGrid1.DataSource = objComm.ExecuteReader() 'hent data ind i DataGrid'et DataGrid1().DataBind() 'luk forbindelsen igen ObjConn.Close() 'åben forbindelsen
'sæt dit Command objekt til at bruge SQL'en objComm.CommandText = sql2 'åben forbindelsen ObjConn.Open() 'Afvikl SQL sætningen DataGrid2.DataSource = objComm.ExecuteReader() 'hent data ind i DataGrid'et DataGrid2().DataBind() 'luk forbindelsen igen ObjConn.Close() 'åben forbindelsen
Her har du så gemt SQL sætningerne i sql1, sql2, etc. hvor du bare udskifter tabellens navne.
Dim ObjConn As OledbConnection Dim ObjRs As OledbDataReader Dim objComm As OledbCommand
Sub Page_Load() smartnavigation="true" OpenDb() End Sub
Sub Page_UnLoad() CloseDB() End Sub
Sub OpenDB() ObjConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.Mappath("GemDb.MDB") & ";") ObjComm = New OleDbCommand(strSQL, objConn) ObjConn.Open() End Sub
Sub CloseDB() ObjConn.Close End Sub
Sub Soeg_Click(sender As Object, e As EventArgs) Dim strSearch, strTabel, strSQLTabel1, strSQLTabel2, strSQLTabel3, strSQLTabel4 As String Dim objDataSet as new DataSet() Dim objAdapter as new OledbDataAdapter(strSQL, objConn)
Select Case DropTabel.SelectedItem.Value Case "Ingen" LblFejlmeddelelse.Text = "Du skal vælge Tabel for at kunne søge"
Case "Tabel1" If Len(TxtOrdreNr.Text) > 0 Then strSearch = strSearch & " OrdreNr LIKE '%" & txtOrdrenr.Text & "%' AND" End If
If Len(TxtKunde.Text) > 0 Then strSearch = strSearch & " Kunde LIKE '%" & txtKunde.Text & "%' AND" End If
If Len(TxtForhandlerkode.Text) > 0 Then strSearch = strSearch & " Forhandlerkode LIKE '%" & txtForhandlerkode.Text & "%' AND" End If
If Len(TxtLevUge.Text) > 0 Then strSearch = strSearch & " Leveringsuge LIKE '%" & txtLevUge.Text & "%' AND" End If
If strSearch <> "" Then strSearch = Mid$(strSearch, 1, Len(strSearch) - 4)
strSQL = "SELECT * FROM Tabel1 WHERE " & strSearch & " order by Ordrenr Asc;"
If Len(TxtOrdreNr.Text) > 0 Then strSearch = strSearch & " OrdreNr LIKE '%" & txtOrdrenr.Text & "%' AND" End If
If Len(TxtKunde.Text) > 0 Then strSearch = strSearch & " Kunde LIKE '%" & txtKunde.Text & "%' AND" End If
If Len(TxtForhandlerkode.Text) > 0 Then strSearch = strSearch & " Forhandlerkode LIKE '%" & txtForhandlerkode.Text & "%' AND" End If
If Len(TxtLevUge.Text) > 0 Then strSearch = strSearch & " Leveringsuge LIKE '%" & txtLevUge.Text & "%' AND" End If
If strSearch <> "" Then strSearch = Mid$(strSearch, 1, Len(strSearch) - 4)
OpenDB() strSQLTabel1 = "SELECT * FROM Tabel1 WHERE " & strSearch & " order by Ordrenr Asc;" objComm.CommandText = strSQLTabel1 DataGridTabel1.DataSource = objComm.ExecuteReader() DataGridTabel1.DataBind() CloseDB()
OpenDB() strSQLTabel2 = "SELECT * FROM Tabel2 WHERE " & strSearch & " order by Ordrenr Asc;" objComm.CommandText = strSQLTabel2 DataGridTabel2.DataSource = objComm.ExecuteReader() DataGridTabel2.DataBind() CloseDB()
OpenDB() strSQLTabel3 = "SELECT * FROM Tabel3 WHERE " & strSearch & " order by Ordrenr Asc;" objComm.CommandText = strSQLTabel3 DataGridTabel3.DataSource = objComm.ExecuteReader() DataGridTabel3.DataBind() CloseDB()
OpenDB() strSQLTabel4 = "SELECT * FROM Tabel4 WHERE " & strSearch & " order by Ordrenr Asc;" objComm.CommandText = strSQLTabel4 DataGridTabel4.DataSource = objComm.ExecuteReader() DataGridTabel4.DataBind() CloseDB()
end if LblTabel1.text = "Tabel1" LblTabel2.text = "Tabel2" LblTabel3.text = "Tabel3" LblTabel4.text = "Tabel4" End Select LblFejlmeddelelse.Text = "" End Sub
Jakob / snakejake>>> Hvis du ikke svarer inden 01-04-2007 lukker jeg selv.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.