Datenaktualisierung in MDB aus dBASE

  • VB.NET

Es gibt 91 Antworten in diesem Thema. Der letzte Beitrag () ist von markusbreitenstein.

    na, dann kannst du im Dataset-Designer die fehlenden Relationen ja selbst einrichten.

    Schlüsselspalten sind in deim Dataset offsichtlich als Name(nsbestandteil) "code" erkenntlich.

    gugge dazu vier Views-Videos

    (Übrigens für Screenshots kannste Greenshot-Freeware nehmen - man muss ja nicht immer den ganzen Bildschirm knipsen.)

    ErfinderDesRades schrieb:

    ja - und da sieht man auch andere Sachen dran.
    ZB haben keine Datensätze keine Primärschlüssel, und es gibt keine Relationen.
    So kann man eiglich keine DV aufziehen.
    Sind denn in der DB Primärschlüssel und Relationen angelegt?



    Aber zum konkreten Problem: Du willst Werte vieler untergeordneter Datensätze in eine DGV-Zelle stopfen.
    Das kann man machen mit einer ungebundenen Spalte, wenn man dann das DGV_CellFormatting-Event bearbeitet.
    Aber zunächstmal die Datarelations richtig einrichten, sonst wird auch das Generieren der gewünschten ZellWerte ziemlicher Schmuddel-Code.


    Bezüglich der Datensätze ist es so, das alle Daten in einer Tabelle stehen.
    Nur halt im Moment als einzelne Datensätze...
    Für das vorgehen mit dem DGV-CellFormating-Event , gibt es da anschauungsmaterial ?
    Am lernen...

    markusbreitenstein schrieb:

    Bezüglich der Datensätze ist es so, das alle Daten in einer Tabelle stehen.
    Das stimmt ja nicht.
    Ich sehe doch in deim Screenshot 3 Tabellen.
    Und dein Plan, viel abhängige Werte in eine Zelle zu stopfen ergibt ja ebenfalls nur Sinn, wenn die Werte, die da gestopft werden sollen, aus einer anderen Tabelle kommen.
    Und zwischen diesen Tabellen muss eine Relation bestehen.

    Vorher brauchst du auch kein Anschauungsmaterial (was ich übrigens auch nicht hab).
    Ich hab den Eindruck, Sinn und Zweck von Relationen, bzw. DataRelations sind dir garnet klar.
    Da würde ich empfehlen, du lernst erst die diesbezüglichen Grundlagen

    Dazu hätte ich auch was...
    Die Relations sind, wenn ich richtig gelesen habe, das selbe wie Beziehungen. die 3 Tabellen die du siehst, sind 3 SQL- Abfragen, welche die Beziehungen jeweils intern gelöst haben.

    Die Daten, die ich verarbeiten will, sind jedoch in einer Tabelle (dbf). das problem ist nur, das ich die Spalte "APL" gerne in einer Zelle zusammenfassen würde, da das ganze sonst zu lange und unübersichtlich wird..

    eigentlich sowas ähnliches wie transponieren im excel... aber kein Plan ob das hier auch geht...
    Am lernen...

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

    Gut - stimmt - Relationen sind der abstrakte Begriff für was in Access Beziehungen genannt wird, im Dataset "DataRelation", in EF-Edmx-Dateien "Assoziation", und gibt sicher noch paar mehr Namen des Kindes ;).

    Aber wenn dein Dataset nur Query-Ergebnisse enthält, wo die Relation bereits aufgelöst ist, dann kann man die Relationen nicht mehr nutzen, um sie den Anforderungen entsprechend darzustellen.
    ZB drei der 4 Views in vier Views-Videos präsentieren Relationen: JoiningView, ParentChildView, m:n - View.
    Deine Anforderung, der "StopfeChildsInEineZelle"-View ist eine Abart des ParentChild-Views.

    Hast du die Möglichkeit, die Tabellen der Db auch jede für sich abzufragen, und kannst du dir daraus ein typDataset mit DataRelations generieren lassen (oder zur Not entsprechend nachbessern)?
    Wenn ja - gibts nochmal ein Screenshot?
    das mit den n:m beziehungen frisst er leider nicht, habe ich am Anfang versucht, aber geht beim Visual FoxPro treiber nicht.. leider...

    Werde die Videos am Abend nochmal ansehen, vielleicht komme ich denn auf die Lösung ;) danke schonmal..

    Das mit der ParentChild klingt interessant, muss ich genauer studieren..
    Am lernen...
    wer frisst nix mit m:n-Beziehungen?

    ich bin hin-hergerissen: mal denke ich, du weißt nicht, was Relationen sind, mal denke ich "prima, das Thema gebont", aber nun wieder nicht, zumindest was m:n angeht ist mir deine Aussage verdächtig, weil in meiner Welt gibts bei m:n nix zu fressen.
    m:n ist nur ein (sehr gängiger) Spezialfall, 1:n-Relationen anzuordnen, und m:n-Fähigkeit ist die besondere Stärke von relationalen Datenmodellen gegenüber hierarchischen.

    Das habich jetzt extra so gestelzt formuliert, um zu checken, ob dir das relationale Grundprinzip hinreichend bekannt ist, ansonsten empfehle ich nämlich nachzulesen, etwa in codeproject.com/Articles/1030969/Relational-Datamodel versuche ich das zu entwickeln.
    Das Ptinzip der n:m oder 1:n kenne ich ja aus access. wenn ich das hier machen will, sprich alle datensätze aus 1 und nur datensätze aus 2 wo feld x identisch ist, sagt er, das der Visual FoxPro treiber dies nicht zulässt...
    Am lernen...
    offsichtlich verstehst du unter m:n was anderes als ich.
    Was du darunter verstehst, versteh ich aber nicht - "wenn ich das hier machen will, sprich alle datensätze aus 1 und nur datensätze aus 2 wo feld x identisch ist, sagt er, das der Visual FoxPro treiber dies nicht zulässt..." - also das kann ich garnet einordnen, was du eiglich damit sagen willst.

    Daher empfehle ich sehr das verlinkte Tutorial, dass wir begrifflich auf einen gemeinsamen Nenner kommen.

    Edit:
    Nochmal drüber nachgedacht - Dein "wenn ich das hier machen will, sprich alle datensätze aus 1 und nur datensätze aus 2 wo feld x identisch ist, sagt er, das der Visual FoxPro treiber dies nicht zulässt..." ist keine Erklärung, was eine Relation ist (schon garnet was eine m:n), sondern klingt nach einer Vorgehensweise, wie man gewöhnlich eine 1:n-Relation mittels Sql auflöst (Inner-Join-Statement).
    Aber das ist genau, was du nicht machen sollst.
    Keinesfalls bereits beim Datenabruf die Relation auflösen!
    Stattdessen beide Tabellen getrennt laden!
    Nur dann hast du im Dataset 2 Tabellen, zwischen denen eine Relation besteht.
    Und nur dann kann man einen ParentChildView umsetzen.

    Also 2 Vorschläge:
    1. lies und versteh das verlinkte Tut - dass wir dieselben Begriffe verwenden
    2. Guck dir ParentChildView auf 4-Views an, und sag mir, was du davon hälst. Wäre das eine Alternative zu deim "StopfeChildInParentCell"-View (was ja auch ein ParentChildView ist)?

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

    so, hier mal n screen der ganzen DBF-Tabellem, die zur Verwendung kommen, mit den Schlüsseln und den Verbindungen. Die Tabellen sind alle unberührt.

    ein Problem gibt es bei der Verbindung von ​fertig_k_fertig_p. Die Schlüsselspalten sind nicht identisch. das heisst folgendes... ​fertig_K-​fer_code & stufe wären identisch mit ​fertig_p-​links(code,48)
    wenn ich bei der Tabelle den SQL, der die Tabelle abholt, entsprechend ändere, funktioniert dann die relation noch ?

    Bitte um Kommentar, ob das denn richtig umgesetzt ist...
    Bilder
    • datagrid neo.JPG

      197,21 kB, 1.529×917, 130 mal angesehen
    Am lernen...
    Soll wohl richtig sein - die DB ist doch schon lange in Betrieb, oder verstund ich das falsch?

    Kannst du das Problem nochmal verständlich formulieren?

    markusbreitenstein schrieb:

    Die Schlüsselspalten sind nicht identisch. das heisst folgendes... ​fertig_K-​fer_code & stufe wären identisch mit ​fertig_p-​links(code,48)
    wenn ich bei der Tabelle den SQL, der die Tabelle abholt, entsprechend ändere, funktioniert dann die relation noch ?
    Das ist ein ganz unerklärliches Durcheinander.

    Also wenn du die Relation fertig_k_fertig_p als ParentChildView (meinetwegen "gestopft") darstellen willst, dann musste halt diese beiden Tabellen abrufen. Mit Sql ändern, und ob relation noch funktioniert - wie gesagt - das ist wirr.

    Einfach diese beiden DataTables befüllen, dann kann man sie auch darstellen.
    Hallo

    erstmal die Sache mit dem Video.. viel Information für kleines Gehirn... wird noch n paarmal angesehen, dann passt das. Aber Kompliment für die Arbeit, ist toll gemacht und sehr verständlich.

    Nun zum Problem:

    Wert von CODE ist in der Realität folgender: 16020002001 und wurde von der ERP-Software generiert.Dabei sind 2 Stellen das Jahr, 2 Stellen die Kalenderwoche, 4 Stellen fortlaufende Nummer und 3 Stellen die Nummer der Fertigung. Kann ein Einzelteil oder eine Baugruppe sein.
    Wert von STUFE: /001/003/004 das ist dann das Einzelteil zu der Baugruppe.
    Beides aus der Tabelle fertig_k

    In der Tabelle fertig_p gibt es das Feld 16020002001/001/003/004________________1 wobei die letzte Zahl der Arbeitsvorgang ist.

    Es gibt vom fertig_p mehrere Einträge zu einem aus fertig_k

    nun würde ich den SQL der Tabelle so ändern, das ich in fertig_k eine Spalte einfüge, die den Wert 16020002001/001/003/004 enthält und
    in der Tabelle fertig_p das selbe tun, und dann die Relation setzen, da die Werte ja sonst nicht identisch sind..

    Hoffe, ist verständlich
    Am lernen...
    So, habe das nun so erledigt, wie es im Video beschrieben ist, mit dem Container und alle dem...

    Tabelle links wird angezeigt, aber Tabelle rechts bleibt leer.....

    Und muss ich eine Sub einfügen um die Daten zu aktualisieren ?
    Am lernen...
    was in code oder stufe steht ist für die Relation ganz egal.
    Wichtig ist, dass fertig_p eine Fremdschlüsselspalte hat - wie lautet deren Name?

    Und nach wie vor weiß ich nicht, wo du welchen SQL welcher Tabelle ändern willst. Und auch keine Ahnung wozu eine Spalte wo einfügen.

    Sondern, wenn die Relation da ist - und ich seh sie ja - ich kann nur den Namen des ForeignKeys nicht erkennen - dann kannst du beide Tabellen füllen, und dann kannst du auch einen ParentChildView machen.

    Wenn bei dir Tabelle rechts leer bleibt, haste was falsch gemacht. Vlt. hast du die fertig_p-Tabelle garnicht befüllt?
    Die müsste laut Code befüllt werden, aber tut sich nix...

    Den SQL den ich konfigurieren kann, wie die Tabelle gelesen wird...

    Spalten einfügen, weil ja eine Relation nur Klappt, wenn in beiden Feldern ein identischer Wert ist, oder hab ich was falsch verstanden?
    Am lernen...
    dann kann ich keinen ParentChild erstellen...

    Oder aber, ich erstelle beim Programmstart eine Tabelle, in der die ​CODE Spalte der fertig_p zerlegt und abgespeichert wird, damit ich die dazwischen hängen kann..
    wenn du willst, kann ich dir nen screen der beiden Tabellen machen, vielleicht siehst dann, was ich meine....
    Am lernen...

    markusbreitenstein schrieb:

    dann kann ich keinen ParentChild erstellen...
    ich w+sste grad nicht, warum nicht, aber wenn dem so ist, dann kannstes eben nicht :huh:

    Das mit dem Spalten zerlegen und abspeichern - wie gesagt - ich hab kein Plan, was das bezwecken soll - jo, kann schon sein, dass mir Licht aufgeht, wenn Bildchen.
    Morgen Erfinder

    weil die Feldwerte nicht identisch sind, deshalb... siehe Bilder. überall sonst in der DB ist das kein Problem, da haben wir direkte Fremdschlüssel, nur bei der wichtigsten eben nicht....

    Edit:

    umgedacht, programmiert und klappt. die Lösung war folgende:

    ]Ich habe in fertig_k alles gelassen wie es ist, habe aber in ​fertig_p zwei neue spalten gemacht, die eine mit dem ​fer_code, dem linken teil aus ​CODE und eine mit ​stufe, dem mittleren teil von ​CODE. dannach habe ich die relation bearbeitet und beide Felder als Verknüpfung angegeben.... und Heureka...

    Danke für deine Tipps...

    Das letzte ist nun ein Layout-Problem... Ich habe nun die Spalten zum entsprechenden Datensatz untereinander, schön wäre jedoch, ich hätte sie nebeneinander... wenn gewünscht, kann ich wieder nen screen machen
    Bilder
    • fertig_k.JPG

      204,69 kB, 1.393×493, 129 mal angesehen
    • fertig_p.JPG

      208,37 kB, 1.279×641, 136 mal angesehen
    Am lernen...

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

    Wie kann es nun aber sein, dass in deim Dataset-Screenshot eine DataRelation eingetragen ist?

    Das geht doch überhaupt nicht, wenn die Fremdschlüssel garnicht mit den Primkeys übereinstimmen.

    naja - bei euch eben offensichtlich doch.
    Und - :thumbsup: - jetzt verstehe ich tatsächlich, was du mit "den SQL ändern" meinst.
    Ja, ändere es so, dass im Dataset zumindest die Fremdschlüssel gültig sind.
    Das kannste dann zwar nicht mehr rückspeichern, aber das ist ja eh nicht beabsichtigt, wenn ich recht verstund.

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