Laden...

DataSet -> soll erst nach Buttonklick Aktualisieren?

Erstellt von Gogeta vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.898 Views
Thema geschlossen
G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren
DataSet -> soll erst nach Buttonklick Aktualisieren?

verwendetes Datenbanksystem: SQL2008

Hi @ all
ich weiß nicht ob dieses Thema hier oder in das Forum "Windows Forms" rein muss !?

So kommen wir zu meiner frage, Problemstellung.

Also ich habe ein DataSet mit zwei DataTables die Daten aus einer SQL-Datenbank beziehen.

Es möchte ich wenn dies Möglich ist, was ich aber glaube, aber nicht weiß wie ich vorgehen soll 😦

Beim Form start soll das DataSet mit den Datensätzen im DataGridView anzeigen(kein problem, schon gemeister), doch sobald ich auf ein "Button - Aktualisieren" klicke soll er kurz ein abgleich mit der Datenbank machen und sobald neue Datensätze verfügbar sind, diese (neuen Datensätze) im DataSet speicher(und im datagridview anzeigen) und wenn ich das Programm schließe sollen die zuletzt geladenen Datensätze im DataSet gespeichert werden und beim nächsten Form start sollen sie mit drinne sein.
Und sobald ich wieder auf "Aktualisieren" Klicke, soll das ganze schema von vorne gestartet werden.

Ich hoffe ihr versteht was ich erreichen will.
Also bis jetzt schaffe ich es ALLE datensätze anzuzeigen, doch wie schaffe ich es, dass das proggy merkt welche Datensätze neu sind ???

Würde mich über jegliche antworten freuen 😃

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo Gogeta

doch sobald ich auf ein "Button - Aktualisieren" klicke soll er kurz ein abgleich mit der Datenbank machen und sobald neue Datensätze verfügbar sind

Warscheinlich hast du ja eine Increment ID als PK. Neue Datensätze = alle die eine höhere ID haben, als jene die du bereits hast. (z.B).

und wenn ich das Programm schließe sollen die zuletzt geladenen Datensätze im DataSet gespeichert werden

Schau dir mal Serializing an.

Beste Grüsse

Diräkt

5.658 Beiträge seit 2006
vor 11 Jahren

und wenn ich das Programm schließe sollen die zuletzt geladenen Datensätze im DataSet gespeichert werden

Schau dir mal Serializing an.

Was spricht denn dagegen, die Daten direkt in der Datenbank zu speichern?

Christian

Weeks of programming can save you hours of planning

G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren

Was spricht denn dagegen, die Daten direkt in der Datenbank zu speichern?

weil die daten auf der Datenbank schon sind und sie werden dort immer aktualisiert,verändert gelöscht.

und mit dem button klick soll er ein abgleich machen und das in das DataSet speichern.

@Diräkt:
Du hast recht mit Increment ID als PK, doch es sind schon einige Datensätze in der Datenbank vorhanden die auch eine größere ID als meine bestehenden im DataSet haben, doch die weißen noch "Null-Wert" auf und die werden demnächst in die Datenbank geschrieben.

und nur mal am rande ich habe auf diese Datenbank nur Leserechte,keine Schreibe,lösch-Rechte 😦

Deswegen muss ich das so kompliziert machen.
Vorhandenes DataSet -> abgleich DB -> neue datensätze spechern(neues DS)
und immer so weiter...

habe mir gedacht mit einer update anweisung zu arbeiten, aber weiß nicht wie ich vorgen soll...?

5.658 Beiträge seit 2006
vor 11 Jahren

Hi Gogeta,

also kurz gesagt, du hast eine Datenbankanwendung, wo der Benutzer Datensätze anzeigen und neue Datensätze anlegen soll, aber du hast keine Möglichkeit, die neuen Datensätze in der DB zu speichern?

Christian

Weeks of programming can save you hours of planning

G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren

Hi MrSparkle,

ja es ist eine Datenbankanwendung, ich hole Daten und Konvertiere sie in CSV Datein um. In der Anwendung kann man keine Datensätze anlegen und ich habe keine Möglichkeit in die Datenbank, Datensätze anzulegen.

Es befinden sich schon Datensätze auf der DB doch sie beinhalten Null-Values, diese werden in den nächsten tagen von einen Mitarbeiter aufgefüllt, direkt in die Datenbank mittels SQL 2008, und meine Anwendung soll diese Datensätze anzeigen und Konvertieren können, was er schon kann.
Und bei "button-klick" soll kurz abgeglichen werden ob es neue Datnsätze gibt die es in der Dataset nicht gibt. Danach aktualisiert er die DS und in der DS befinden sich neue Datensätze.
Die DS soll sozusagen als eigenständige (Lokale)DB fungieren, bei jedem start soll er diese Dataset benutztund erst nach klick aktualisieren...

Hoffe hast mich nun verstanden 😃

Wenn ich das mit einer Select * From anweisung mache, sind jedesmal schon die neuen Datensätze drauf, das will ich aber nicht, er soll immer den letzten stand anzeigen und nur bei Aktualisierungsklick, Aktualisieren.

momentan lese ich mich auch in Serialization, doch ich weiß bis jetzt nicht wie mir das weiter helfen soll 😦

301 Beiträge seit 2009
vor 11 Jahren

Und was spricht gegen eine WHERE Klausel im Select Statement welche schon direkt Datensätze in der Abfrage rausfiltert die nicht angezeigt werden sollen weil sie noch nicht zur Anzeige bestimmt sind ?

EDIT : Achso du willst ja eigentlich nur erkennen ob es neue Datensätze sind. Ok überlege nochmal

Mir würde da erst mal nur folgendes einfallen.

Vor dem Aktualisieren alle ID's in einer lokalen List<int> sammeln.

Nach dem Abgleich eine weitere List<int> mit allen id's nach dem Abgleich erstellen. Dann über die Differenz erkennen welche Id's vorher noch nicht da waren.

Diese Variante setzt allerdings voraus, dass immer alle alten Daten geladen werden 😕

G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren

Hi KroaX,

ich habe zwei where klauseln, weil ich zwei DataTables(das eine datable besteht aus zwei tabellen, dass andere aus einer) in dem DataSet habe,
bei der einen where klausel halte ich fest welche datensätze relevant sind, bei dem zweiten datatable benutze ich die where-klausel um nur den notwendigen bereich zu bekommen(mit Like '7%%%%')

Bei dem einen DataTable sind schon zwei tabellen aus der Db mit einander verknüpft(mit einer innerjoin-anweisung, damit auch nur die Datensätze angezeigt werden die KEIN Null-Value haben)

und die beiden DataTable habe ich mittels LinQ to DataSet miteinander verknüpft(join), also momentan zeigt er auch nur datensätze an die eine passende gegenseite haben(keine null-values vorhanden).
jetzte möchte ich das, dass Dataset so bestehen bleibt, dass heißt auch wenn der mitarbeiter nächste woche was in die Datenbak schreibt, soll er in meiner Anwendung diesen Stand mir anzeigen(auch wenn sie veraltet ist)... und wenn ich auf Button klick soll das Dataset mit der DB abgeglichen werden und die neuen datensätze anzeigen und gleichzeitig in das Dataset speichern.

Edit: ich probier das mal mit dieser List<int>...

Edit: jetzt wo ich mal kurz überlege geht das garnicht ODER ???

dataGridView1.DataSource = join_wss_ap.ToList();

denn sobald ich LINQ to DataSet benutze, ist es ja keine seperate DS mehr Oder ?

Hinweis von herbivore vor 11 Jahren

Threads zusammengefügt

Der Titel des neuen Threads ist eindeutig weiterhin Data-Tech. Und laut Titel des alten geht es eh schon um Buttonclicks, mal abgesehen davon, dass es (fast) egal ist, ob eine Aktion im Button-Click ausgelöst wird oder anderswo. Also kein Grund das nach GUI-Tech zu verlagern => zusammengefügt.

G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren
DataSet als eigene Datenbank verwenden?

Hallo,

ich wollte mal fragen ob die ein DataSet als eigenständige Dtanebank benutzen kann?

Ich habe ein Query (Linq to DataSet) worin aus einem DataSet Datensätze mit einander gejoint und danach im datagridview angezeigt werden, nun wollte ich wissen ob ich diese Query(oder die ensprechende Datatable) immer im datagridview anzeigen lassen kann und nach button click soll die query(datatable) mit dem dataset abgeglichen werden(da das dataset ständig mit der db kommuniziert).

ist so etwas möglich?

habe unter Datentechnologie, ein Thema erstellt ("DataSet -> soll erst nach Buttonklick Aktualisieren? ") doch da wurde mr klar, dass ich das nicht machen kann da die Query als seperate anweisung fungiert, so dachte ich mir das ich vielleicht, das query per Button-Klick aktualisieren lassen kann?

Ich freue mich auf jegliche hilfe...

301 Beiträge seit 2009
vor 11 Jahren

Ich verstehe ehrlich gesagt deine Anliegen nicht so ganz. Du wirfst mit sehr vielen Begriffen um dich, die du nicht ganz zu verstehen scheinst.

Dennoch versuche ich mal auf deine erste Frage einzugehen.

Ein Dataset kann nicht als Datenbank dienen, da sie die Daten nicht persistent speichert. Was du machen kannst ist aber, dass du die Daten im Dataset serialisierst und im Dateisystem ablegst. Wie Diräkt sagte musst du dir dazu mal das Serializing anschauen.

Über die Deserialisierung kannst du die Daten zu einem anderen Zeitpunkt auch wieder in das Dataset zurück übertragen. Soweit ich weiß, kann man sogar das komplette Dataset serialisieren.

F
10.010 Beiträge seit 2004
vor 11 Jahren

Sorry, aber du scheinst auch nicht so genau zu wissen was du sagst.

Man muss ein DataSet nicht serialisieren, es hat von sich aus WriteXml(FileName) und ReadXml(FileName) Funktionen.

@Gogeta:
Du redest tatsächlich etwas wirr.
Ein DataSet kann nicht mit einer DB kommunizieren, sondern nur dein Program, und da steht es dir vollkommen frei zu machen was du willst.
Du willst aber sowas wie "Continuous Linq" oder "Bindable Linq", was aber wiederum ( derzeit ) nicht mit DataSet geht.

G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren

Ahh okay lese mich mal in serilazation von DataSet...

Ich definier meine zweite frage neu:
Ich hab ein query, dieses möchte ich in ein DataSet oder Datatable speichern!
Das query bezieht seine Daten von einem DataSet aus zwei DataTables.

nun wollte ich dieses query als eigenständige DataSet oder DataTable benutzen.
Um später per Buton-Klick dieses query(DataSet/DataTable) mit dem haupt DataSet zu vergleichen(weil dieses seine Daten ständig mit der Datenbank abgleicht), wenn vorhanden ist soll das query aktualisiert werden und diese daten, nach button-klick in die query aufnehmen.

hoffe verstehst es besser 😃

@FZelle: lese mich mal in die Funktionen (: und schaue mir mal gleich "Continuous Linq" und "Bindable Linq" an...

G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren

Soo...

ich habe mal bissl gearbeitet 😄

und dachte mir, dass dies etwas einfacher geht, wieso soll ich zwei dataset mit einander vergleichen wenn ich zwei Datatables vergleichen kann 😄

Das Vergleichen und füllen funktoniert mittels foreach oder??

So stelle ich mir das vor:


DT A

ID  Nname  Nummer
01  AB        123
02  AC        188
03  AD        48

DT B
ID  Nname  Nummer
01  AB        123
03  AD        48

Wie ihr seht besitzt DT B nicht alle Datensätze aus DT A, Es möchte ich vor der Foreach schleife wenn es möglich ist, soll er alle zunächst die ID der beiden DT vergleichen und die die neu sind sollen zu DT B hinzugefügt werden und in dieses DT B gespeichert werden sollen...

Hoffe nun könnt ihr mir helfen 😄

F
10.010 Beiträge seit 2004
vor 11 Jahren

Und du bist sicher wenigstens ansatzweise mal die Doku zu DataTable angeschaut zu haben?

G
Gogeta Themenstarter:in
152 Beiträge seit 2012
vor 11 Jahren

Nein habe ich nicht 😠

Schau ich mir mal an doch ich werde sicherlich nichts finden -.- xD

Hinweis von gfoidl vor 11 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1 und schau dir unbedingt vorher die :rtfm: an, sonst dreht sich das im Kreis.

Thema geschlossen