Avatar billede mnoer Nybegynder
07. januar 2006 - 12:11 Der er 17 kommentarer og
1 løsning

Gemme ændringer af datagrid i database

Jeg har en datagrid hvor "Edit" er tilladt.
Men hvordan får jeg gemt ændringer i databasen?

Jeg er ret ny inden for vb.net (og windows prog.), så jeg har brugt en masse "Drag and drop" til at lave mine grids. De bliver vist fint nok, og data i dem bliver også hentet fra fra en database, men ændringerne bliver ikke gemt i databasen.
Avatar billede arne_v Ekspert
07. januar 2006 - 12:44 #1
kalder update på din data adapter (og accept på data set og refresh på data grid)
Avatar billede mnoer Nybegynder
07. januar 2006 - 13:04 #2
Når jeg hælder data i gridden er det med denne linie:
Me.NewAppellationTableAdapter.Fill(Me.DatabaseDataSet.newAppellation)

når jeg skal opdatere, skal det så være sådan her:
Me.NewAppellationTableAdapter.Update(Me.DatabaseDataSet.newAppellation.AcceptChanges) ?

... jeg får en fejl:
Error    2    Overload resolution failed because no accessible 'Update' can be called with these arguments:
    'Public Overridable Overloads Function Update(dataRows() As System.Data.DataRow) As Integer': Expression does not produce a value.
    'Public Overridable Overloads Function Update(dataRow As System.Data.DataRow) As Integer': Expression does not produce a value.
    'Public Overridable Overloads Function Update(dataSet As DatabaseDataSet) As Integer': Expression does not produce a value.
    'Public Overridable Overloads Function Update(dataTable As DatabaseDataSet.newAppellationDataTable) As Integer': Expression does not produce a value.    C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Find_Appellation.vb    13    9    CabriscoWine

så det er vist ikke helt sådan, men hvad går galt?
Avatar billede arne_v Ekspert
07. januar 2006 - 14:53 #3
Me.NewAppellationTableAdapter.Update(Me.DatabaseDataSet.newAppellation)

eller

Me.NewAppellationTableAdapter.Update(Me.DatabaseDataSet)
Avatar billede mnoer Nybegynder
07. januar 2006 - 15:05 #4
det virker heller ikke...
den melder ikke fejl, men den opdatere heller ikke noget :/

koden:
If Me.DatabaseDataSet.HasChanges Then
    MsgBox("opdater")
    Me.NewAppellationTableAdapter.Update(Me.DatabaseDataSet.newAppellation)
End If

msgbox'en vises, så det bliver eksekveret.
Avatar billede arne_v Ekspert
07. januar 2006 - 15:18 #5
Har du brugt command builderen ?
Avatar billede arne_v Ekspert
07. januar 2006 - 15:18 #6
jeg har et gammelt eksempel som virker:

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Drawing
Imports System.Windows.Forms

Namespace DefaultNamespace
    Public Class MainForm
        Inherits Form
        Private dg As DataGrid
        Private save As Button
        Private con As OleDbConnection
        Private da As OleDbDataAdapter
        Private cb As OleDbCommandBuilder
        Private ds As DataSet

        Public Shared Sub Main
            Dim fMainForm As New MainForm
            fMainForm.ShowDialog()
        End Sub

        Public Sub New()
            MyBase.New
            Me.InitializeComponent
        End Sub

        Private Sub InitializeComponent()
            con = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;UserId=admin;Password=")
            con.Open
            da = New OleDbDataAdapter("SELECT * FROM T1", con)
            cb = New OleDbCommandBuilder(da)
            da.UpdateCommand = cb.GetUpdateCommand
            ds = New DataSet
            da.Fill(ds, "T1")
            dg = New DataGrid
            save = New Button
            SuspendLayout
            dg.Location = New Point(50, 50)
            dg.Size = New Size(300, 200)
            dg.SetDataBinding(ds, "T1")
            save.Location = New Point (50, 300)
            save.Size = New Size (100, 25)
            save.Text = "Save"
            AddHandler save.Click, AddressOf SaveClick
            ClientSize = New Size(400, 400)
            Controls.Add(dg)
            Controls.Add(save)
            Text = "Main Form"
            ResumeLayout(false)
        End Sub
       
        Sub SaveClick(ByVal sender As Object, ByVal e As EventArgs)
            da.Update(ds, "T1")
            ds.AcceptChanges
            dg.Refresh
        End Sub
    End Class
End Namespace
Avatar billede mnoer Nybegynder
07. januar 2006 - 15:29 #7
Som du nok har opdaget er jeg rimelig ny i vb.net...
Jeg er ikke sikker på hvad command builderen "laver" for mig (?), så jeg tror ikke jeg har brugt den.

Jeg prøver at kigge på dit eksempel. :)
Avatar billede arne_v Ekspert
07. januar 2006 - 15:33 #8
du giver select til data adapteren

command builderen bygger selv update, insert og delete

da.UpdateCommand = cb.GetUpdateCommand burde iøvrigt slet ikke være nødvendig men det
var det hos mig
Avatar billede mnoer Nybegynder
07. januar 2006 - 15:37 #9
ok, den har jeg brugt så...
den lavede selv nogle "standard" da jeg lavede forbindelsen til DB
Avatar billede mnoer Nybegynder
07. januar 2006 - 20:33 #10
nu har jeg prøvet at lave en updateQuery hvor jeg ganske simpelt opdatere en række i en tabel (henter værdier fra nogle text-felter og opdatere ved at klikke på en knap)

den opdatering sker heller ikke... det er som om de ændringer jeg laver aldrig bliver "committet" til databasen.
hvad gør jeg galt?
Avatar billede arne_v Ekspert
07. januar 2006 - 20:39 #11
catcher du en execption uden at gøre noget ved den ?
Avatar billede mnoer Nybegynder
07. januar 2006 - 20:42 #12
du siger noget... kunne være det skulle i en try catch så jeg har en chance for at se hvad der går galt.... som sagt, min erfaring med windows-programmering kan tældes i timer (eller meget få dage :)
Avatar billede mnoer Nybegynder
07. januar 2006 - 20:44 #13
men fik så ikke noget ud af det... der kom ingen fejl
Avatar billede mnoer Nybegynder
07. januar 2006 - 21:17 #14
jeg kan ikke få update Queries til at virke... har rodet lidt med det. Hvis jeg eksekvere ren sql (update table ......) så kan jeg godt opdatere tabellen, men hvis jeg prøver at gøre det gennem query lykkedes det ikke. Jeg får ikke nogle fejl, den opdatere bare ikke.
Er der noget "specielt" man skal gøre når man opdatere via query?
Avatar billede arne_v Ekspert
08. januar 2006 - 11:08 #15
update queries ?

du mener en saved query i Access som opdaterer ?

den skal udføres som en stored procedure
Avatar billede mnoer Nybegynder
08. januar 2006 - 11:11 #16
ja... en Query der opdatere i en tabel.
Men jeg tror jeg har løst noget af problemet... når jeg debugger gemmer den ikke ændringer i databasen, men hvis jeg eksekvere exe-filen fra bin mappen kører det (så virkede opdatering af listen/datagrid også)
Avatar billede mnoer Nybegynder
08. januar 2006 - 11:19 #17
vil lige benytte lejligheden til at sige mange tak for hjælpen indtil videre... der kommer med garanti mange flere spørgsmål.
Du dropper bare et svar for point. :)
Avatar billede arne_v Ekspert
08. januar 2006 - 11:20 #18
ok
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester