vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: V A T
Datum: 01.03.20 12:05

Hallo,

ich habe mal eine grundsätzliche Frage. Für Fachleute wahrscheinlich komplett trivial, aber ich will sicher gehen, dass ich "mir kein Ei" lege.

Ich habe ein recht komplexes Programm, während dessen Benutzung in verschiedenen Situationen immer wieder in verschiedene Tabellen einer Datenbank gelesen bzw. geschrieben wird. Also der Anwender öffnet das Programm, wählt über ein Menü Funktionen seiner Wahl und greift dabei immer wieder mal lesend/schreibend auf die Datenbank zu.

Bisher hatte ich bei jedem einzelnen Zugriff auf die Datenbank ein:
Set DB = OpenDatabase(App.Path & "/testdatenbank.mdb", False, False)
vorangestellt und am Ende jedes einzelnen Zugriffs ein
DB.Close
gesetzt.

Ich dachte das wäre sinnvoll, um sicherzustellen, dass die Datenbank möglichst nie in einem "geöffneten Zustand" bleibt (z.B. bei einem unerwarteten Abbruch oder bei gleichzeitigem Mehrfachzugriff von mehreren Anwendern).

Mittlerweile frage ich mich aber, ob das sinnig ist, und ich nicht die Datenbank lieber nur einmal bei Programmstart öffnen und einmal bei Nutzungsende schließen sollte.

Kann mir jemand, der Ahnung davon hat mal sagen, ob es hier ein klares Statement für eine der beiden Varianten gibt oder ob man das je nach Situation abwägen muss?

Sorry, ich bin Datenbanktechnisch absoluter Amateur und entschuldige mich jetzt schon mal verschämt für die DAU-Frage.

MfG

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: V A T
Datum: 02.03.20 23:50

Hallo,

kann wirklich niemand kurz sagen, ob man hier besser die eine oder andere Variante wählt?

Ich dachte jedem Datenbankguru wäre das nur ein müdes Lächeln über einen Amateur wert.

Gruß

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: Wobi
Datum: 04.03.20 02:22

Hallo,
da es sich bei dir um eine Access *.mdb handelt (keine "richtige" Datenbank sondern im Endeffekt nur eine Datei) habe ich mich an die damals gültige Regel gehalten: So spät wie möglich öffnen, so früh wie möglich schließen.

Die stammt noch aus den Zeiten als ich mit Classic ASP und auf einem Webserver liegenden *.mdb gearbeitet habe.

Unter VB6 habe ich dann die Verbindung bei Einzelbenutzerzugriff bei Programmstart hergestellt und bei Programmende geschlossen. Bei Mehrbenutzerzugriff (wenige gleichzeitige Benutzer) mich wieder an die Regel gehalten, bei vielen Benutzern allerdings immer schon andere DB verwendet (Meist MS SQL)

Warum stellt sich für dich die Frage?
Wenn alles funktioniert kannst du bei deinem System bleiben, einen spürbaren Performance Gewinn wirst du durch die einmalige Verbindung statt mehrfacher Verbindungen auf heutigen Rechnern nicht spüren.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: V A T
Datum: 04.03.20 20:52

Hallo Wobi,

danke für Deine Antwort! Du bist mir da erfahrungs- und wissenstechnisch weit voraus.

Die Frage stellte sich mir, weil die Performance bei bestimmten Konstrukten tatsächlich massiv in den Keller ging. Also wenn ich per Schleife zum Beispiel 30 mal eine Abfrage in der DB mache und jedes mal öffne uns schließen, dann dauert das mehrere Sekunden. Mit einmaligem Öffnen/Schließen nicht mal eine.

Da habe ich dann logischerweise die schnelle Variante verwendet. Und mir in diesem Zusammenhang die Frage gestellt, ob die Variante die DB bei Programstart zu öffnen und bei Programmende zu schließen, nicht sinnig wäre. Nie mehr unnötiger Zeitverlust. Auch wenn du natürlich recht hast, dass er an vielen Stellen nicht wirklich spürbar ist, an manchen aber schon...

Gruß

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: Wobi
Datum: 05.03.20 01:46

Hallo,
Schleife? Meinst du so was in der Art?

For x = 1 to 30
   'DB öffnen
   'Abfrage von Daten
   'DB schließen
next
Wenn dem so sein sollte, ist es nicht sinnvoll die DB innerhalb der Schleife zu öffen/zu schließen. Da die Schleife ja direkt hintereinander läuft kannst du die DB vor der Schleife öffnen und danach schließen. z.B.

'DB öffnen
For x = 1 to 30
   'Abfrage von Daten   
next
'DB schließen
Allerdings sind 30 Abfragen direkt hintereinander nicht grade üblich. Die meiste Zeit verbringen ja User damit irgendwelche Formulare auszufüllen, sich die Ergebnisse von Abfragen anzusehen, bzw. damit weiter zu arbeiten (Kunden anrufen z.B.) usw. usw. Die Zeit in der wirklich auf die DB per Abfrage zugegriffen wird ist meistens relativ kurz innerhalb der gesamten Laufzeit des Programms.

Dazu kommen dann noch Sachen wie Telefonate, Abwesenheit vom Arbeitsplatz Mittagspause, Feierabend, Wochenende usw. wo evtl. das Programm geöffnet ist, sich aber rein gar nichts tut. Ich hatte bei einigen Anwendungen es sogar so gemacht, dass nach einer gewissen Zeit der Inaktivität im Programm die Verbindung zur DB automatisch geschlossen worden ist und dann beim nächsten DB Zugriff wieder hergestellt worden ist falls sie zwischenzeitlich geschlossen wurde.

Aber ein Patentrezept gibt es nicht, kommt immer auf die jeweilige Anwendung an.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: V A T
Datum: 05.03.20 16:31

Hallo Frank,

Ja, exakt das meinte ich mit Schleife. Da bin ich aus den genannten Gründen schon von weg und mache es genau so, wie du beschrieben hast.

Alles was du geschrieben hast (inkl. des wohl nicht existenten Patentrezeptes) stimmt und ist exakt der Background meiner Frage. Es beschreibt meinen Zwiespalt:
Extrem 1: Öffnen bei Programmaufruf/Schließen bei Programmende
vs.
Extrem 2: bei jedem einzelnen Select-Datenbank erst öffnen und danach direkt wieder schließen.

Ich suche halt nach Fakten/Erfahrungen, welche konkreten Vor-/Nachteile es hat, wenn man in Richtung des einen oder anderen Extrems geht. Eins haben wir ja schon gefunden: Die Geschwindigkeit des Zugriffs bei vielen Zugriffen direkt hintereinander (Schleife). Also scheint Extrema 2 ja schon mal nicht der Weisheit letzter Schluss.

Aber was ist konkret der Nachteil, wenn ich die DB dauerhaft offen habe (Extrem 1)?
Wird sie dadurch z.B. ggf. langsamer für andere Zugreifende?
oder
könnte sie bei ungeregeltem Programmabbruch ggf. "geöffnet" bleiben und welche negativen Folgen hat das dann?
oder

Oder gibt es vielleicht sogar gar keine negativen Folgen, wenn man Extrem 1 wählt (dann würde man es ja immer so machen).

Ich hatte halt gehofft, dass irgendjemand der viele Programme mit Datenbankzugriffen geschrieben hat, aus Erfahrung/Wissen eine theoretische Leitlinie für sich entwickelt hat:
Wenn das so ist, mach ich das immer so, WEIL... Also, ich suche die [u]Begründung und will was lernen .
So, wie ich es derzeit praktisch mache, geht es ja. Ich weiß nur nicht, ob es sinnvoll ist, weil ich mein Vorgehen nicht begründen kann (außer natürlich die eine Erfahrung mit der Schleife).

WICHTIG: An dieser Stelle aber nochmal ernsthaft meinen Dank für Deine Unterstützung! Das ist nicht selbstverständlich und ich weiß es wirklich zu schätzen!!! DANKE!

Freundliche Grüße

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Beitrag wurde zuletzt am 05.03.20 um 16:33:30 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: Wobi
Datum: 06.03.20 00:36

Hallo,
zwischen zwei Extremen liegt halt oft ein Mittelwert.
Da du konkret fragst, kann ich dir aus persönlicher Erfahrung schreiben, warum ich es so gemacht habe wie ich es gemacht habe. Ist natürlich immer nur auf die Anwendungen bezogen die ich gemacht habe.

Also zur Begründung warum ich die DB so spät wie möglich geöffnet habe und so früh wie möglich geschlossen habe.

Eine *.mdb Datei ist keine "richtige" Datenbank sondern nur eine simple Datei die nicht für Mehrbenutzerbetrieb ausgelegt ist. (Wenn ein Anwender das Programm mehrfach startet ist das auch Mehrbenutzer)

Für mich hat das keinen Performance Unterschied gemacht der spürbar gewesen wäre, solche Sachen wie die Schleife hatte ich aber auch nie.

Bei der Office Automatisierung innerhalb der Office Programme (Ohne VB6) hatte ich öfter das Problem dass die *.mdb nicht geöffnet werden konnte, da blieb dann die dazugehörigen *.ldb Datei bestehen obwohl die eigentlich nicht mehr vorhanden sein sollte nach der Beendigung des Zugriffs. Die musste dann per Hand gelöscht werden damit es wieder funktionierte.

Mehrbenutzerbetrieb (bis ca. 20) hat auch mit *.mdb hervorragend so funktioniert, wenn etwas schief gegangen ist, dann waren das in der Tat unkontrollierte Abbrüche des Programms bzw. des ganzen Rechners. Hatte mal einen Kunden bei dem Stromausfall war weil ein Bagger das Kabel durch gehackt hat bei der Ausschachtung für neue Gasleitungen im Gewerbegebiet. Aber gut, da war das DB Problem das geringste...

Routine: Man gewöhnt sich im Laufe der Zeit ja an gewisse Routinearbeiten als Codebausteine zu speichern so dass man sie in verschiedenen Anwendungen benutzen kann. Dafür verwende ich halt Module/Klassenmodule oder sogar ein VB6 Projekt als Vorlage wo die wichtigsten Sachen schon drin sind. Und da war/ist es halt so, dass ich dort wenn es um *.mdb Dateien geht ich halt gar nicht mehr drüber nach denke, ob ich anders machen könnte, es funktioniert ja seit vielen Jahren einwandfrei.


Die Frage ist jetzt aber was du mit deiner Entscheidung bezweckst bzw. was für eine konkrete Anwendung und Anwenderkreis du hast. Du könntest ja mal eine Protokolldatei mit führen in der die Uhrzeiten jedes DB Zugriffs (Also die Abfragen) aufgezeichnet werden und ins Verhältnis zur Nutzungsdauer deines Programms setzen. Wenn da 90% DB Zugriffe sind so wie bei deiner Schleife sieht es anders aus als wenn der Prozentwert unter 1 der gesamten Nutzungsdauer liegt. Danach kannst du abwägen für welchen Teil welche Methode besser ist.

Und dann natürlich unabhängig von der Methode der Verbindung solltes du mal darüber nachdenken warum du solche Schleifen in deiner Anwendung überhaupt brauchst. Das würde evtl. das Problem schon lösen. SQL ist sehr mächtig (auch unter VB6) Aber das ist ein anderes Thema. Wenn du möchtest, können wir uns gerne per PM darüber unterhalten, hier im Forum wäre das zumindest in diesem Thread etwas OT.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: V A T
Datum: 06.03.20 21:34

Hallo Frank,

ich glaube du hast mich etwas missverstanden. Der wichtigste Satz meiner letzten Antwort war: "Alles was du geschrieben hast (inkl. des wohl nicht existenten Patentrezeptes) stimmt und ist exakt der Background meiner Frage. "

Ich habe bisher - genau wie du das beschrieben hast - immer eine Standardroutine verwendet, in der die DB geöffnet, SQL gelesen, DB geschlossen wird. Bisher für meine Projekte immer völlig problemlos nutzbar.

Nach der Erfahrung mit der Schleife, habe ich mir einfach die Frage gestellt, wie ein Fachmann meine Standardroutine bewerten würde oder ob er die Hände über dem Kopf zusammenschlagen würde.
Deshalb meinen Frage in die Runde der erfahrenen Programmierer...

Ich habe aktuell kein Problem mit meiner Lösung und verwende meine Standardroutine auch problemlos weiter. Ich wollte nur mal eine externe Wertung.

Gruß und nochmals Danke für die Zeit die Dir genommen hast!!!

V A T

P.S.: Übrigens hab ich irgendwo mal gelesen, das die "übrig gebliebene" *.ldb Dateien mittlerweile beim nächsten Öffnen/Schließen der DB automatisch gelöscht werden.

P.P.S.: Dass eine *.mdb Datei gar keine "echte" Datenbank ist, war mir gar nicht so bewusst. Aber ich bin da auch wirklich nur interessierter Laie. Für meine Zwecke sollten die gesetzten Grenzen aber problemlos ausreichen.

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: Wobi
Datum: 07.03.20 01:31

Hallo,
na dann ist ja alles klar...
Ich wünsche dir viel Erfolg bei deinem Projekt und möge alles so funktionieren wie du es brauchst. Das ist ja sowieso immer die Hauptsache.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbank immer wieder öffnen und schließen oder nur einmalig 
Autor: V A T
Datum: 07.03.20 01:40

Hallo,

Danke! Du hast mir wirklich gut geholfen!!!

Gruß

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel