Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Paralleler Mehrfachzugriff auf SQl-Datenbank (https://www.delphipraxis.net/10181-paralleler-mehrfachzugriff-auf-sql-datenbank.html)

bender251 13. Okt 2003 12:36


Paralleler Mehrfachzugriff auf SQl-Datenbank
 
Hallo

wieder mal ein Problem: Also ich habe bei meinem Programm SQL (localSQl) verwendet. Das Problem ist, dass mehrere Anwender im Netzwerk über ein gemeinsames Netzlaufwerk Zugriff auf die Datenbanken haben müssen. d.h. es kann passieren, dass 2 oder mehr Schreib- oder Lesezugriffe auf die Datenbank gleichzeitig erfolgen. Bei mir soll, wenn die Checkbox beim jeweiligen User aktiviert ist ein Feld in der Datenbank hochgezählt werden. Das Problem ist, dass das nicht funktioniert.

Also wenn ein User auf absenden klickt kann kein anderer User was in die Datenbank schreiben.

Ist es möglich, dass mehrere User gleichzeitig auf eine Datenbank zugreifen? Oder kann ich abfragen zur Laufzeit, ob der Schreibversuch gelungen ist. Dann könnte ich eine Schleife schreiben in der das Programm immer wieder versucht zu schreiben bis der Schreibversuch erfolgreich war. Ungefähr so:

Delphi-Quellcode:
REPEAT BEGIN
  Query1.ExecSQL;
  sleep(1000)     //um die Datenbank nicht zu überfluten
UNTIL "Schreibversuch erfolgreich"
Oder geht das mit localSQL gar nicht? Geht das denn mit MySQL, dass mehrere User gleichzeitig schreiben?

Schonmal Danke im Voraus
Gruß bender251

Tyler 13. Okt 2003 12:48

Re: Paralleler Mehrfachzugriff auf SQl-Datenbank
 
Hallo,

in meiner LocalSQL-DB hab ich es so geregelt, das ich mir ein bestimmtes Feld nehme, und dort, wenn ich mit meinem Programm den entsprechenden Datensatz bearbeite, einen bestimmten Wert setze, z.B.

UPDATE mydb SET inwork = 'ja'

(oder ähnlich)

Andersrum liest jedes Programm vor einem Schreibversuch genau dieses Feld aus, und kann so herausfinden, ob an dem Datensatz gerade gearbeitet wird.

Hat der Anwender seine Arbeit am Datensatz beendet, wird das Feld "inwork" einfach wieder zurückgesetzt und somit der Datensatz freigegeben.

Zugegeben, nicht sonderlich elegant und auch nicht die optimale Lösung, aber was besseres ist mir bisher nicht eingefallen.


mfG

Honie 13. Okt 2003 14:18

Re: Paralleler Mehrfachzugriff auf SQl-Datenbank
 
HI,

also normalerweise ist ja gerade der Sinn eines SQl-Servers im Netzwerk mehrere User gleichzeitig den
Zugriff auf die Datenbank zu gestatten. Nun werde ich aus der Fragestellung nicht schlau, was localSQL
ist.

Generell hat die Sprache SQL nicht viel damit zu tun, ob eine DB Netzwerkfähig ist oder nicht, sondern
die Datenbank/Treiber an sich regeln das. Normale Desktop Datenbanken /Paradox/Acces/DBase waren ursprünglich
(wie der Name schon sagt) lokale Datenbanken, die im allgemeinen nur von einem Benutzer benutzt wurden.

Durch künstliche Erweiterung (Ragelocking/Recordlocking) sind auch diese DBs teilweise (mit z. T. großen Einschränkungen) Netzwerkfähig geworden. Wohingegen Datenbankserver (Software) wie Oracle/Informix/Interbase von Haus aus auf den Netzwerkbetrieb designed worden sind. Interbase z.B. läuft als eigenständiges Programm (Dienst) und kann somit lokale als auch Fernzugriffe parallel verarbeiten, so dass es sowohl als lokale Testumgebung als auch als Produktiver Datenbankserver ohne Änderung des Codes/Treibers funktioniert.

Also SQL kann man mittlerweile mit jedem Datenbanksystem benutzen (auf jedenfall die DML). Die Frage des Multiuser Supports ist somit eher eine Frage des Datenbanksystems (Desktop/Server).

Für genauere Ausagen benötige ich mehr Infos, was Ihr unter localSQL versteht.

Gruß

Memo 13. Okt 2003 14:42

Re: Paralleler Mehrfachzugriff auf SQl-Datenbank
 
Zitat:

Zitat von Honie
Nun werde ich aus der Fragestellung nicht schlau, was localSQL
ist.

Zitat:

Was ist Local SQL?

Local SQL ist die Untermenge der Spezifikation SQL-92, die für den Zugriff auf dBASE-, Paradox- und FoxPro-Tabellen verwendet wird. Beim Empfang von Local SQL-Anweisungen aus Front-end-Anwendungen übersetzt die Borland Database Engine (BDE) die Anweisungen in BDE-API-Funktionen.
Schau ins BDE-Verzeichnis.

Zitat:

Ist es möglich, dass mehrere User gleichzeitig auf eine Datenbank zugreifen? Oder kann ich abfragen zur Laufzeit, ob der Schreibversuch gelungen ist. Dann könnte ich eine Schleife schreiben in der das Programm immer wieder versucht zu schreiben bis der Schreibversuch erfolgreich war. Ungefähr so:
Informier dich mal über Transaktionen.

bender251 13. Okt 2003 19:19

Re: Paralleler Mehrfachzugriff auf SQl-Datenbank
 
@Tyler: Danke für den Tipp..........hab seid ca 1,5 Stunden versucht MySQL zum laufen zu kriegen. Will irgendwie net. Weiß eh net welche Komponenten ich dann einsetzen müsste. Naja ich werds mal mit deinem Tipp versuchen. Das werd ich wohl gebacken kriegen, denke ich mal.

Gruß bender251


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 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 by Thomas Breitkreuz