VinnarenMedlem sedan sep. 2005833 inlägg Hej
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?
Tacksam för all hjälp :stud
GlitterMedlem sedan juli 2003465 inlägg Jag brukar köra AutoPostBack="true" på DropDownListen och följande kod i onload
dim li as listitem
dim i as integer
for i to antalposter
li = new listitem
li.value = id
li.text = text
DropDownList.items.add(li)
next
i DropDownList.SelectedValue får du värdet sedan...
Koden är skriven på frihand så det kanske är fel någonstans.
VinnarenMedlem sedan sep. 2005833 inlägg tack, men får felmeddelandet:
Type 'listitem' is not defined.
på raderna:
Dim li As listitem
samt
li = New listitem
hur löser jag detta?
emissionMedlem sedan dec. 19996 721 inlägg 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
VinnarenMedlem sedan sep. 2005833 inlägg tack, det funkade perfekt :p
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.
Hur löser jag detta??
Tacksam för all hjälp :stud
emissionMedlem sedan dec. 19996 721 inlägg 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.
VinnarenMedlem sedan sep. 2005833 inlägg tack :bire
får felmeddelandet:
'Paramaters' is not a member of 'System.Data.OleDb.OleDbCommand'.
vad är det jag ska importera?
samt hur gör jag för att få ut tex få ut 1 raden av ord1 och ord2? :q
JosefMedlem sedan mars 20023 561 inlägg Tror att Parameters fungerar bättre. ;)
VinnarenMedlem sedan sep. 2005833 inlägg haha, :i , tack :e
Hur gör jag nu för att få ut första raden från det som hämtas från databasen? ord1 samt ord2 ?? :q
emissionMedlem sedan dec. 19996 721 inlägg Loopa igenom en DataTable
For Each row as DataRow in objDataTable.Rows
'Värdet kan hämtas ur row("kolumnnamn")
Next
Första raden:
If objDataTable.Rows.Count>0
'Värdet kan hämtas ur objDataTable.Rows(0)("kolumnnamn")
End If
emissionMedlem sedan dec. 19996 721 inlägg 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.
VinnarenMedlem sedan sep. 2005833 inlägg tack emission, nu funkar den (y) .