vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Update von m:n Tabellen 
Autor: Bismosa
Datum: 11.02.15 14:55

Hallo,

ich verstehe es einfach nicht...daher muss ich jetzt nochmal fragen.
Ich hatte vor einiger Zeit schon einmal ähnliches gefragt...da ich es einfach nicht geschafft habe, habe ich damals vorerst aufgegeben und versuche es jetzt noch einmal.

Ich habe eine Access Datenbank zum testen mit 3 Tabellen.


Ein Auslesen/Anzeigen der Daten ist überhaupt kein Problem. Es gibt mehr als genug Beispiele online. Aber wie erstelle ich die Daten in der Datenbank? Dazu konnte ich bisher keine schlauen Antworten finden.

Ich habe mir ein kleines Testprogramm gebastelt. Wenn ich zunächst alle Daten einlese, bekomme ich Probleme mit der Performance. Meine spätere Access-Tabelle kann mehrere 100MB groß werden...und liegt nur auf einem Netzlaufwerk. Ein richtigen SQL-Server kann ich leider nicht nutzen.

Ich habe es jetzt mal so gelöst, dass ich zunächst nur einen Datensatz der jeweiligen Tabellen über einen eigenen OleDbDataAdapter einlese um das "Tabellenformat" zu bekommen.
Dann füge ich eine Person hinzu (bzw. frage zunächst ab, ob es diese Person bereits gibt indem ich alle Felder miteinander vergleiche) und füge diese Person dann hinzu.
Danach mache ich gleich die nächste Abfrage um die ID der neuen Person zu bekommen.

Im Nachgang füge ich testweise 5 Artikel manuell hinzu indem ich die "TblNamenArtikel" ausfülle und in die Datenbank speichere.
Try
  conn.Open()
 
  Dim daArtikel As New OleDbDataAdapter("select * FROM TblArtikel WHERE [ID] =" & _
    "1", conn)
  Dim daNamen As New OleDbDataAdapter("select * FROM TblNamen WHERE [ID] = 1", _
  conn)
  Dim daNamenArtikel As New OleDbDataAdapter("select TOP 1 * FROM" & _
  "TblNamenArtikel", conn)
 
  Dim ds As New DataSet
  daArtikel.Fill(ds, "TblArtikel")
  daNamen.Fill(ds, "TblNamen")
  daNamenArtikel.Fill(ds, "TblNamenArtikel")
 
  'Person hinzufügen
  Dim row As DataRow = ds.Tables("TblNamen").NewRow
  row("Vorname") = RndLetters()
  row("Nachname") = RndLetters()
  row("Telefon") = RndValue()
  ds.Tables("TblNamen").Rows.Add(row)
 
  'Person in DB eintragen wenn nicht vorhanden
  Dim command As New OleDbCommand("select ID FROM TblNamen WHERE (([Vorname] =" & _
    "'" & _
        row("Vorname") & "') AND ([Nachname] = '" & row("Nachname") & "') AND (" & _
        "[Telefon] = '" & row("Telefon") & "'))", conn)
  Dim ID As Integer = command.ExecuteScalar()
 
  If ID = 0 Then
      'Neuer Datensatz
      Dim CBNamen As New OleDbCommandBuilder(daNamen)
      daNamen.Update(ds.Tables("TblNamen"))
 
      ID = command.ExecuteScalar()
  Else
      'Datensatz bereits vorhadnen -> Nur aktualisieren
 
  End If
  'MsgBox(ID)
 
  'Artikel zum Namen hinzufügen
  For i As Integer = 1 To 5
      Dim rowNA As DataRow = ds.Tables("TblNamenArtikel").NewRow
      rowNA.Item("TblNamenID") = ID
      rowNA.Item("TblArtikelID") = i
      ds.Tables("TblNamenArtikel").Rows.Add(rowNA)
  Next
 
  'Speichern
  Dim CBNamenArtikel As New OleDbCommandBuilder(daNamenArtikel)
  daNamenArtikel.Update(ds.Tables("TblNamenArtikel"))
 
        Catch ex As Exception
 
        Finally
  conn.Close()
        End Try
Ist das der richtige Weg um die DB zu füllen?

Wie kann ich einen Datensatz updaten, wenn ich z.B. eine ganz neue Artikelliste habe? macht es da sinn erst den Datensatz komplett zu löschen und neu hinzuzufügen?

Bei meinem eigentlichen Vorhaben sehen die Tabellen etwas anders aus. Ich lese viele Formularfelder (650 Pro Dokument und habe derzeit ca. 500 Dokumente) aus Word-Dokumenten aus und möchte diese in die Datenbank bringen. Um nicht zu viele Redundante Daten zu bekommen möchte ich die einzelnen Formularfelder in eine Tabelle (wie hier die Artikel) speichern. Das würde aber bedeuten, das ich vor jedem einfügen eines Feldes prüfen muss ob der Datensatz bereits in der DB vorhanden ist? Macht es mehr Sinn, wenn ich das für jeden einzelnen Datensatz mache...oder kann ich im Vorfeld eine Datatable erzeugen, die ich mit einem Rutsch (ohne vorher die Datenbank komplett einzulesen) update?

Wie lösche ich einen Datensatz? Ich würde das jetzt so machen:
In der Access Datenbank habe ich die Löschweitergabe eingerichtet. D.h. wenn ich eine Person lösche, werden auch alle Zeilen aus der Tabelle "TblNamenArtikel" entfernt. Dann brauche ich nur noch eine Abfrage machen um auch nicht mehr benötigte Artikel zu entfernen? (ja...in meiner anderen Anwendung werden die Daten dann nicht mehr benötigt...)

Mache ich mir das vielleicht viel zu kompliziert?

Danke und Gruß
Bismosa
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Update von m:n Tabellen2.416Bismosa11.02.15 14:55

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel