07. januar 2006 - 12:11Der 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.
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?
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
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.
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?
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 :)
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?
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å)
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. :)
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.