Frage zur Herangehensweise zwecks Daten von alter in neue DB "umspeichern"

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Noyne.

    Frage zur Herangehensweise zwecks Daten von alter in neue DB "umspeichern"

    Hallo Leute ...
    Ich bin's mal wieder ...

    Ich würde euch gerne mal fragen wollen, wie ihr eine Problematik lösen würdet, die mir gestern über den Weg gelaufen ist.
    Und zwar ist es so, dass ich ja ein Programm optimiere, mit dem einige Apothekenmitarbeiter arbeiten.
    Deren Access-Datenbank ist eine veraltete Version meiner jetzigen - es fehlen einige meiner Tabellen, die ein oder andere alte Tabelle existiert in meiner neuen DB nicht mehr.

    Gefordert wird aber, dass mein Programm doch bitte die Daten der alten DB ausliest und direkt in die neue DB einsortiert, damit den Apothekenleuten Arbeit abgenommen wird und die die 3000 (oder mehr) Medikamente eben NICHT noch einmal erstellen müssen.
    Da ich in meinem Programm mit einem DataSet arbeite und die Daten immer mal wieder in die DB zurückschreibe, war meine Idee, für die alte DB ebenfalls ein DataSet generieren zu lassen und deren Daten beim ersten Start meines Programms auszulesen, durch die einzelnen Tabellen zu nudeln und die passend in mein DataSet zu schieben (soweit möglich) und anschließend in die neue DB zu speichern.

    Würdet ihr da anders herangehen?! Was sind eure Ideen?!
    Das würde mich mal brennend interessieren ;)

    GLG, eure Noyne
    Your computer is running... You better go chase it! :P :D
    jo, das ist der Ansatz: 2 verschiedene typDatasetse. Das eine Befüllen und dann in geeigneter Weise durchnudeln, und Datensätze in dem anderen generieren.

    Vielleicht sind bei großer Ähnlichkeit bestimmter Tabellen Abkürzungen möglich, aber das sind dann auch immer Fußangeln. Mit obigem Konzept jdfs. lässt sich alles erschlagen.
    Hi,

    ich würde das eher als eigenes "Script" machen und nicht in dein eigentliches Programm implementieren. Wäre ja nur Code-Müll, der nach dem ersten Start nicht mehr gebraucht werden würde.

    Das Script, welches die ganzen Daten von der alten DB in die neue DB einsortiert wird dann in deren Umgebung 1x gestartet und ab diesem Zeitpunkt sollten sie dann auch dein neues Programm nutzen, sodass nicht noch Daten in die alte DB laufen, die du in deiner neuen DB dann nicht hast.

    Kleines Update ...

    Hey Leute ...

    Ich hab' mich die letzten Tage intensiv an das Umbasteln und Umspeichern meiner Daten bemüht und es sieht auch schu mal ganz gut aus.
    Ich hab' aber eine wichtige Frage:

    Folgender Code (bspw.):

    VB.NET-Quellcode

    1. If Not adosRowAlt.IsADOS_MorgenNull Then adosMo = adosRowAlt.ADOS_Morgen Else adosMo = Nothing
    adosMo soll den Wert beinhalten, der in den neuen Datensatz geschrieben wird, das Problem ist aber, dass "NOTHING" nicht gleich "NULL" ist ... Nothing schreibt mir den Default-Wert des Feldes in den Datensatz.
    Ziel ist aber wirklich, dass das Feld im neuen auch NULL ist, wenn es im alten NULL ist.

    Gibt es eine Möglichkeit, beim Adden des neuen Datensatzes in das Feld statt Nothing Null reinzuschreiben?!
    Your computer is running... You better go chase it! :P :D
    Doch, hab' ich ...
    Aber was nützt mir SetADOS_MorgenNull() bei der ALTEN Row ...
    Ich brauch sowas für die neue Row, wenn ich die adde ...
    Das Set...Null hab' ich schu gesehen, aber entweder steht für die neue ein Wert drin oder es ist Null ...
    Ich kann nicht für 5 verschiedene Felder, 5 If-Abfragen programmieren, jeweils mit Else ... Das ... Das nimmt dann echt böse Auswüchse an ...
    Your computer is running... You better go chase it! :P :D

    Noyne schrieb:

    Ich brauch sowas für die neue Row, wenn ich die adde ...
    Das könnte ein Anwendungsfall für die andere Add...Row-Überladung sein.
    Also mit Table.New...Row erzeugst du eine neue Row.
    Dann setzt du allerlei Werte, u.a. Set...Null
    Und dann addeste diese neue Row und feddich.
    bisserl umständlich, aber besondere Umstände erfordern besondere Umständlichkeiten ;) .
    Ich wollt' grad noch ein Edit zu oben schreiben, da hab' ich deinen Beitrag gesehen ;) @WhitePage

    Auszugsweise folgender Code:

    VB.NET-Quellcode

    1. ...
    2. If Not adosRowAlt.IsADOS_MorgenNull Then adosMo = adosRowAlt.ADOS_Morgen Else adosMo = Nothing
    3. If Not adosRowAlt.IsADOS_MittagNull Then adosMi = adosRowAlt.ADOS_Mittag Else adosMi = Nothing
    4. If Not adosRowAlt.IsADOS_AbendNull Then adosAb = adosRowAlt.ADOS_Abend Else adosAb = Nothing
    5. If Not adosRowAlt.IsADOS_NachtNull Then adosNa = adosRowAlt.ADOS_Nacht Else adosNa = Nothing
    6. ANABOXDS.AutoDosierung.AddAutoDosierungRow(evoRowNeu, evoRowAlt.EVO_verordnet, verordArztRow, abgesDat, abgesArztRow, rhyRowNeu, adosRowAlt.ADOS_Gueltig, adosRowAlt.ADOS_GueltigZeit,
    7. False, adosRowAlt.ADOS_Bedarf, True, adosMo, adosMi, adosAb, adosNa, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing,
    8. Nothing, Nothing, Nothing, Nothing)
    Nicht über die massig "Nothing"-Felder wundern ... Die sollten eiiiigentlich auch Null werden, aber ich bin einfach zu blöd :S

    @ErfinderDesRades
    Das mit der anderen Überladung ginge wohl, aber die Felder könnten ja Null sein, sie müssen es nicht ... Das hieße für jedes mögliche Null-Feld eine neue mögliche Row?!
    Your computer is running... You better go chase it! :P :D
    Wenn ich deinem ( @ErfinderDesRades ) Denkansatz folgen würde, müsste ich dann für jede dieser Möglichkeiten eine neue neue Row anlegen oder ginge das auch in einem Rutsch?!

    VB.NET-Quellcode

    1. If bewRow.IsBEW_AnredeNull Then bewAnr = Nothing Else bewAnr = bewRow.BEW_Anrede
    2. If bewRow.IsBEW_NameNull Then bewName = Nothing Else bewName = bewRow.BEW_Name
    3. ...
    Wie erwähnt, die gesamten Felder werden dann zu einer neuen Row zusammengefasst ...

    Ich würde dann halt ... ah, wait, ich glaub, ich weiß, was du meinst 8o

    Meinst du sowas hier?!

    VB.NET-Quellcode

    1. Dim newBewRow As ANABOXDS.BewohnerRow
    2. If bewRow.IsBEW_AnredeNull Then newBewRow.SetBEW_AnredeNull() Else newBewRow.BEW_Anrede = bewRow.BEW_Anrede
    und am Ende halt ANABOXDS.Bewohner.AddBewohnerRow(newBewRow), gelle?!
    Your computer is running... You better go chase it! :P :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Noyne“ ()

    Dein Vorschlag, @ErfinderDesRades, klappt aber nur, wenn man die neue Row nicht braucht, ne?!

    Ich brauch' die neue Row aber als MUSS ich die New-Function nehmen ...

    EDIT: Korrigiere mich!!! Wenn ich DataSet.AddRow(newRow) mache und dann speichere, ist newRow die NEUE Row, die ich mit der Function kriegen würde ...
    Super Sach'!!! :thumbsup:
    Your computer is running... You better go chase it! :P :D
    nein, was ich in post#8 meinte sind die beiden Methoden

    VB.NET-Quellcode

    1. ANABOXDS.AutoDosierung.NewAutoDosierungRow As AutoDosierungRow
    2. 'sowie
    3. ANABOXDS.AutoDosierung.AddAutoDosierungRow(rw As AutoDosierungRow)
    wie gesagt, die andere Add...Row() - Überladung.
    Vlt. sollteste dir dein typDataset nochmal im ObjectBrowser angucken - ein paar seltener verwendete generierte Member scheinen dir noch nicht geläufig zu sein.

    ErfinderDesRades schrieb:

    ANABOXDS.AutoDosierung.AddAutoDosierungRow(rw As AutoDosierungRow)
    Genau die mein' ich ja auch ... Bin grad am Umbauen ... Ich stand nur laaaange aufm Schlauch, aber ich glaub', ich hab's jetzt begriffen ...

    Ich mach' jetzt Folgendes:

    VB.NET-Quellcode

    1. adosRowNeu = ANABOXDS.AutoDosierung.NewAutoDosierung
    2. If adosRowAlt.IsADOS_MorgenNull Then adosRowNeu.SetADOS_MorgenNull() Else adosRowNeu.ADOS_Morgen = adosRowAlt.ADOS_Morgen
    3. ' Für alle Felder fortführen ...
    4. ANABOXDS.AutoDosierung.AddAutoDosierungRow(adosRowNeu)
    und es funktioniert suuuper ;)
    Your computer is running... You better go chase it! :P :D