Bräuchte eure Meinung / Ideen (DB Abfrage)

  • VB.NET
  • .NET (FX) 4.0

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Bräuchte eure Meinung / Ideen (DB Abfrage)

    Hallo Leute,

    ich wollte mal fragen wie ihr das lösen würdet:

    Ich frage Daten ab (aus einem ERP System) und zeige diese in einem DataGridView dem Benutzer an, nachdem der Benutzer gewisse Elemente ausgewählt hat, werden diese ausgedruckt.
    Jetzt kommt das 'Problem' bzw. die Aufgabe;
    Wie kann ich gewährleisten, dass die Elemente nicht mehr aufgelistet werden, bis sie im System 'ausgebucht' worden sind?

    Über den RAM würde ich das ungerne Regeln. Sobald das programm geschlossen wird sind die Informationen ja weg.
    Meine Idee war, dass ich die Informationen (IDs) in einer Datei auslagere und beim befüllen des Datagridviews diese gegenprüfe.
    Wäre wohl auch die einzige Möglichkeit, oder?

    Für Ideen und Ratschläge bin ich wie immer dankbar. :)

    Grüße,
    Drahuverar
    Option Strict On!
    Hallo @Drahuverar,

    leider ist deine Fragestellung etwaas verwirrend.

    So wie ich das (nach 20 mal durchlesen) versteh, willlst du dem User die Daten anzeigen. Der User kann sie dann bearbeiten und ausdrucken. Wenn ein Datensatz dann ausgedruckt ist, soll er erst wieder in deinem UI erscheinen, wenn er in deiner Datenquelle als ausgebucht martkiert ist. Ist das richtig so?

    Ich würde dir folgendes empfehlen:
    Im ersten Schritt speicherst du die IDs des ausgedruckten Datensatzes - nach dem Druck - in einer (generischen) Liste
    Im zweiten Schritt durchsuchst du das DGV und die Liste, gleichst die Einträge ab und wenn du im DGV einen Eintrag findest der auch in deiner List vorkommt, dann blendest du ihn aus.
    Als drittest musst du natürlich zyklisch deine Datenquelle abfragen, das lagerst du am besten in einen Task aus, der dir deine Datenquelle mit der Liste an IDs abfrägt und dir zu jeder ID einen Wert zurück liefert, der anzeigt, ob der Datensatz ausgebucht ist oder nicht (Ich persönlich würde hierbei zu einen Dictionary(Of Integer, Bool) raten, da man hier als Key die ID und als Value (Wert) sagen kann: "Ja, der Datensatz ist ausgebucht" oder "Nein, der Datensatz ist nicht ausgebucht")

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ich würde die ID's in eine zusätzliche Tabelle reinschreiben oder so... Mit Ram hast du recht. Ist nicht sicher. Oder eventuell kannst du eine Spalte für Status oder so was irgend wo speichern...

    Am schnellsten wäre ein DB Eintrag.
    Hey,

    ja. Tut mir leid, für mich ist die Sache klar, weswegen ich anscheinend ein paar Informationen ausgelassen habe. Sorry.

    Radinator schrieb:

    Ist das richtig so?

    Also, wenn dieser Datensatz ausgedruckt worden ist soll er nicht mehr in der UI auftauchen.
    Damit dieser Datensatz nicht mehr erscheint, müsste er also von dem Quellsystem ausgebucht werden, allerdings geschieht dieser Schritt erst im nachhinein. Um also keine Fehler entstehen zu lassen, wenn zum Beispiel eine weitere Person auf die Anwendung zugreift, möchte ich also die ausgedruckten Datensätze mit dem Quellsystem abgleichen, um so den Fehler, dass mehrmals ein Datensatz verarbeitet wird, vermeiden zu können.

    Deine Idee passt aber weiterhin :)
    Hätte es z.B. ohne Dictionary versucht, scheint mir aber eine elegante Lösung zu sein.

    Edit: @EugenIS
    Leider müsste ich da eine eigene Datenbank füllen/pflegen..Wäre aber wider rum sicherer, wenn mehrere es benutzen würden.

    Dann komme ich an einer eigenen Datenbank bzw. Tabelle nicht vorbei, nehme ich mal an. Im Grunde sollte nur ein Client die Anwendung nutzen, aber wie ich das kenne wird es später auf andere Arbeitsbereiche adaptiert.. Da wäre es wohl besser eine Datenbank anzulegen bzw. eine Tabelle.
    Da kommt aber die nächste Frage:
    Ich kann keine Abfrage auf zwei verschiedene Datenbanken machen, richtig?
    Das heißt ich muss stückchenweise abfragen. Zuerst meine DB dann die der 'Quelle'.

    Kann

    Grüße,
    Drahuverar
    Option Strict On!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Drahuverar“ ()

    Hallo @ErfinderDesRades,
    also momentan führe ich schon eine eigene Datenbank. Heißt, ich würde hierfür eine separate Tabelle anlegen, die ich aber so gestalten werde, das ich in Zukunft weitere Spalten hinzufügen kann, falls es zu weiteren "Auslagerungen" kommen sollte.

    Momentan schreibe ich ein Programm mit dem per Knopfdruck Etiketten gedruckt werden sollen. Nach Bearbeitung der Datensätze sollte(n) also die gedruckte(n) Position(en) nicht mehr aufgelistet werden. Da ich leider nicht in die Datenbank des ERP-Systems (Sicherheitsgründe) schreiben darf, muss ich die Informationen der gedruckten Aufträge auslagern. Wäre dies nicht der Fall könnte ich direkt die ERP-Datenbank updaten und alles wäre i.O. und ich müsste mir nicht die "Arbeit" machen. //Warum einfach, wenn es auch umständlich geht. :thumbsup:
    Option Strict On!
    Dafür brauchst du keine weitere Tabelle.
    Deine Tabelle - die mit den Druck-Aufträgen - braucht nur eine bool-Spalte "IstGedruckt", und wenn gedruckt ist, wird der Wert auf True gesetzt (wer hätte das gedacht?).
    In der Präsentation kannste zB einen Filter machen, der diese Datensätze dann nicht mehr anzeigt.
    Ich würde das aber User-defined machen, also der User soll selbst bestimmen:
    1. will ich nur die noch ungedruckten sehen?
    2. nur die gedruckten?
    3. beide?
    4. keine?
    So wie ich das verstehe hat euer ERP System eine eigene Datenbank und diese zeigst du in deinem Programm an, hast aber keine Schreibrechte.
    Daher ist das sinnvollste eine eigene Tabelle anzulegen in der du den Druckstatus pflegst.
    Was für eine Datenbank verwendet das ERP System ? Die selbe wie ihr? Selber Datenbankserver?

    Ich kann keine Abfrage auf zwei verschiedene Datenbanken machen, richtig?


    Doch das geht. Aber die Gegebenheiten sind noch nicht ganz klar.
    Das ist meine Signatur und sie wird wunderbar sein!
    @ErfinderDesRades
    Ich glaube, da war ich doch nicht genau genug. Ich habe mal ein kleines Bildchen im Anhang, hoffe das ist ersichtlicher nun.

    Richtig, @Mono.
    Also auf "meinem Server" läuft 12.0.4100 (SQL Server 2014 SP1) und auf dem ERP 11.0.6020 (SQL Server 2012 SP3).
    Würde mich brennend interessieren, wie das gehen würde, auch wenn die Gegebenheit vllt. nicht gegeben ist, in diesem Fall!
    Bilder
    • Beispiel.png

      150,21 kB, 1.128×716, 139 mal angesehen
    Option Strict On!
    Nein, ist ein und die selbe Datenbank, beim ausführen der Anwendung beziehe ich die Daten aus beiden (so soll es sein, behaupte ich mal momentan). Nach dem drücken auf die CheckBox werden die Daten genommen und verarbeitet. Nun, vor dem Drucken, muss ich meine Datenbank wieder füllen um das DataGridView mit den abgeglichenen Werten neu zu befüllen.
    (mal so nebenbei, kennt ihr ein gutes Programm um Diagramme zu erstellen? Habe das in Powerpoint eben "schnell" gemacht..)

    ​Also paar Bildle hinbatschen, Pfeile dazwischen machen - das erklärt nicht automatisch irgendetwas.

    Dessen bin ich mir bewusst, 15 Minuten reichen nicht aus, mehr Zeit hatte ich allerdings gerade nicht.. Für genaueres müsste ich heute Abend nochmal ran.
    Option Strict On!

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

    Mir wird immer klarer, dass mir schon längst alles klar ist - seit post#8.
    Willst du dich nicht mal inhaltlich mit post#8 befassen?

    Da steht, du brauchst keine weiteren Tabellen. Einzig die Tabelle, die du hofflich schon hast, die braucht eine weitere Spalte.
    Alles annere kann man im Client abhandeln, etwa mit einem Filter.
    Ich würde jetzt behaupten er bekommt die Daten direkt aus dem ERP und nicht erst über seine DB. Warum sollte er auch die Daten redundant halten?

    Also wäre dann kein einfaches Hinzufügen einer Spalte möglich.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Hallo,
    also meine Anwendung hatte bisher keine Tabelle. Diese werde ich nun erstellen.
    Sorry, wenn ich allgemeine Verwirrung angestiftet habe. Danke euch trotzdem (allen)!

    Ursprünglich habe ich den Thread mit dem Hintergedanken geöffnet, dass die Anwendung nur auf einem Client läuft, weswegen ich nicht unbedingt eine Datenbank benötigt hätte. Allerdings ist mir nach dem Post von @EugenIS klar geworden, dass mehrere Clients abfragen könnten.
    Option Strict On!
    Du kannst an einem SQL Server einen weiteren SQL Server als verbundenen Server hinzufügen. (Linked Server)
    und dann zB eine View erstellen und diese von deiner Anwendung verwenden
    Das ist meine Signatur und sie wird wunderbar sein!