Jag har bara programmerat i vb6 och det har fungerat bra för mig tills jag bytte operativ till Windows 8 Hej, det ligger liknande artiklar här på pellesoft om det. Tackar så mycket ja, men nu har jag problem igen, har fått till allt utom just att uppdatera posten, funkar bra att navigera runt samt att skapa ny post men inte att uppdatera, förstår inte var problemet är, har följt den här guiden http://www.homeandlearn.co.uk/NET/nets12p4.html Löste det själv, problemet var i accessdatabasen, jag hade inte satt någon primärnyckel på min indexräknare, bara tur jag kom på detVb 2013 och accessdatabas
Har insett att vb6 är förlegat, och måste lära mig vb.net (2013)
Men kan någon visa mig en artikel eller skriva hur man kopplar vb.net mot en accessdatabas (2010) med endast kod
tydligen ska man även göra imports av data "Imports System.Data.OleDb" var gör man lämpligast det i en modul eller?
tyckte jag kunde vb6 hyfsat men nu är jag en riktigt nybörjare och känner att jag måste börja om från börjanSv: Vb 2013 och accessdatabas
http://www.pellesoft.se/article/364/intro-till-adonet-for-ado-programmerare kanske är en start
//PelleSv:Vb 2013 och accessdatabas
jag har kollat runt och löste det så här
gjorde en modul där jag la in
Public con As New OleDb.OleDbConnection
Public dbProvider As String
Public dbSource As String
Public ds As New DataSet
Public da As OleDb.OleDbDataAdapter
Public sql As String
Public cb As New OleDb.OleDbCommandBuilder(da)
och sen i formulärets load funktion la jag in
dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;"
dbSource = "Data Source=T:\Visual Studio 2013\RwAdressbok2014\RwAdressbok2014\Rwadress.accdb"
con.ConnectionString = dbProvider & dbSource
con.Open()
sql = "SELECT * from Person"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "Rwadress")
con.Close()
TotAntalRader = ds.Tables("Rwadress").Rows.Count
sen om det är rätt har jag ingen aning om men det fungerarSv:Vb 2013 och accessdatabas
och när jag skrev av den så fungerade det, men då jag gjorde mitt eget program så fungerade inte update funktionen
så här ser den ut, stannar på näst sista raden: da.Update(ds, "Rwadress") då den säger så här "Additional information: Dynamisk SQL-generering för UpdateCommand stöds inte gentemot ett SelectCommand som inte returnerar information om nyckelkolumn."
så den verkar inte veta vilken post den ska uppdater?
Private Sub btnUppdatera_Click(sender As Object, e As EventArgs) Handles btnUppdatera.Click
If AktuellPost < 0 Then Exit Sub
If boolNyPost = True Then
Call SkapaNyPost()
Exit Sub
End If
Dim cb As New OleDb.OleDbCommandBuilder(da)
ds.Tables("Rwadress").Rows(AktuellPost).Item("Fornamn") = txtFornamn.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Efternamn") = txtEfternamn.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Postadress") = txtGatuadress.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Postnummer") = txtPostnummer.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Ort") = txtOrt.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Födelsedatum") = txtFodelsedatum.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Epostadress") = txtEpostadress.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr1") = txtTelenr1.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr2") = txtTelenr2.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Anteckningar") = txtAnteckningar.Text
da.Update(ds, "Rwadress")
End Sub
skickar med hela programmet om det hjälper någon att hjälpa mig
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;"
dbSource = "Data Source=T:\Visual Studio 2013\RwAdressbok2014\RwAdressbok2014\Rwadress.accdb"
Dim Screen As System.Drawing.Rectangle
Screen = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea()
Me.Top = (Screen.Height \ 2) - (Me.Height \ 2)
Me.Left = (Screen.Width \ 2) - (Me.Width \ 2)
con.ConnectionString = dbProvider & dbSource
con.Open()
sql = "SELECT * from Person"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "Rwadress")
con.Close()
TotAntalRader = ds.Tables("Rwadress").Rows.Count
Call Init()
Call Knappar(Knappstatus)
NavigateRecords()
End Sub
Private Sub NavigateRecords()
Dim cb As New OleDb.OleDbCommandBuilder(da)
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Fornamn")) = False Then
lblFornamn.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Fornamn")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Efternamn")) = False Then
lblEfternamn.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Efternamn")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Postadress")) = False Then
lblGatuadress.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Postadress")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Postnummer")) = False Then
lblGatuadress.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Postnummer")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Ort")) = False Then
lblOrt.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Ort")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Födelsedatum")) = False Then
LblFodelsedatum.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Födelsedatum")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Epostadress")) = False Then
LblFodelsedatum.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Epostadress")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr1")) = False Then
lblTeleNr1.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr1")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr2")) = False Then
lblTeleNr2.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr2")
End If
If IsDBNull(ds.Tables("Rwadress").Rows(AktuellPost).Item("Anteckningar")) = False Then
lblAnteckningar.Text = ds.Tables("Rwadress").Rows(AktuellPost).Item("Anteckningar")
End If
da.Update(ds, "Rwadress")
End Sub
Private Sub btnNasta_Click(sender As Object, e As EventArgs) Handles btnNasta.Click
If AktuellPost <> TotAntalRader - 1 Then
AktuellPost = AktuellPost + 1
NavigateRecords()
Else
MsgBox("no more rows")
End If
End Sub
Private Sub btnForegaende_Click(sender As Object, e As EventArgs) Handles btnForegaende.Click
If AktuellPost > 0 Then
AktuellPost = AktuellPost - 1
NavigateRecords()
ElseIf AktuellPost = -1 Then
MsgBox("No records yet")
ElseIf AktuellPost = 0 Then
MsgBox("First record")
End If
End Sub
Private Sub btnForsta_Click(sender As Object, e As EventArgs) Handles btnForsta.Click
If AktuellPost <> 0 Then
AktuellPost = 0
NavigateRecords()
End If
End Sub
Private Sub btnSista_Click(sender As Object, e As EventArgs) Handles btnSista.Click
If AktuellPost <> TotAntalRader - 1 Then
AktuellPost = TotAntalRader - 1
NavigateRecords()
End If
End Sub
Private Sub btnNyPost_Click(sender As Object, e As EventArgs) Handles btnNyPost.Click
boolNyPost = True
HoldAktuellPost = AktuellPost
Call Knappar(False)
Call lblToText(True)
End Sub
Private Sub Init()
AktuellPost = 0
Knappstatus = True
boolVisaLbl = True
End Sub
Private Sub Knappar(Knappstatus)
btnForsta.Enabled = knappstatus
btnForegaende.Enabled = knappstatus
btnNasta.Enabled = knappstatus
btnSista.Enabled = knappstatus
btnNyPost.Enabled = knappstatus
btnUppdatera.Enabled = Not knappstatus
btnAndra.Enabled = knappstatus
btnRadera.Enabled = knappstatus
btnAvbryt.Enabled = Not knappstatus
End Sub
Private Sub lblToText(boolVisaLbl)
' boolVisaLbl=true visar textfälten
'flytta txt fälten till samma position som lbl fälten, dölj lblfälten
lblFornamn.Visible = Not boolVisaLbl
lblEfternamn.Visible = Not boolVisaLbl
lblGatuadress.Visible = Not boolVisaLbl
lblPostnummer.Visible = Not boolVisaLbl
lblOrt.Visible = Not boolVisaLbl
LblFodelsedatum.Visible = Not boolVisaLbl
lblEpostadress.Visible = Not boolVisaLbl
lblTeleNr1.Visible = Not boolVisaLbl
lblTeleNr2.Visible = Not boolVisaLbl
lblAnteckningar.Visible = Not boolVisaLbl
txtFornamn.Visible = boolVisaLbl
txtEfternamn.Visible = boolVisaLbl
txtGatuadress.Visible = boolVisaLbl
txtPostnummer.Visible = boolVisaLbl
txtOrt.Visible = boolVisaLbl
txtFodelsedatum.Visible = boolVisaLbl
txtEpostadress.Visible = boolVisaLbl
txtTelenr1.Visible = boolVisaLbl
txtTelenr2.Visible = boolVisaLbl
txtAnteckningar.Visible = boolVisaLbl
If boolVisaLbl = True Then
txtFornamn.Bounds = lblFornamn.Bounds
txtEfternamn.Bounds = lblEfternamn.Bounds
txtGatuadress.Bounds = lblGatuadress.Bounds
txtPostnummer.Bounds = lblPostnummer.Bounds
txtOrt.Bounds = lblOrt.Bounds
txtFodelsedatum.Bounds = LblFodelsedatum.Bounds
txtEpostadress.Bounds = lblEpostadress.Bounds
txtTelenr1.Bounds = lblTeleNr1.Bounds
txtTelenr2.Bounds = lblTeleNr2.Bounds
txtAnteckningar.Bounds = lblAnteckningar.Bounds
End If
If boolVisaLbl = False Then
lblFornamn.Bounds = txtFornamn.Bounds
lblEfternamn.Bounds = txtEfternamn.Bounds
lblGatuadress.Bounds = txtGatuadress.Bounds
lblPostnummer.Bounds = txtPostnummer.Bounds
lblOrt.Bounds = txtOrt.Bounds
LblFodelsedatum.Bounds = txtFodelsedatum.Bounds
lblEpostadress.Bounds = txtEpostadress.Bounds
lblTeleNr1.Bounds = txtTelenr1.Bounds
lblTeleNr2.Bounds = txtTelenr2.Bounds
lblAnteckningar.Bounds = txtAnteckningar.Bounds
End If
End Sub
Private Sub btnUppdatera_Click(sender As Object, e As EventArgs) Handles btnUppdatera.Click
If AktuellPost < 0 Then Exit Sub
If boolNyPost = True Then
Call SkapaNyPost()
Exit Sub
End If
Dim cb As New OleDb.OleDbCommandBuilder(da)
ds.Tables("Rwadress").Rows(AktuellPost).Item("Fornamn") = txtFornamn.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Efternamn") = txtEfternamn.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Postadress") = txtGatuadress.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Postnummer") = txtPostnummer.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Ort") = txtOrt.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Födelsedatum") = txtFodelsedatum.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Epostadress") = txtEpostadress.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr1") = txtTelenr1.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("TeleNr2") = txtTelenr2.Text
ds.Tables("Rwadress").Rows(AktuellPost).Item("Anteckningar") = txtAnteckningar.Text
da.Update(ds, "Rwadress")
End Sub
Private Sub SkapaNyPost()
Dim dsNyPost As DataRow
dsNyPost = ds.Tables("Rwadress").NewRow
dsNyPost.Item("Fornamn") = txtFornamn.Text
dsNyPost.Item("Efternamn") = txtEfternamn.Text
dsNyPost.Item("Postadress") = txtGatuadress.Text
dsNyPost.Item("Postnummer") = txtPostnummer.Text
dsNyPost.Item("Ort") = txtOrt.Text
dsNyPost.Item("Födelsedatum") = txtFodelsedatum.Text
dsNyPost.Item("Epostadress") = txtEpostadress.Text
dsNyPost.Item("TeleNr1") = txtTelenr1.Text
dsNyPost.Item("TeleNr2") = txtTelenr2.Text
dsNyPost.Item("Anteckningar") = txtAnteckningar.Text
ds.Tables("Rwadress").Rows.Add(dsNyPost)
da.Update(ds, "Rwadress")
TotAntalRader = TotAntalRader + 1
Call lblToText(False)
AktuellPost = HoldAktuellPost
Call NavigateRecords()
Call Knappar(True)
End Sub
Private Sub btnAvbryt_Click(sender As Object, e As EventArgs) Handles btnAvbryt.Click
boolNyPost = False
Call lblToText(False)
Call Knappar(True)
End Sub
Private Sub btnAndra_Click(sender As Object, e As EventArgs) Handles btnAndra.Click
txtFornamn.Text = lblFornamn.Text
txtEfternamn.Text = lblEfternamn.Text
txtGatuadress.Text = lblGatuadress.Text
txtPostnummer.Text = lblPostnummer.Text
txtOrt.Text = lblOrt.Text
txtFodelsedatum.Text = LblFodelsedatum.Text
txtEpostadress.Text = lblEpostadress.Text
txtTelenr1.Text = lblTeleNr1.Text
txtTelenr2.Text = lblTeleNr2.Text
txtAnteckningar.Text = lblAnteckningar.Text
Call lblToText(True)
Call Knappar(False)
End Sub
End ClassSv: Vb 2013 och accessdatabas