vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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
Datenbankverbindungen... 
Autor: I.V.
Datum: 28.10.16 07:51

Hallo zusammen,

ich habe ein Frage zum Thema Datenbankverbindung

Ich prüfe bei starten eines Programms ob die Datenbank erreichbar ist (wegen Netzwerk) und stelle dann auch die Verbindung her.

Da ein paar Leute hier setzen ihre PCs zum Feierabend nur in den Energiesparmodus, oder lassen sie laufen.
Über Nacht laufen einige Sicherungen und einige Netzlaufwerke sind dann teileweise nicht erreichbare.
Wenn diese Mitarbeiter am nächsten Tag mit den Programmen weiterarbeiten wollen, dann kommt da immer ein Fehler (Die genaue Bezeichnung habe ich mir jetzt nicht gemerkt), da die Verbindung nicht mehr da ist.

Kann mir jemand einen Tipp geben, wie ich das ändern kann?

Danke und Gruß
Ingo

Wer aufhört sich zu verbessern, hört auf gut zu sein.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbankverbindungen... 
Autor: Franki
Datum: 30.10.16 03:14

Hallo Ingo,

Zitat:


Ich prüfe bei starten eines Programms ob die Datenbank
erreichbar ist (wegen Netzwerk) und stelle dann auch die
Verbindung her.


Soweit so gut, das ist auch richtig so.

Zitat:


Über Nacht laufen einige Sicherungen und einige Netzlaufwerke
sind dann teileweise nicht erreichbare.


Du musst von deinem Programm aus bei jedem Zugriff auf die Datenbank oder Netzlaufwerke prüfen, ob alles erreichbar ist. Nur beim Programmstart reicht nicht. Also bevor du die Sicherung anwirfst, prüfen, ob alles erreichbar ist.

Zitat:


Wenn diese Mitarbeiter am nächsten Tag mit den Programmen
weiterarbeiten wollen, dann kommt da immer ein Fehler (Die
genaue Bezeichnung habe ich mir jetzt nicht gemerkt), da die
Verbindung nicht mehr da ist.


Also die Fehlermeldung solltest du schon hier posten, denn ohne kann man da nicht viel zu sagen.

Grundsätzlich gilt: Lieber einmal zu viel geprüft, ob eine Datenbank, ein Netzlaufwerk, ein Webserver oder was auch immer erreichbar ist als einmal zu wenig. Wenn du das prüfst, kannst du entsprechend reagieren.

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

Re: Datenbankverbindungen... 
Autor: I.V.
Datum: 31.10.16 08:56

Hallo Frank,

ich werde am Mittwoch mal versuchen den Fehler auszulösen und teile dir die Meldung dann mal mit.

Da es ziemlich viel Funktionen gibt, die Daten aus DBs holen, stelle ich mir es sehr Ressourcenraubend vor, jedes mal zu prüfen, ob die DBs erreichbar sind.
Oder gibt es da was einfaches?

Gruß Ingo

Wer aufhört sich zu verbessern, hört auf gut zu sein.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbankverbindungen... 
Autor: Franki
Datum: 01.11.16 02:45

Hallo Ingo,

du hast ja grundsätzlich zwei Möglichkeiten: Entweder vorher prüfen, ob die DB erreichbar ist oder auf Fehlermeldungen reagieren sollte sie nicht erreichbar gewesen sein.

Das kannst du ja evtl. auch nach Uhrzeit gesteuert machen, also während der Arbeitszeit ohne Prüfung, nach Feierabend mit Prüfung oder was auch immer.

Oder wenn du Zugriff auf die PC der Mitarbeiter hast diese per WakeOnLan wieder aufwecken durch dein Programm und dann erst drauf zugreifen. (Nach entsprechender Kontrolle, denn bei. z.B. einem Stromausfall funktioniert auch das nicht) Möglichkeiten gibt es da viele, hängt aber davon ab, wie das ganze konfiguriert ist und wie wichtig dir die Sache ist.

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

Re: Datenbankverbindungen... 
Autor: Manfred X
Datum: 01.11.16 18:47

Hallo!

[I]Ein paar Leute hier setzen ihre PCs zum Feierabend
nur in den Energiesparmodus, oder lassen sie laufen.[/I]

Ich empfehle, diesen Mitarbeitern ein Seminar oder zumindest eine
kleine Belehrung zur Datensicherheit zu spendieren.
Das Programm sollte nach ca. 30 min der Inaktivität des angemeldeten
Users automatisch die Datenbank-Verbindung schließen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbankverbindungen... 
Autor: I.V.
Datum: 01.11.16 19:21

Hallo Manfred,

das mit den Mitarbeitern sehe ich ähnlich, doch ich habe leider keinen Einfluss darauf.

Das mit dem Schließen der Verbindung, lach jetzt nicht, aber wie mache ich das am besten?

Gruß Ingo

Wer aufhört sich zu verbessern, hört auf gut zu sein.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbankverbindungen... 
Autor: Franki
Datum: 02.11.16 00:38

Hallo Ingo,

darum brauchst du dich zunächst mal nicht zu kümmern. Der erste Schritt ist ja zu prüfen, ob die Verbindung steht oder nicht. Ob das aus Datensicherheit, bewußtest Handeln des Users oder aber weil die Putzfrau die Steckdose für den Staubsauger braucht usw. spielt keine Rolle, die Verbindung zur DB ist nicht vorhanden. Das musst du prüfen.

Wie du selbst die Verbindung deines Programms zur DB trennen kannst hängt davon ab wie du die Verbindung herstellst. Also z.B. wenn du sie mit .Open herstellst, dann kannst du sie mit .Close auch wieder schliessen.

Es gab z.B. früher mal eine Regel für ASP Seiten beim Zugriff auf Datenbanken auf einem Webserver: Öffne so spät wie möglich, schliesse so früh wie möglich.

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

Re: Datenbankverbindungen... 
Autor: Manfred X
Datum: 02.11.16 10:49

Die angemessene Gestaltung der automatisierten Datenbank-Trennung hängt von der
Funktionalität Deines Programms, dem Netzwerk und der Art der Datenbankverbindung ab.

Dabei geht es nicht nur um den Datenschutz, sondern auch um technische Fragen z.B.
werden manche (ältere) Datenbanken bei zu vielen offenen parallelen Verbindungen
eventuell überlastet; bei offenen Verbindungen können Datensätze für die Bearbeitung
durch andere Nutzer im Netzwerk unnötig gesperrt sein.

Zu klären wäre auch, weshalb manche Mitarbeiter sich nicht abmelden.
- Ist der erstmalige Aufbau der Datenverbindung (bei Arbeitsbeginn) oder die
Netzwerk-Initialisierung sehr zeitaufwendig?
- Bleiben umfangreiche Datenbearbeitungen am Arbeitsende unvollständig und sollen
deshalb am nächsten Tag direkt fortgesetzt werden können?
- Sollen zwischenzeitliche Änderungen der bearbeiteten Datensätze durch andere Mitarbeiter
verhindert werden?


Gewöhnlich interagiert der Benutzer durch Steuerelemente eines Formulars mit dem
Datenbank-Programm.
In allen entsprechenden Control-Events ist einer formular-global deklarierten Variable
jeweils der aktuelle Zeitpunkt des Aufrufs zuzuweisen.
Ein Timer-Control prüft einmal pro Minute im Tick-Event die Differenz (DateDiff) zwischen
dem gespeicherten Zeitpunkt der letzten Aktivität und der aktuellen Uhrzeit.
Beträgt diese Differenz mehr als ca. 25 Minuten, aber weniger ale 30 Minuten, wird in einem
Hinweislabel angezeigt, zu welchem Zeitpunkt die Datenverbindung bei fortdauernder
Passivität des Users geschlossen werden wird.
Beträgt die Differenz mehr als 30 Minuten, wird die Datenbankverbindung geschlossen und
ein entsprechender Hinweis angezeigt.

Bei der Gestaltung der Routine, die die Datenbankverbindung (nach Inaktivität) schließt, sind
eventuell einige Aspekte zu beachten:
- Verfügt das Datenbank-Zugriffsystem oder das Netzwerk über einen integrierten TimeOut-Mechanismus,
den man einbeziehen kann?
- Sollen die letzten Änderungen des Users vor dem Schließen automatisch in der Datenbank gespeichert
oder verworfen werden?
- Ist eine Konsistenzprüfung der aktuellen Bearbeitungen erforderlich, um entscheiden zu können, ob die letzten Änderungen zu speichern sind oder nicht? Ist es zweckmäßig, die noch nicht gespeicherten Modifikationen in einer externen Datei statt in der Datenbank abzulegen?
- Ist der System-Administrator zu informieren?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbankverbindungen... 
Autor: I.V.
Datum: 02.11.16 13:02

Hallo Franki, hallo Manfred,

ich finde es erst mal toll, das ihr euch Zeit nehmt und euer Wissen und Erfahrungen teilt.
Danke hierfür.

Ich überlege gerade ob ich mein Problem gut genug beschrieben habe.

Also das eigentliche öffnen der DB (rs.Open....) passiert tatsächlich erst dann, wenn Daten abgefragt, oder geschrieben werden. Ist das erledigt, schließe ich das Recordset direkt wieder.

Was allerdings die ganze Zeit aktiv ist, ist die Connection....

Diese definiere beim initialisieren des Programms (Set Con = New ADODB.Connection ...)
Hier prüfe ich, ob die DB erreichbar ist.

Das Problem hierbei ist, wenn die Verbindung (con) aktiv ist, kann ich z.B. bei einer Access DB keine Wartung machen, weil es ja eine Verbindung gibt.

In wieweit eine solche Verbindung Ressourcen raubt weiß ich auch nicht, aber das sind die Verbindungen die ich meine und die ich gerne trennen möchte.

Gruß Ingo

Wer aufhört sich zu verbessern, hört auf gut zu sein.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datenbankverbindungen... 
Autor: Franki
Datum: 19.11.16 04:12

Hallo Ingo,

Zitat:


Also das eigentliche öffnen der DB (rs.Open....) passiert
tatsächlich erst dann, wenn Daten abgefragt, oder geschrieben
werden. Ist das erledigt, schließe ich das Recordset direkt
wieder.


Gut so

Zitat:


Was allerdings die ganze Zeit aktiv ist, ist die Connection....
Diese definiere beim initialisieren des Programms (Set Con =
New ADODB.Connection ...)
Hier prüfe ich, ob die DB erreichbar ist.


Na ja, beim Initialisieren kann sie ja erreichbar sein, beim späteren Zugriff nicht, da müsstest du ebenfalls jeweils bei jeder Abrfrage prüfen, ob die Connection noch steht.

Zitat:


Das Problem hierbei ist, wenn die Verbindung (con) aktiv ist,
kann ich z.B. bei einer Access DB keine Wartung machen, weil
es ja eine Verbindung gibt.


Dazu hat dir ja ManfredX schon wichtige Hinweise gegeben.
Aber anders gefragt: Wie oft wartest du denn die Access DB? Das machst du ja bstimmt nicht täglich oder wöchentlich. Und womit wartest du sie? Mit deinem eigenen Programm oder mit Windows/Access?

Zitat:


In wieweit eine solche Verbindung Ressourcen raubt weiß ich
auch nicht, aber das sind die Verbindungen die ich meine und
die ich gerne trennen möchte.


Also wenn die User ihren PC einfach anlassen läuft dein Programm ja noch. Also baue da einen entsprechenden Timer ein und beende das Programm bzw. die Verbindung zur DB. Wie das Timer Intervall zu setzen ist, hängt von deiner Umgebung ab, 30 Minuten könnte z.B. eine Mittagspause sein, 2 Stunden bedeutet, der User hat Feierabend usw.

Aber wann machst du denn die "Wartung" bestimmt nicht in der Nacht, wenn alle Mitarbeiter abwesend sind egal ob ihre PCs noch laufen.

Gruß´
Frank
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