Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 22.05.16 00:56 
Hallo,
ich möchte erstmal sagen, dass ich der Meinung bin, dass man die Daten einer ListView besser speichern kann als ich es gerade mache. Ich erstelle mir eine Basisklasse, welche die Columns der LV besitzt, dann eine Klasse, die eine Liste vom Typ der Basisklasse enthält und die über Speicher - und Öffnungsmethoden verfügt.

Über eine foreach- Schleife wird eine neue Basisklasse erstellt und mit den einzelnen Daten gefüllt. Diese Klasse wird anschließend in der Klasse mit der Liste geaddet. Anließen wird die Klasse mit der Liste als XML serialisiert.
Wenn ich mir die XML- Datei aber ansehe, sieht es sehr verwirrend aus. Kann es passieren, dass sich der Computer nach ganz großen Datenmengen vertut oder Fehler auftreten?

Deswegen denke ich über Datenbanken nach. Erstmal die wichtigste Frage: angenommen ich erzeuge eine Datenbank, die für eine LV spezialisiert wurde, kann ich dies dann so programmieren, dass die Anwendung auch auf einem Client-PC fehlerlos funktioniert? Wie kann ich mir eine Datenbankdatei vorstellen (braucht diese Datei Internet)? Und welchen Datenbanktyp würdet ihr mir für eine LV empfehlen?

Mfg Yannic M.
:)

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 22.05.16 13:39 
Internet benötigst du für eine Datenbank nicht. Was du benötigst, hängt vom Datenbanktyp ab.

Es gibt echte Datenbankserver, die du auf deinem Rechner installieren musst, wie MS SQL Server oder Firebird. Es gibt aber auch Embedded Datenbanken wie Firebird Embedded, SQLite usw., die lokal lediglich die Datenbank als Datei und die Zugriffsbibliotheken benötigen.

Den Zugriff kannst du ähnlich wie bei der XML Datei über eine Schleife erledigen. Lediglich die andere Richtig, das Abspeichern, wird ein wenig mehr Aufwand. Denn anders als bei einer XML-Datei speicherst du nur die Änderungen und nicht die ganze Datei. Deshalb sind Datenbanken auch deutlich schneller als eine XML-Datei.
Zudem kannst du da sehr einfach filtern und sortieren usw.

Aber erst einmal kannst du ja mir dem Auslesen anfangen.
Ein einfaches Beispiel siehst du zum Beispiel hier:
www.youtube.com/watch?v=LxeM010HLJI
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 22.05.16 14:21 
Zitat:
Deswegen denke ich über Datenbanken nach. Erstmal die wichtigste Frage: angenommen ich erzeuge eine Datenbank, die für eine LV spezialisiert wurde, kann ich dies dann so programmieren, dass die Anwendung auch auf einem Client-PC fehlerlos funktioniert? Wie kann ich mir eine Datenbankdatei vorstellen (braucht diese Datei Internet)? Und welchen Datenbanktyp würdet ihr mir für eine LV empfehlen?


Sorry aber das ist keine Frage sondern eine Zurschaustellung das du dem Problem aus der falschen Richtung begegnest. Versuche, auch wenn schwer fällt, diesen Gedankengang zu löschen. Von einem Control zur Datenablage zu denken ist eine Sackgasse. Immer. Möglicherweise bekommt man so was raus was am Ende irgendwie funktioniert aber mir annähernd 100% Wahrscheinlichkeit wird es Mist sein ;)

Datenbanken sind zur persistenten Datenablage gedacht. Controls zur Datenanzeige. 2 unterschiedliche, ja unabhängige, Probleme. Wenn du die gedanklich als ein Problem betrachtest machst du dir die Sache schwerer als sie ist. Du solltest versuchen Probleme zu trennen nicht sie zu einem zu machen. Ich empfehle dir mit einer (möglicherweise erstmal abstrakten) Betrachtung eines Datenmodels zwischen Persistierung der Daten und Anzeige der Daten zu beginnen. Von da aus hast du 2 sauber abgegrenzte Probleme (wie bringe ich die Daten in die UI und zurück, wie speichere/lade ich die Daten) die du einzeln lösen kannst und die isoliert auch einfacher zu lösen sind.

Für den Anfang kannst du von da aus auch erstmal zur Datenablage weiterhin eine xml Datei verwenden. Wenn sich das dann als Problem darstellt kannst du, aus dem dann richtigen Grund (weil zu langsam, schwer auszuwerten etc.), überlegen ob du zur Datenablage was geeigneteres benutzen möchtest. Dieser Austausch passiert dann ohne das du irgendwas Richtung Anzeige ändern müsstest. Denn du hast die Teilprobleme ja voneinander isoliert.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 22.05.16 16:47 
Zitat:
Für den Anfang kannst du von da aus auch erstmal zur Datenablage weiterhin eine xml Datei verwenden.

Okay. Ein Kumpel von mir hat mich gefragt, ob ich ihm eine Software für sein kleines Unternehmen schreiben kann. Diesen "Auftrag" habe ich angenommen. Diese Software habe ich nun fast fertig geschrieben und sie enthält 4 unterschiedliche ListViews mit vielen (max 6) Columns. Was mir Bauchschmerzen macht, ist die Frage, ob der XmlSerializer mit vielen / großen Datenmengen umgehen kann. Ich weiß ja nicht, wie viele Aufträge / Buchungen mein Kumpel in das Programm einträgt. Nicht dass es da irgendwelche Fehler gibt.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 22.05.16 17:24 
Zitat:
Nicht dass es da irgendwelche Fehler gibt.

Ich vermute mal dir ist mittlerweile klar das man solche Fragen vorher klärt ;)
Fehler wird es immer geben. Und bei manchen hast du gar keine Chance sie zu verhindern weil sie gar nicht direkt mit deinem Stück Software zusammenhängen sondern nur davon betroffen ist.
Für dich als der Entwickler (und natürlich genauso für den Auftraggeber) der Software ist es aber wichtig wie die Software auf Fehler reagiert und ob sie Verfahren unterstützt die Fehler ~reparierbar~ machen.

Mal das offensichtlichste. Wenn irgendein Fehler (Stromausfall, Hardware schaden, Platte kaputt etc.) deinen Datenbestand beschädigt. Wie gut lässt sich der aus einem Backup möglichst ohne viel Verlust wieder herstellen? Und ist das hier wichtig? Hast du Absprachen für diesen Fall getroffen? Was ist wenn Fehleingaben denn Datenbestand kaputtmachen. Wie einfach ist es auf einen vorherigen Zustand zurückzukommen. Ist das hier wichtig? Habt ihr das abgesprochen? Falls ihr unausgesprochen Fehlerfreiheit angenommen habt dann hast du mein Mitleid. Es werden Fehler auftreten egal wie gut das programmiert ist. Ich hoffe eure Freundschaft leidet darunter nicht ;)

Eine Datenbank hat üblicherweise bereits Verfahren dazu eingebaut. Aber ob sie für deinen Fall ausreichen sind, geeignet sind oder eher sogar überdimensioniert sind kann ich nicht beurteilen. Das hängt davon ab was ihr besprochen habt was der Rahmen des Auftrags an dich ist.
Zitat:
Was mir Bauchschmerzen macht, ist die Frage, ob der XmlSerializer mit vielen / großen Datenmengen umgehen kann

Das kann der. Aber es hört irgendwann auf sinnvoll zu sein. Du musst ja immer alles laden und immer als speichern. Da wird vermutlich sehr bald, sehr viel, sehr unnötig hin und hergeschoben.
Zitat:
Ich weiß ja nicht, wie viele Aufträge / Buchungen mein Kumpel in das Programm einträgt

Ah. Der Starter für ein Datenmodell ;) Du hast also Aufträge und Buchungen. Da lässt sich doch ein einfaches Datenmodel designen und du kannst beim speichern der Daten das Listview erstmal aus dem Kopf streichen.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 22.05.16 17:38 
Zitat:
Ich hoffe eure Freundschaft leidet darunter nicht ;)

Ach quatsch. Dazu kenne ich ihn zu lange und zu gut ;)

Zitat:
Das kann der. Aber es hört irgendwann auf sinnvoll zu sein. Du musst ja immer alles laden und immer als speichern. Da wird vermutlich sehr bald, sehr viel, sehr unnötig hin und hergeschoben.

Angenommen die Listview hat 6 Columns und mein Kumpel fügt 10.000 Einträge hinzu (unrealistisch aber ein gutes Beispiel zur Frage) :lol: und speichert dies. Nun wird eine Liste 10.000 mal mit einer gefüllten Klasse geaddet und anschließend über den XmlSerializer serialisiert. Kann er damit beim speichern und beim öffnen umgehen?
Ist es aber nicht so, dass der FileStream eine Datei leert und diese dann anschließend mit den neuen Daten befüllt? Ich bin mir aber nicht sicher :)

Zitat:
Ah. Der Starter für ein Datenmodell ;) Du hast also Aufträge und Buchungen. Da lässt sich doch ein einfaches Datenmodel designen und du kannst beim speichern der Daten das Listview erstmal aus dem Kopf streichen.

Das verstehe ich gerade nicht ganz :gruebel:

Moderiert von user profile iconTh69: C#- durch Quote-Tags ersetzt

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 22.05.16 18:05 
Zitat:
Angenommen die Listview hat 6 Columns und mein Kumpel fügt 10.000 Einträge hinzu (unrealistisch aber ein gutes Beispiel zur Frage) :lol: und speichert dies. Nun wird eine Liste 10.000 mal mit einer gefüllten Klasse geaddet und anschließend über den XmlSerializer serialisiert. Kann er damit beim speichern und beim öffnen umgehen?


Ja. Aber nur weil du vielleicht 1 dieser 10000 Datensätze änderst möchtest du kaum alle 10000 schreiben müssen. Und laden eigentlich auch eher nicht. Bei 10000 Datensätzen bist du meiner Meinung nach schon lange an der sinnvollen Menge für ein Xml Datei vorbei. Soviel Daten in einem Xml Datei würde ich nur machen wenn sie zum Transport gedacht ist aber nicht um damit zu arbeiten(regelmäßig lesen, schreiben, ändern). Die Grenze liegt da eher bei einer kleinen 3stelligen Zahl.

Zitat:
Das verstehe ich gerade nicht ganz :gruebel:


Ich hacke immer noch auf dir rum damit du ein Datenmodel schreibst das UI (Listview) und Datenablage(Xml, Datenbank) isoliert damit du von der unsäglichen Frage "eine für ein Listview spezialisierte Datenbank" los kommst. Wenn man klar definierte Dinge schon benennen kann (Auftrag, Buchungen) ist ein Datenmodell nicht weit.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 22.05.16 19:39 
Ah okay. Jetzt weiß ich, was Sie meinen. Was stellen Sie sich unter einem Datenmodell vor? Sowas? Gewusst wie: Anpassen der Datenfeldanzeige im Datenmodell

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.05.16 20:26 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 23.05.16 09:41 
Nein. Ich dachte ganz simpel an eine Satz Klassen die in Beziehung stehen und über Properties die Daten beschreibt die das abzubildende ~Business~ darstellt.
Das was du verlinkst geht schon viel zu weit und bezieht sich auch auf eine bestimmte Technik. Es ist schon falsch das es sich überhaput auf eine Technik (Asp.Net) bezieht.
Ein Datenmodel sollte erstmal was völlig technikunabhängiges sein, und am besten wäre wenn es das auch bleibt. Einfach nur Klassen und Properties. Wenn in den using Klauseln der Klassen des Datenmodels irgendwas von abhängigen Techniken auftaucht (aus dem der Asp.Net, Wpf, Winforms oder auch ADO.Net namespaces) solltest du dich fragen ob das richtig ist.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Mo 23.05.16 11:26 
Also meinen Sie so etwas Ralf:
ausblenden C#-Quelltext
1:
2:
3:
4:
public class Artikel {
 public string Name {get; set;}
 public steigt Abkürzung   {get; set;}
}


Und natürlich noch mehr. Oder was meinen Sie?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 23.05.16 14:14 
Genau.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Di 24.05.16 15:58 
Und wie geht es mit dieser Klasse nun weiter?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 24.05.16 21:31 
Du kannst dir jetzt überlegen wie du Daten aus der Klasse bzw. den Klassen die dein Datenmodell darstellen in die UI bekommst und anzeigst. Und unabhängig davon kannst du dir überlegen wie du die Daten aus den Klassen irgendwo ablegst und wieder einließt. Also 2.Probleme die man völlig unabhängig lösen kann. Nur dafür ist im Moment das Datenmodell da um als Fixpunkt zwischen den 2 Teilproblemen zu dienen und ein großes Problem (wie von Listview in eine Datenbank/xml und zurück) in 2 kleinere zu teilen die einzeln einfacher zu lösen sind. Aber du musst jetzt nicht prinzipiell was grundsätzlich anderes machen als vorher.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Fr 27.05.16 23:21 
Okay. Ich werde mich dann nun mit Datenbanken beschäftigen müssen.
Ich habe dazu mal eine Frage:
Welchen Datenbanktyp empfehlt ihr mit? Das Programm soll - mit der Datenbank - auf anderen PC's laufen sollen. In meinem Programmierbuch verwenden sie eine Microsoft Access Datenbank. Auf YouTube habe ich mir ein Tutorial über MySQL angesehen. Die Schritte im Video habe ich dann auf VS 2013 nachgemacht, aber irgendwie funktioniert das nicht.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 28.05.16 01:56 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 29.05.16 21:43 
Also zum Erlernen von MySQL habe ich mir dieses Video angesehen: www.youtube.com/watch?v=9Pbg-XFqqfA
Do weit - so gut. Ich habe nun in meiner Datenverbindungsliste eine Datei namens MyDatabase.mdf

Wenn ich aber nun die Tabelle auf die Form ziehe, passiert nichts.
Und wo soll ich die Datenbankdatei speichern? In dem ZIP, in dem ich das Programm liefere?
Einloggen, um Attachments anzusehen!
_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 29.05.16 22:48 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 29.05.16 23:10 
Zitat:

Du bist ein angehender Profi-Entwickler, also versuch es auch entsprechend zu beschreiben. ;)


Vielen Dank für das Kompliment (angehender Profi Entwickler) :D
Also in Video sieht man, dass dieses Element per Drag'n'Drop auf die Windows Form gezogen wurde. Wenn ich das bei mir veruche, passiert nichts ;)

Zitat:
Ja, warum denn nicht? Oder du bietest sie zum Download an.

Teils. Also wenn die Benutzer (der Firma) die Anwendung schließen, soll die neue Datenbankdatei auf einen Server geladen werden, damit alle 4 Computer von den Daten auf den neuesten Stand sind. Ich denke mal das Hoch/Runterladen der Dateien sollte mittels UploadFile kein Problem sein - naja... schauen wir mal ;)

Um mit der Datenbankdatei zu "kommunizieren", habe ich mir mal so ein Video auf YouTube angesehen: www.youtube.com/watch?v=1EpYqtSlOr8

Wenn ich bei mir (VS 2013) ein Item "lokale Datenbank" in das Projekt einbeziehen möchte, finde ich dies nicht. Was muss ich jetzt genau suchen bei mir? SQL oder Microsoft SQL?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 30.05.16 03:05 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.