Benutzer mit den meisten Antworten
Problem mit Schreiben in Zeilen

Frage
-
Hallo,
ich frage mit Ado die Datenbank ab, steck alles in ein Dataset, verändere die Daten und lasse es dann in die Tabelle schreiben.
Wie kann es sein, dass in alle Zeilen außer der ersten geschrieben wird? Ich blick da nicht durch, habe schon alles probiert was mir einfällt, nen Breakpoint gesetzt und geguckt..
schaut mal bitte einer rein:Imports System.Data.SqlClient Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strConnection As String = "Password=xy;Persist Security Info=True;" & _ "User ID=user0;Initial Catalog=test;" & _ "Data Source=190.45.678;" MsgBox("Verbindung hergestellt") Dim conn As SqlConnection = New SqlConnection(strConnection) Dim SQL As String = "Select * from Artikel where artid = 1 order by artid " Dim da As New SqlDataAdapter(SQL, conn) Dim cmdb As New SqlCommandBuilder(da) Dim ds As New DataSet() conn.Open() da.Fill(ds, "artikel") Dim dt As DataTable = ds.Tables("Artikel") Dim anzahl As Integer = ds.Tables("artikel").Rows.Count - 1 ds.Tables("Artikel").Rows(0).BeginEdit() For i As Integer = 0 To anzahl ds.Tables("Artikel").Rows(i).Item("altean") = "format(now)" Next MsgBox("fertig") da.Update(ds, "artikel") ListBox1.DataSource = dt ListBox1.DisplayMember = "altean" End Sub End Class
Dankeschön!
Antworten
-
Hallo,
ich frage mit Ado die Datenbank ab, steck alles in ein
Dataset, verändere die Daten und lasse es dann in
die Tabelle schreiben.Wenn Du nur diese einzige Tabelle zu verarbeiten hast,
dann ist ein DataSet überflüssiger Ballast. Die Daten aus
dieser Tabelle kannst Du auch direkt in eine (lokale)
DataTable holen und dort bearbeiten.Wie kann es sein, dass in alle Zeilen außer der ersten
geschrieben wird? Ich blick da nicht durch, habe schon
alles probiert was mir einfällt, nen Breakpoint gesetzt
und geguckt..Das
ds.Tables("Artikel").Rows(0).BeginEdit()
vor Deiner Schleife, in welcher Du die Datensätze
änderst, ist die Ursache. Das gehört dort nicht hin...... schnipp .....
Dim dt As DataTable = ds.Tables("Artikel")
Dim anzahl As Integer = ds.Tables("artikel").Rows.Count - 1
ds.Tables("Artikel").Rows(0).BeginEdit()Entferne die vorstehende Zeile, dann werden alle Datensätze
wie gewünscht verändert.For i As Integer = 0 To anzahl
ds.Tables("Artikel").Rows(i).Item("altean") = "format(now)"
Next
..... schnapp .....Mit nachfolgendem Beispiel kannst Du die Auswirkungen Deines
ds.Tables("Artikel").Rows(0).BeginEdit()
direkt im DataGridView beobachten.
Kopiere den Code in ein leeres Formmodul (Form1.vb)' / / / Beginn Code Form1.vb
Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private WithEvents DGV As DataGridView
Private WithEvents Button1 As Button
Private Check1 As CheckBoxPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateData()
CreateControls()DGV.DataSource = mDV
With DGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight.Columns(2).DefaultCellStyle.Format = _
"dd.MM.yyyy HH:mm:ss".AutoResizeColumns()
End WithEnd Sub
Private Sub CreateControls()
DGV = New DataGridView
With DGV
.Name = "DGV".DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold).SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 70).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(DGV)Button1 = New Button
With Button1
.Name = "Button1"
.Font = New Font("Arial", 10)
.SetBounds(10, DGV.Bottom + 10, 100, 40)
.Text = "Update".Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(Button1)Check1 = New CheckBox
With Check1
.Name = "Check1"
.Font = Button1.Font
.Text = "mit BeginEdit"
.AutoSize = True.Location = _
New Point _
(Button1.Right + 20, _
Button1.Top).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Bottom.ThreeState = False
.Checked = TrueEnd With
Me.Controls.Add(Check1)Me.Size = New Size(400, 480)
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRowmDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))
.Columns.Add("Datum", GetType(Date))For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = Now.Rows.Add(DR)
Next
.AcceptChanges()
End WithmDV = mDT.DefaultView
End SubPrivate Sub Button1_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Button1.ClickDim Rnd As New Random(Now.Millisecond)
Dim i As Integer
Dim NewDate As Date' *********************
If Check1.Checked Then
mDT.Rows(0).BeginEdit()
Else
mDT.Rows(0).CancelEdit()
End If
' *********************For i = 0 To mDT.Rows.Count - 1
NewDate = _
Now.AddDays(Rnd.Next(1, 10))NewDate = _
NewDate.AddSeconds(Rnd.Next(100, 6000))mDT.Rows(i).Item("Datum") = NewDate
Next
End Sub
End Class
' \ \ \ Ende Code Form1.vbGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 13. Oktober 2010 12:32
-
Hi dejam27,
versuch mal anstatt:
Dim anzahl As Integer = ds.Tables("artikel").Rows.Count - 1 ds.Tables("Artikel").Rows(0).BeginEdit() For i As Integer = 0 To anzahl ds.Tables("Artikel").Rows(i).Item("altean") = "format(now)" Next
dieses hier:
For Each row As DataRow In dt.Rows row("altean") = "format(now)" Next
Vielleicht hilfts ja.
Please 'Mark as Answer' if I helped. This helps others who have the same problem!- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 13. Oktober 2010 12:32
Alle Antworten
-
Hi dejam27,
versuch mal anstatt:
Dim anzahl As Integer = ds.Tables("artikel").Rows.Count - 1 ds.Tables("Artikel").Rows(0).BeginEdit() For i As Integer = 0 To anzahl ds.Tables("Artikel").Rows(i).Item("altean") = "format(now)" Next
dieses hier:
For Each row As DataRow In dt.Rows row("altean") = "format(now)" Next
Vielleicht hilfts ja.
Please 'Mark as Answer' if I helped. This helps others who have the same problem!- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 13. Oktober 2010 12:32
-
Hallo,
ich frage mit Ado die Datenbank ab, steck alles in ein
Dataset, verändere die Daten und lasse es dann in
die Tabelle schreiben.Wenn Du nur diese einzige Tabelle zu verarbeiten hast,
dann ist ein DataSet überflüssiger Ballast. Die Daten aus
dieser Tabelle kannst Du auch direkt in eine (lokale)
DataTable holen und dort bearbeiten.Wie kann es sein, dass in alle Zeilen außer der ersten
geschrieben wird? Ich blick da nicht durch, habe schon
alles probiert was mir einfällt, nen Breakpoint gesetzt
und geguckt..Das
ds.Tables("Artikel").Rows(0).BeginEdit()
vor Deiner Schleife, in welcher Du die Datensätze
änderst, ist die Ursache. Das gehört dort nicht hin...... schnipp .....
Dim dt As DataTable = ds.Tables("Artikel")
Dim anzahl As Integer = ds.Tables("artikel").Rows.Count - 1
ds.Tables("Artikel").Rows(0).BeginEdit()Entferne die vorstehende Zeile, dann werden alle Datensätze
wie gewünscht verändert.For i As Integer = 0 To anzahl
ds.Tables("Artikel").Rows(i).Item("altean") = "format(now)"
Next
..... schnapp .....Mit nachfolgendem Beispiel kannst Du die Auswirkungen Deines
ds.Tables("Artikel").Rows(0).BeginEdit()
direkt im DataGridView beobachten.
Kopiere den Code in ein leeres Formmodul (Form1.vb)' / / / Beginn Code Form1.vb
Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private WithEvents DGV As DataGridView
Private WithEvents Button1 As Button
Private Check1 As CheckBoxPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateData()
CreateControls()DGV.DataSource = mDV
With DGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight.Columns(2).DefaultCellStyle.Format = _
"dd.MM.yyyy HH:mm:ss".AutoResizeColumns()
End WithEnd Sub
Private Sub CreateControls()
DGV = New DataGridView
With DGV
.Name = "DGV".DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold).SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 70).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(DGV)Button1 = New Button
With Button1
.Name = "Button1"
.Font = New Font("Arial", 10)
.SetBounds(10, DGV.Bottom + 10, 100, 40)
.Text = "Update".Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(Button1)Check1 = New CheckBox
With Check1
.Name = "Check1"
.Font = Button1.Font
.Text = "mit BeginEdit"
.AutoSize = True.Location = _
New Point _
(Button1.Right + 20, _
Button1.Top).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Bottom.ThreeState = False
.Checked = TrueEnd With
Me.Controls.Add(Check1)Me.Size = New Size(400, 480)
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRowmDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))
.Columns.Add("Datum", GetType(Date))For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = Now.Rows.Add(DR)
Next
.AcceptChanges()
End WithmDV = mDT.DefaultView
End SubPrivate Sub Button1_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Button1.ClickDim Rnd As New Random(Now.Millisecond)
Dim i As Integer
Dim NewDate As Date' *********************
If Check1.Checked Then
mDT.Rows(0).BeginEdit()
Else
mDT.Rows(0).CancelEdit()
End If
' *********************For i = 0 To mDT.Rows.Count - 1
NewDate = _
Now.AddDays(Rnd.Next(1, 10))NewDate = _
NewDate.AddSeconds(Rnd.Next(100, 6000))mDT.Rows(i).Item("Datum") = NewDate
Next
End Sub
End Class
' \ \ \ Ende Code Form1.vbGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 13. Oktober 2010 12:32