AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Gleichzeitiger Zugriff auf MySQL DB...
Thema durchsuchen
Ansicht
Themen-Optionen

Gleichzeitiger Zugriff auf MySQL DB...

Ein Thema von kico · begonnen am 18. Aug 2004 · letzter Beitrag vom 23. Aug 2004
Antwort Antwort
kico

Registriert seit: 2. Jun 2004
13 Beiträge
 
#1

Gleichzeitiger Zugriff auf MySQL DB...

  Alt 18. Aug 2004, 10:34
Habe ein kleines Problem mit meiner MySql Datenbank und die gleichzeitige Verwendung einer Tabelle durch 2 (oder mehrer User).

Situation:
ein DB Grid zeigt mir eine Artikelliste, bei doppelklick auf einen Artikel werden mir details zum artikel zur bearbeitung (Datensatz wird dabei mit .edit angesprochen) in einem neuen Fenster angezeigt. Beim schliessen des Fensters werden die daten wieder gepspeichert (.post). Soweit so gut.

Problem:
Sobald ein anderer User mein Programm geöffnet hat und sich "nur" die Artikelliste anzeigen lässt (keinen Datensatz bearbeitet) und ein weiter user versucht einen artikel zu ändern hängt mein programm beim .post
d.h. die tabelle scheint irgendwie komplett gesperrt zu sein.

Umwelt:
Ich benutze Delphi 7, MySQL, CoreLab MyDAC (zum direkten ansprechen der DB)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Gleichzeitiger Zugriff auf MySQL DB...

  Alt 18. Aug 2004, 10:59
Kann bei MySQL eigentlich nicht der Fall sein:

1, Unterstützt nur bei InnoDB-Tabellen Transaktionen
2, Unterstützt das Muli-Versions-Konzept. D.h. Ein Schreibopteration kann keine Leseoperationen blockieren.

Kannst Du etwas Code posten bzw. ein Minimalbeispiel bereitstellen, wo dieses Verhalten auftritt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
kico

Registriert seit: 2. Jun 2004
13 Beiträge
 
#3

Re: Gleichzeitiger Zugriff auf MySQL DB...

  Alt 21. Aug 2004, 10:41
habe mal das problem weiter eingeschränkt...

ich benutze die MyDAC Komponenten von Corelab um MySQL anzusprechen. dort gibt es die Komponente MyQuery und MyTable. MyQuery setzt ein normales Query ab und gibt mir einen Result. MyTable gibt mir die komplette Tabelle (sehr praktisch: man kann mit filtern die erbenismenge eingrenzen usw.) Ich habe bei meinen DBGrid als Source die MyTable Komponente benutzt und die scheint mir die komplette Tabelle für schreibzugriffe zu sperren. Benutzte ich hingegen ein (My)Query funktioniert es einwandfrei.

Die Komponente MyTable besitzt die Eigenschaft readonly die auch brav auf enable steht...in der Dokumentation habe ich auch nichts gefunden...

Die Frage an euch: kennt sich jemand mit den Koponenten von CoreLab aus und hat eine Lösung für mich (habs halt jetzt mit Querys gemacht ist aba nicht so schön ... siehe Filter)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Gleichzeitiger Zugriff auf MySQL DB...

  Alt 21. Aug 2004, 10:48
Core-Labs komponenten kenne ich nur Testweise (Haben andere im Einsatz).

Ich würde grundsätzliche keine TTable-Komponente verwenden und bei den TQuery-Komponenten schon die SQL-Anweisungen so absetzen, das nur eine minimale Datenmenge vom Server zum Client geliefert werden muss. Filter ist zwar recht necht, aber nur für Desktop-Datenbanken zu empfehlen. Für SQL-Server-Datenbanken kann sich dies (bei entsprechender Datenbankgröße) als Performance-Killer erweisen (vor allem bei MySQL, wo es keine Serverseitigen Curser gibt).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
ahenne

Registriert seit: 8. Jul 2004
Ort: Sankt Augustin
3 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Gleichzeitiger Zugriff auf MySQL DB...

  Alt 21. Aug 2004, 12:02
Hallo kico !

Wenn ich das recht verstehe, tritt das Problem auf, wenn der erste Benutzer die Tabelle in den Edit-Modus versetzt und der dritte dann auch versucht, die Tabelle zu editieren.

Das kannst Du doch ganz einfach abfangen, indem Du in der Ereignisbehandlung von CRDBGrid1.OnDblClick einträgst:
Delphi-Quellcode:
If MyTable1.State=dsBrowse // Ist die Tabelle im Lese-Modus
Then MyTable1.Edit;

If MyTable1.State=dsEdit // Ist die Tabelle schon im Edit-Modus
Then {Benutzer darf jetzt nicht schreiben, weil das schon ein anderer tut}
Ich selbst benutze MyTable nur zum Anzeigen und Filtern, für das Ändern benutze ich UPDATE-Statements mit MyQuery. Damit ist die Tabelle nur Sekundenbruchteile gesperrt.

Hoffe, das war hilfreich.

Lg
Andreas
Andreas
  Mit Zitat antworten Zitat
kico

Registriert seit: 2. Jun 2004
13 Beiträge
 
#6

Re: Gleichzeitiger Zugriff auf MySQL DB...

  Alt 23. Aug 2004, 15:24
Danke für eure bemühungen...habe das Problem jetzt gelöst:

ich deaktiviere einfach mein DBgrid (eigentlich MyTable.active := false)
dann sende ich mein UPDATE des Datensatzes und dannach aktiviere ich wieder mein grid, bzw meine Table

jetzt funktionierts
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz