Jag behöver först lite hjälp med att hämta ut rätt data från en tabell. (VB.NET)
Har följande kod:
Dim conString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Databas.mdb"
Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(conString)
Dim objDataSet As DataSet = New DataSet()
Dim objDataAdapter As OleDb.OleDbDataAdapter
Private Sub Start_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
getNamn()
cbNamn.DataSource = objDataSet.Tables("Namn")
cbNamn.DisplayMember = "Namn"
Catch
Call fel()
End Try
End Sub
Private Sub getNamn()
Const sql = "Select Namn, nID FROM Namn ORDER BY nID DESC"
objDataSet = New DataSet()
conn = New OleDb.OleDbConnection(conString)
conn.Open()
objDataAdapter = New OleDb.OleDbDataAdapter(sql, conn)
objDataAdapter.Fill(objDataSet, "Namn")
conn.Close()
End Sub
Private Sub btnStarta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStarta.Click
End Sub
Det finns en dropdown ruta samt en knapp. I droppdown rutan visas det som koden ovan hämtar. Hur gör jag så jag får reda på vilket id (uID) den valda posten har som finns i dropdown rutan när användaren klickar på knappen?
Värdet ligger i cbNamn.SelectedValue, men du måste ange ValueMember på droppen.
Dessutom, globala variabler som inte behövs är ondska.
'Bör hellre ligga i en config-fil
Dim conString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Databas.mdb"
Private Sub Start_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
cbNamn.DataSource = getNamn()
cbName.ValueMember = "nID"
cbNamn.DisplayMember = "Namn"
Catch
Call fel()
End Try
End Sub
Private Function getNamn() As DataTable
Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(conString)
Dim objDataTable As DataTable = New DataTable()
Dim objDataAdapter As OleDb.OleDbDataAdapter
Const sql = "Select Namn, nID FROM Namn ORDER BY nID DESC"
conn.Open()
objDataAdapter = New OleDb.OleDbDataAdapter(sql, conn)
objDataAdapter.Fill(objDataTable)
conn.Close()
Return objDataTable
End Sub
Private Sub btnStarta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStarta.Click
'Värdet ligger i cbNamn.SelectedValue (för det är väl inte ASP.NET?)
End Sub
Nu vill jag att det som hämtas när man klickar på knappen ska sparas i 2 arrayer.
Private Sub btnStarta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStarta.Click
GroupBox1.Visible = False
Panel1.Visible = True
Dim valdID As Integer = cbNamn.SelectedValue
getOrd(valdID)
End Sub
Private Function getOrd(ByVal valdID As Integer) As DataTable
Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(conString)
Dim objDataTable As DataTable = New DataTable()
Dim objDataAdapter As OleDb.OleDbDataAdapter
Const sql = "Select ord1, ord2 FROM Ord WHERE nID = " & valdID & ""
conn.Open()
objDataAdapter = New OleDb.OleDbDataAdapter(sql, conn)
objDataAdapter.Fill(objDataTable)
conn.Close()
Return objDataTable
End Functio
Hur får jag ord1 i en array, sen ord2 i en annan array? eller kan man göra typ en matris?
Får ett litet felmeddelande på min sql sats:
Constant expression is required.
Om du verkligen måste ha två arrayer så får du loopa igenom DataTable:n och bygga upp dem själv. Annars är ju tabellen i sig en matris.
Felmeddelandet kan betyda vad som helst. Har du något värde i "valdID"?
Tre saker:
SelectedValue är en sträng. valdID är en integer. Du bör typomvandla (VB gör det automatiskt om inte Option Strict är påslaget. Att programmera utan Option Strict är också ondska)
Const sql är ingen konstant och ska inte definieras som en sådan.
Man ska ALLTID använda parametriserade frågor, ALDRIG bygga ihop SQL-strängar (säkerhet och prestanda)
Ungefär:
Dim sql As String= "Select ord1, ord2 FROM Ord WHERE nID = ?"
conn.Open()
objDataAdapter = New OleDb.OleDbDataAdapter(sql, conn)
objDataAdapter.SelectCommand.Paramaters.Add("nID",OleDbType.Integer,4).Value=valdID
'osv.
Jag rekommenderar att du använder Visual Studio (t.ex. gratisversionen) eller SharpDevelop när du kodar, så slipper du undra över saker som "Paramaters"-stavningen.