DataAdpater + DataSet + ForeignKey

13/09/2008 - 18:44 von Harald Bacik | Report spam
Hallo NG

Ich progge in VB.NET 2008 Sp1 + mySQL
In mySQL habe ich FK's erstellt um die Datenintegritàt zu verbessern. -
Seitdem habe ich ein paar Probleme...
Folgendes vereinfachtes Szenario: Ich habe eine Auftragstabelle & eine
Auftragsdetail Tabelle. - Diese sind per FK (Auftragsdetail.ID->Auftrag.ID)
verbunden.
Mein Programm schaut so aus, dass ich ein Grid zum Darstellen benutze
(Janusys). Das ganze natürlich hierachisch.

Wenn in meinem Programm der Auftrag aufgerufen wird, werden die Daten
gefüllt. Dabei überprüfe ich, ob der Auftrag noch offen ist, oder schon
fakturiert. - Falls alle Auftràge fakturiert sind, erstelle ich einen neuen
Datensatz. (Im DataSet Designer habe ich dafür die AutoIncrement auf True
gesetzt -von der Auftragstabelle).
Wenn ich jetzt einen Datensatz des Auftragsdetails einfügen möchte, bekomme
ich die Fehlermeldung, dass die ID Spalte nicht NULL sein darf. - Gut, soweit
hört sich das auch sehr logisch an. ABER. - Wie kann ich den "Master"
Datensatz speichern (der steht nur im DataSet) - Dann die korrekte ID
herausfinden & diese dann dem "Child" Datensatz übergeben?
Der springende Punkt ist der, dass der "Master" Datensatz (also der
Datensatz, der mir angibt, ob der Auftrag fakturiert ist oder nicht) erst
dann gespeichert werden soll, wenn auch ein Artikel dazu eingegeben wurde.

Hoffe Ihr versteht mein Problem & könnt mir helfen - DANKE schon im Voraus
 

Lesen sie die antworten

#1 Peter Fleischer
13/09/2008 - 21:27 | Warnen spam
"Harald Bacik" schrieb im
Newsbeitrag news:

...
Hoffe Ihr versteht mein Problem & könnt mir helfen - DANKE schon im Voraus



Hi Harald,
ich hoffe, ich habe die Frage bzw. das zu lösende Problem richtig
verstanden.

Anstelle MySQL wàre ein richtiger Datenbankserver, der ein Zurücklsen
unsterstützt bestimmt besser, z.B. der kostenlose SQL Server 2005 oder 2008
in der Express Edition.

Du solltest folgendes beachten bei der Realisierung:

1. Im Client Autowerte sollten im Client nur negaitiv vergeben, um keine
Konflikte mit bereits vorhandenen Datensàtzen zu erhalten; dazu ist
AutoIncrementSeed und -Step auf -1 zu setzen;
2. beim Rückschrieben sollte sofort pro Datensatz der vom Datenbankserver
vergebene Autowert zurückgelesen werden; bei Datenbankservern, die das nicht
mit angehàngten Select machen können, sollte im OnRowUpdated das Rücklesen
ausgeführt werden und die verànderten Feldinhalte korrigiert/überschrieben
werden, damit der Inhalt im Client mit der physischen Datenbank
übereinstimmt; ohne diese Übereinstimmung kommt beim folgenden Update ein
Konkurrenzfehler; wenn im Client kein kaskadiertes Update eingestellt ist,
müssen zugelesene Autowerte auch in den Detail-(Child-)-Datensàtzen
aktualisiert werden;
3. beim Update sollte die folgende Reihenfolge eingehalten werden:

- Insert new Master-Datensàtze
- Insert new Child-Datensàtze
- Update new Master-Datensàtze
- Update new Child-Datensàtze
- Delete new Child-Datensàtze (kann entfallen, wenn kaskadierte
Löschweitergabe funktioniert)
- Delete new Master-Datensàtze


Viele Gruesse

Peter

Ähnliche fragen