[VB.NET] etwas größeres Datenbankprojekt

odi11

Grünschnabel
Hallo,
erst einmal etwas zu meinen Kenntnissen. Bin bei VB.NET ein absoluter Newbie. Habe bisher eine DBase 5.0 Datenbank verwendet und in der dazugehörigen Programmiersprache eine Kundenstamm und Auftragsverwaltung programmiert. Die Datenbank besteht aus ca 15 Tabellen und sind normalisiert. Dabei werden in allen Tabellen zusammen etwa 320 Spalten(Felder) verwaltet. Da ich nun die Anzahl der Felder erweitern möchte stoße ich bei DBase in der Formulardarstellung an die Grenzen und habe mich deshalb nach einer anderen Möglichkeit umgeschaut. Dabei schienfür mich Basic einfachsten, da ich Grundlagen dieser Sprache noch aus DOS-Zeiten her kenne und auch der DBase-Code(Eventorientiert) Basic änhnlich ist.

Für die ersten Schritte habe ich mir VB 2005 Express Edition und SQL Server Express Edition gezogen und installiert.Zudem habe ich mir 2 Bücher (Markt&Technik Visual Basic 2005, MicrosoftPress Datenbankprobrammierung VB 2005) zugelegt.
Um den Programmieraufwand nicht zu groß werden zu lassen, verwende ich ein typisiertes DataSet und habe die notwendigen Forms mit der Maus "zusammengeklickt". Dabei stellte ich jetzt fest, dass das Programm relativ langsam geworden ist. Ich vermute, das es am DataSet liegt, da ich darin alle Relationen, die auftreten können erstellt habe. Da, wenn ich es richtig verstanden habe, das Dataset eine "MiniDatenbank" im Arbeitsspeicher darstellt, sind wahrscheinlich 512 MB Ram etwas knapp.

Wäre es sinnvoller für jedes Formular ein eigenes DataSet mit nur den benötigten Relationen zu erstellen um die Geschwindigkeit zu erhöhen. Ist dieses Vorgehen möglich?

Ich weis, dass man den Ram auch aufrüsten kann, will ich aber nicht. Auch ist mir klar, das ein typisiertes DataSet und das Erstellen von Formularen per Maus im Hintergrund jede Menge Code erzeugt, aber bei der Anzahl von Feldern ist die händische Eingabe des notwendigen Codes auch nicht ohne Risiko und extrem Zeitaufwendig.

Habt ihr vielleicht noch Tips für einen zügigeren Zugriff auf die Daten.

Vielen Dank für euere Antworten.

Gruß Dirk
 

Norbert Eder

Erfahrenes Mitglied
Es hängt ganz davon ab, wie deine Anwendung auszusehen hat. Prinzipiell alle Daten in den Speicher zu laden ist wohl eher sinnfrei. Beschränke das Laden der Daten auf die Teile, die du im Moment auch tatsächlich benötigst und zeige diese an.

Ansonsten tu ich mir jetzt ein wenig schwer dir genau zu helfen, da ich keinen Aufbau, einfach gar nichts von deiner Anwendung weiß.
 

odi11

Grünschnabel
Re: AW: [VB.NET] etwas größeres Datenbankprojekt

Hallo Norbert,
erst einmal Danke für die Antwort.

Bei der Anwendung handelt es sich um eine Kundenstamm- und Auftragsverwaltung für einen Augenoptik- und Hörgeräteakustikbetrieb. Zudem Lager-, Lieferantenverwaltung und Krankenkassenabrechnung.

Die Struktur der wichtigsten Tabellen sieht in etwa so aus

Stammdaten
Auftragszentrale​
Brillenaufträge​
Brillenrparaturaufträge​
Kontaktlinsenaufträge​
Hörgeräteaufträge​
Hörgerätereparaturaufträge​


In der Auftragszentrale werden alle krankenkassenrelvanten Daten abgelegt während in den damit verknüpften Auftragstabellen die sonstigen kundenspezifischen Daten liegen.
Wenn die Stammdaten bearbeitet werden wird gleichzeitig die Adressentabelle der Krankenkasse benötigt.
Zu den Augtragstabellen gibt es dann Tabellen wie z.B. Fassungs- u. Glaslager, sowie Positionslisten der Krankenkassen deren Daten per Knopfdruck in die Formulare eingegeben wird.

Bisher habe ich ein Formular für die Kundensuche erstellt. Des weiteren eins für die Kundenstammdaten. Von dort aus kann ich zu den Aufträgen des Kunden die jeweiligen Auftragsformulare aufrufen. Bei der Arbeit mit den Formularen soll es möglich sein von mehreren Kunden gleichzeitig die Stammdaten und auch mehrere deren Auftragsformulare geöffnet zu haben.

Beispiel:
Kunde A: Auftag Brille und Auftrag Hörgerät
Kunde B: Auftrag Kontaktlinsen.

d.h. als drei verschiedene Auftragsarten von 2 Kunden

Was ist also besser:
- ein DataSet mit allen Relationen
- ein Dataset pro Formular(Auftragsart) mit den nur im Formular benötigten Verknüpfungen.

Gruß Dirk

PS: heute habe ich festgestellt, das es nur im Debug-Modus so langsam ist. Nachdem ich das Programm erstellt hatte und die .exe Datei gestartet habe war die Geschwindigkeit doch recht flott (nicht ganz so schnell wie DBase 5.0).
 

Norbert Eder

Erfahrenes Mitglied
Bezüglich Debug/Release: Ja, das ist klar, denn im Release-Modus werden keine Debug-Informationen mitgeschrieben. Der Unterschied kann ihr schon recht groß sein.

Grundsätzlich gibt es zwei unterschiedliche Varianten (grob gesprochen):

a) Du ladest dir alle Daten. Dadurch hast du jedoch einen hohen Speicherbedarf, das Anzeigen von diversen Daten funktioniert jedoch schnell, da diese nicht extra nachgeladen werden müssen.

b) Du zeigst nur die Daten an, die auch tatsächlich gebraucht werden. Nachteil: sollen andere Daten angezeigt werden, müssen diese zuerst nachgeladen werden, wodurch sich für den Benutzer kurze Wartezeiten ergeben.

Prinzipiell rate ich dir, nur die Daten zu laden, die auch tatsächlich angezeigt sind. Du hast zwar den Nachteil, dass andere Daten zuerst nachgeladen werden müssen, gibt es jedoch mehrere Clients ist diese Variante die wesentlich bessere, alleine schon in Bezug auf die Durchführung von Updates. Alle Anwendungen sollten möglichst immer die aktuellsten Daten haben.

Zudem empfehle ich dir, die Datenbindung nicht via Visual Studio vorzunehmen (DataAdapter etc.), sondern die Abfragen und das Binding selbst vorzunehmen. Dadurch kannst du ziemlich gut optimieren.
 

Neue Beiträge