Announcement

Collapse
No announcement yet.

Update Dataset/Datatable

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Update Dataset/Datatable

    Hallo zusammen,
    ich lese schon ein paar Tage mit konnte aber leider noch keine Antowort finden.
    Ich soll für meine Chef eine neue Warenwirtschaft programmieren. Das ganze läuft dann auf einem SQL 2008 Server und die Entwicklungsumgebung ist Visual Studio 2010 Visual Basic.
    Im Moment hänge ich an folgendem Problem.
    Ich erstelle gerade die Mitarbeiterverwaltung. In dieser wird der Mitarbeiter neu angelegt, festgelegt ob er sich an der Warenwirtschaft anmelden darf, ob er Techniker oder Verkäufer ist. Wenn der neue Mitarbeiter nur Techniker und / oder Verkäufer ist steht er später in verschieden Auswahlfelder zur Verfügung. Wird er allerdings USER (kann sich also an der Warenwirtschaft anmelden), bekommt er weitere Rechte zugewiesen. Es wird festgelegt mit welchem Mandanten er arbeiten kann, und welche Rechte er dort hat.
    Ich hoffe ich habe das verständlich erklärt.

    Jetzt zu meinem Problem. Ich habe folgende Tabellen auf dem SQL-Server angelegt.
    [IMG]Bild Hosted bei ImagesUp.de[/IMG]

    Dazu habe ich folgenden Code geschrieben:
    [highlight=vbnet]
    sqlds = New DataSet
    Dim myConnectstring As String
    Dim strcsb As New SqlConnectionStringBuilder
    With strcsb
    ' Servername an CSB.DataSource übergeben
    .DataSource = strsqlserver

    'Datenbankname
    .InitialCatalog = "XXXXX"

    'Mehrere Reader gleichzeitig aktivieren
    'WICHTIG !!
    .MultipleActiveResultSets = True

    ' IntegratedSecurity
    .IntegratedSecurity = False

    ' Für PersistSecurityInfo wird immer der Wert False verwendet
    .PersistSecurityInfo = False

    'Username & Passwort
    .UserID = XXXXXX
    .Password = XXXXXX

    End With

    'Connection-Objekt aufbauen
    myConnectstring = strcsb.ConnectionString
    sqlconn = New SqlConnection(myConnectstring)


    sqldtfirma = sqlds.Tables.Add("db_firma")
    sqldafirma = New SqlDataAdapter("SELECT * FROM tbl_firma", sqlconn)
    sqldafirma.FillSchema(sqlds, SchemaType.Source, "tbl_firma")
    sqldafirma.MissingSchemaAction = MissingSchemaAction.AddWithKey
    sqlcbfirma = New SqlCommandBuilder(sqldafirma)
    sqldafirma.InsertCommand = sqlcbfirma.GetInsertCommand
    sqldafirma.DeleteCommand = sqlcbfirma.GetDeleteCommand
    sqldafirma.UpdateCommand = sqlcbfirma.GetUpdateCommand
    sqldafirma.Fill(sqldtfirma)

    sqldtpersonal = sqlds.Tables.Add("db_personal")
    sqldapersonal = New SqlDataAdapter("SELECT * FROM tbl_personalinfo", sqlconn)
    sqldapersonal.FillSchema(sqlds, SchemaType.Source, "tbl_personalinfo")
    sqldapersonal.MissingSchemaAction = MissingSchemaAction.AddWithKey
    sqlcbpersonal = New SqlCommandBuilder(sqldapersonal)
    sqldapersonal.InsertCommand = sqlcbpersonal.GetInsertCommand
    sqldapersonal.DeleteCommand = sqlcbpersonal.GetDeleteCommand
    sqldapersonal.UpdateCommand = sqlcbpersonal.GetUpdateCommand
    sqldapersonal.Fill(sqldtpersonal)

    sqldtuser = sqlds.Tables.Add("db_user")
    sqldauser = New SqlDataAdapter("SELECT * FROM tbl_user ", sqlconn)
    sqldauser.FillSchema(sqlds, SchemaType.Source, "tbl_user")
    sqldauser.MissingSchemaAction = MissingSchemaAction.AddWithKey
    sqlcbuser = New SqlCommandBuilder(sqldauser)
    sqldauser.InsertCommand = sqlcbuser.GetInsertCommand
    sqldauser.DeleteCommand = sqlcbuser.GetDeleteCommand
    sqldauser.UpdateCommand = sqlcbuser.GetUpdateCommand
    sqldauser.Fill(sqldtuser)

    sqldttechn = sqlds.Tables.Add("db_techniker")
    sqldatechn = New SqlDataAdapter("SELECT * FROM tbl_techniker ", sqlconn)
    sqldatechn.FillSchema(sqlds, SchemaType.Source, "tbl_techniker")
    sqldatechn.MissingSchemaAction = MissingSchemaAction.AddWithKey
    sqlcbtechn = New SqlCommandBuilder(sqldatechn)
    sqldatechn.InsertCommand = sqlcbtechn.GetInsertCommand
    sqldatechn.DeleteCommand = sqlcbtechn.GetDeleteCommand
    sqldatechn.UpdateCommand = sqlcbtechn.GetUpdateCommand
    sqldatechn.Fill(sqldttechn)

    sqldtverk = sqlds.Tables.Add("db_verkauf")
    sqldaverk = New SqlDataAdapter("SELECT * FROM tbl_verkaeufer ", sqlconn)
    sqldaverk.FillSchema(sqlds, SchemaType.Source, "tbl_verkauf")
    sqldaverk.MissingSchemaAction = MissingSchemaAction.AddWithKey
    sqlcbverk = New SqlCommandBuilder(sqldaverk)
    sqldaverk.InsertCommand = sqlcbverk.GetInsertCommand
    sqldaverk.DeleteCommand = sqlcbverk.GetDeleteCommand
    sqldaverk.UpdateCommand = sqlcbverk.GetUpdateCommand
    sqldaverk.Fill(sqldtverk)

    sqldtrechte = sqlds.Tables.Add("db_rechte")
    sqldarechte = New SqlDataAdapter("SELECT * FROM tbl_rechte ", sqlconn)
    sqldarechte.FillSchema(sqlds, SchemaType.Source, "tbl_rechte")
    sqldarechte.MissingSchemaAction = MissingSchemaAction.AddWithKey
    sqlcbrechte = New SqlCommandBuilder(sqldarechte)
    sqldarechte.InsertCommand = sqlcbrechte.GetInsertCommand
    sqldarechte.DeleteCommand = sqlcbrechte.GetDeleteCommand
    sqldarechte.UpdateCommand = sqlcbrechte.GetUpdateCommand
    sqldarechte.Fill(sqldtrechte)

    sqlds.Relations.Add("rel_personal_ID", sqlds.Tables("db_personal").Columns("personal_ID") , sqlds.Tables("db_user").Columns("personal_ID"))
    sqlds.Relations.Add("rel_techniker_ID", sqlds.Tables("db_personal").Columns("personal_ID") , sqlds.Tables("db_techniker").Columns("personal_ID" ))
    sqlds.Relations.Add("rel_verkauf_ID", sqlds.Tables("db_personal").Columns("personal_ID") , sqlds.Tables("db_verkauf").Columns("personal_ID"))
    sqlds.Relations.Add("rel_rechte_ID", sqlds.Tables("db_personal").Columns("personal_ID") , sqlds.Tables("db_rechte").Columns("personal_ID"))


    'Dim mastersource As New BindingSource
    mastersource.DataSource = sqlds
    mastersource.DataMember = "db_personal"

    'Dim detailsource As New BindingSource
    detailsource.DataSource = mastersource
    detailsource.DataMember = "rel_personal_ID"

    'Dim detailsource As New BindingSource
    sourcetechnik.DataSource = mastersource
    sourcetechnik.DataMember = "rel_techniker_ID"

    'Dim detailsource As New BindingSource
    sourceverkauf.DataSource = mastersource
    sourceverkauf.DataMember = "rel_verkauf_ID"

    'Dim detailsource As New BindingSource
    sourcerechte.DataSource = mastersource
    sourcerechte.DataMember = "rel_rechte_ID"

    cbo_Firma.DataSource = sqlds.Tables.Item("db_firma")
    cbo_Firma.DisplayMember = "hfibu_nr"
    cbo_Firma.ValueMember = "firma_ID"

    cbo_Position.DataSource = sqlds.Tables.Item("db_intabt")
    cbo_Position.DisplayMember = "beschreibung"
    cbo_Position.ValueMember = "intabt_ID"

    mastersource.AddNew()
    sourcerechte.AddNew()

    btn_frmbn_Speichern.Enabled = True

    txb_frmbn_Benutzername.DataBindings.Add("TEXT", detailsource, "username")
    txb_frmbn_Passwort.DataBindings.Add("TEXT", detailsource, "passwort")
    txb_frmbn_Fax.DataBindings.Add("TEXT", mastersource, "fax")
    txb_frmbn_Geburtstag.DataBindings.Add("TEXT", mastersource, "geburtstag")
    txb_frmbn_Handy.DataBindings.Add("TEXT", mastersource, "handy")
    txb_frmbn_Initialen.DataBindings.Add("TEXT", mastersource, "initialen")
    txb_frmbn_Mail.DataBindings.Add("TEXT", mastersource, "email")
    txb_frmbn_Nachname.DataBindings.Add("TEXT", mastersource, "name")
    txb_frmbn_Personal_ID.DataBindings.Add("TEXT", mastersource, "personal_ID")
    txb_frmbn_Telefon.DataBindings.Add("TEXT", mastersource, "telefon")
    txb_frmbn_Vorname.DataBindings.Add("TEXT", mastersource, "vorname")
    txb_frmbn_User_ID.DataBindings.Add("TEXT", detailsource, "user_ID")

    ' cbo_Firma.DataBindings.Add("SELECTEDVALUE", sourcefirma, "firma_ID")
    'cbo_Position.DataBindings.Add("SELECTEDVALUE", sourceintabt, "abt_ID")


    End Sub
    [/highlight]

    Es soll folgendes passieren.
    In meinem Bindingnavigator klicke ich auf neu. Obiger Code wird ausgeführt.
    Ich erstelle eine Dataset mit allen beteiligten Tabellen, erstelle die Relationen,
    und verschiedene Bindingsource.

    [IMG]Bild Hosted bei ImagesUp.de[/IMG]

    Wenn die Checkbox Benutzer angeklickt ist, kann ich Benutzername und Passwort eingeben. Firma und Position sind noch nicht richtig gebunden.(noch keine Ahnung wie ich das machen soll).Die personal_ID wird automatisch vergeben. Ich fülle also alle Textboxen und klicke auf speichern


    [highlight=vbnet]

    Dim clonesqlds As DataSet
    clonesqlds = New DataSet

    Try

    mastersource.EndEdit()
    detailsource.EndEdit()


    If sqlds.HasChanges() Then
    clonesqlds = sqlds.GetChanges()

    sqldapersonal.Update(clonesqlds, "db_personal")
    sqldarechte.Update(clonesqlds, "db_rechte")
    sqldauser.Update(clonesqlds, "db_user")
    End if
    [/highlight]

    Der neue Mitarbeiter wird zwar in der tbl_personalinfo angelegt, aber er wird nicht in der tbl_user eingetragen. Woran kann das liegen.
    Das waren ja erst zwei Tabelln, wie soll das werden wenn ich alle Updaten will.

    Ich hoffe Ihr versteht mich, wenn nicht einfach fragen. Bin für jede Antwort dankbar.

    Danke
    Frank

  • #2
    Da würde ich dir im Moment einfach mal raten das zu debuggen. Du hast den gesamten Code und wir können sicher aus dem gezeigten Code den Fehler nicht ermittteln außer wenn hier jemand Lust auf Fleißarbeit hat und deinen Code nach einem Copy&Paste Fehler absuchen möchte.

    Kommt bei der Codestelle mit dem update der tbl_user Tabelle denn ein geänderter Datensatz an(hast du das debuggt)? Hast du das Databinding geprüft(durch debugging)? Wenn nein hat der CommandBuilder denn ein gültiges Comand erzeugt(hast du das debuggt)? Senden deine Dataadapter.Update Befehle den ein SQL an den Server und wenn ja wie sieht das aus(hast du das ... wieder mal .... debugged)? Hast du auf dem SQL Server mal angesehen was da an SQL ankommt?

    Comment

    Working...
    X