| |
ADO.NET / DatenbankenUpdate 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 | |
Update von m:n Tabellen | 2.420 | Bismosa | 11.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 |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|