Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mehrere Nutzer an einer Datenbank - Aktualisierung? (https://www.delphipraxis.net/45345-mehrere-nutzer-einer-datenbank-aktualisierung.html)

davar 4. Mai 2005 15:04

Datenbank: MySQL • Version: 4.1 • Zugriff über: noch gar nich..

Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
Hallo Leute,

bin schon ganz vorsichtig beim Fragen, gehört wahrscheinlich auch zum Datenbank-Grundwissen, habe jedoch auch im Forum nichts dazu gefunden.

Mehrere Leute sollen an einer MySQL-Datenbank arbeiten, sagen wir mal programmiert mit den Zeos-Komponenten (wenn das eine Rolle spielt). Wie läuft der Aktualisierungsvorhang währenddessen? Wird dann eingestellt, dass nach bestimmter Zeit die Daten aufgefrischt werden oder wie macht man das? Es kann ja immer wieder vorkommen, dass zwei oder mehr Leute fast gleichzeitig denselben Datensatz bearbeiten möchten..


MfG

davar

freak4fun 4. Mai 2005 15:19

Re: Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
Vielleicht kann man vor dem Updatebefehl prüfen, ob darauf zugegriffen wird. :gruebel:

MfG
freak

davar 4. Mai 2005 15:23

Re: Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
Zitat:

Zitat von freak4fun
Vielleicht kann man vor dem Updatebefehl prüfen, ob darauf zugegriffen wird. :gruebel:

MfG
freak

Ich schätze mal, dass zwei Leute genau zum gleichen Zeitpunkt etwas ändern ist sehr unwahrscheinlich. Viel mehr stell ich mir das Problem so vor:

A sucht die Telefonnummer vom Kunden Meier, um ihn anzurufen. Er findet die Nummer und zu dem Zeitpunkt wird er vom Chef zu einer Besprechung gerufen.
B hat währenddessen die Telefonnummer vom Kunden Meier geändert, weil diese sich geändert hat.
A setzt sich wieder an seinen Computer und sieht...... ja, was? die alte oder die neue Telefonnummer?


MfG

davar

Jasocul 4. Mai 2005 15:59

Re: Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
Er sieht selbstverständlich die alte Nummer.

Ein regelmäßiges Refresh vom Server an den Client ist ungewöhnlich und wird üblicherweise auch nicht gemacht. Vielleicht bei der einen oder anderen Spezial-Anwendung.
Eine Refresh-Anforderung wird vom Client an den Server geschickt.
Beispiel:
- Datensatz aus Liste auswählen und in einem anderen Fenster zur Bearbeitung anzeigen.
- Datensatz speichern.
- Die Liste muss aktualisiert werden, damit man die Änderungen auch sieht. Dabei wird normalerweise auch eine Refresh-Anforderunf für die anderen Datensätze an den Server geschickt.

Man kann dem Anwender ntürlich noch einen Knopf anbieten für einen manuellen Refresh. Standard-Taste für Aktualisierungen ist F5. Kennst du bestimmt aus deinem Web-Browser. Dort werden deine Übersichten auch nicht automatisch aktualisiert.

Stefan Dieler 4. Mai 2005 16:10

Re: Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
Hallo,

ich habe mal damit angefangen folg. Prozedur dafür zu schreiben, die per UDP Daten versendet.

Schnell erklärt sollte das so funktionieren:
Vor jedem Post wird per UDP die Tabelle, die geändert wird, an die anderen Benutzer gesendet. Dort wir dann die Tabelle in dem UDP-Datenstrom aktualisiert.

Aber ich habe das ganze noch nicht zu Ende gebracht, muss ich irgendwann mal machen. Bis jetzt ist muss man halt manuell aktualisieren.

Bei anderen Datenbanken gibt es sowas wie NotificationServer, aber bei MySQL leider nicht.

alzaimar 7. Mai 2005 17:19

Re: Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
Das mit Refresh habe ich ähnlich gelöst. Nicht mit UDP (weil ich zu blöd bin), sonder mit mailslots. Aber egal. Es ist verdammt aufwändig und hat zu massiven Problemen geführt, weil der Client ab und an beim refreshen sich selbst ins Knie geschossen hat (stichwort: Threadsafe programmieren). Also mussten wir im Client ständig die Refreshs wieder puffern, weil der Client gerade irgendwas physes gemacht hat.

Wir haben es zwar hinbekommen, aber schön ist das nicht. Mittlerweile verwenden wir einen zentralen 'Cache' (als Mittelschicht). Dieser Cache refresht die Tabelle (Aktueller Zustand eines Maschinenparks) alle 60 sec vom SQL-Server. Die Clients bedienen sich bei diesem zentralen Cache nach Bedarf. Das ist wesentlich sicherer, und auf die paar Sekunden kommts nicht drauf an.

Bei der Kunden-Telefonnummer, die sich -hupsa- mal eben ändert, ist das natürlich ärgerlich. Dagegen haben wir ein auto-timeout. Der Mitarbeiter, der also zur Besprechung geht, kommt gar nicht in die Verlegenheit, eine verdammt alte Telefonnummer zu sehen, weil der Client ihn ja nach 1 Minute rauswirft.

Abschliessend sei gesagt, das dieses Refresh der reinen Metapher einer Mehrbenutzer-DB widerspricht. Die Clients kommen ja (in einer grossen Umgebung) vor lauter Refresh gar nicht mehr zum Ausruhen... Aber, cool ist es schon.

DGL-luke 7. Mai 2005 21:18

Re: Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
ein ganz einfaches client seitiges "sie waren länger als 1 minunte nicht da. wollen sie nicht mal f5 drücken?"
würde doch völlig reichen, oder?!

alzaimar 8. Mai 2005 07:49

Re: Mehrere Nutzer an einer Datenbank - Aktualisierung?
 
He he, kommt drauf an. Bei Anwendungen, bei denen es wichtig ist, *wer* gerade Änderungen vornimmt, würde ich das Auto-Logoff bevorzugen. Bei anderen Anwendungen haben wir den Zeitpunkt der letzten Aktualisierung eingeblendet ('Public Access' Anwendungen). Wenn das dann noch nach ein paar Minuten rot wird, oder so ein von Dir vorgeschlagener Hinweis kommt, umso besser. Es kommt eben immer auf die Einzelanwendung an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz