AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADS im Netzwerk - Zugriffskonflikte vermeiden
Thema durchsuchen
Ansicht
Themen-Optionen

ADS im Netzwerk - Zugriffskonflikte vermeiden

Ein Thema von eddy · begonnen am 30. Nov 2005 · letzter Beitrag vom 1. Dez 2005
Antwort Antwort
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#1

ADS im Netzwerk - Zugriffskonflikte vermeiden

  Alt 30. Nov 2005, 20:32
Datenbank: ADS • Version: 7.0 • Zugriff über: stADS_LOCAL
Hallo Leute,

nachdem ich nun meine Auftragsbearbeitung auf ADS (AdsServerTypes := [stADS_LOCAL]) umgestellt habe, kämpfe ich nun mit den Tücken im Netzwerk.

Problem 1:
Auf (ArbeitsPlatz) AP1 lege ich einen Kunden an, auf AP2 wird die Liste aber nicht automatisch aktualisiert. Ein Refresh löst das Problem zwar, aber eben nicht automatisch.

Problem 2:
Wenn ich auf einem AP einen Datensatz lösche (beispielsweise eine Adresse) und dieser war gerade auf einem anderen AP geöffnet, gibt es einen ADS-Fehler (5035).

Bevor ich nun wie zu BDE-Zeiten anfange, diese Fehler selbst programmtechnisch zu vermeiden, möchte ich klären, ob nicht ADS schon entsprechende Mechanismen enthält, diese Fehler zu vermeiden, ich diese wegen fehlendem Wissen nur noch nicht zu nutzen verstehe.

mfg
eddy
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ADS im Netzwerk - Zugriffskonflikte vermeiden

  Alt 1. Dez 2005, 08:16
Hallo eddy,

Problem 1:

Das hat nichts mit ADS zu tun, sondern damit, wie Delphi Datenmengen handlet. Du bist selber für einen Refresh verantwortlich. Soll das automatisch passieren, kannst Du dafür einen Thread oder einen Timer verwenden.

Problem 2:
Fehler 5035 heisst, dass der Satz nicht gesperrt werden konnte. Diese Exception wird natürlich immer geworfen, wenn zwei User denselben Satz bearbeiten wollen. Du solltest diese auch IMMER abfangen.

Delphi-Quellcode:
try
  edit;
except
  ShowMessage('Kunde konnte nicht berbeitet werden');
end;
Wie sollte denn ein DBMS das automatisch machen ?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: ADS im Netzwerk - Zugriffskonflikte vermeiden

  Alt 1. Dez 2005, 09:37
Also ich kenne mich mit ADS nicht aus,
aber es wäre sicherlich hilfreich eine Liste abfragen zu können, die alle akutell gesperrten Sätze einer Tabelle hat.

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: ADS im Netzwerk - Zugriffskonflikte vermeiden

  Alt 1. Dez 2005, 09:41
Diese Funktion gibt es: TAdsTable.GetAllLocks
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#5

Re: ADS im Netzwerk - Zugriffskonflikte vermeiden

  Alt 1. Dez 2005, 13:20
Hallo Leute,

zum Refresh:
So etwas hatte ich bereits zu BDE-Zeiten realisiert, eine Tabelle, in der stand: AP Nr, Datenbank-Name und Record-ID. Bevor ein Zugriff erfolgte, wurde dann die jeweilige Datenbank aktuallisiert. Ging zwar, war aber eigentlich einer der Gründe, warum ich das Datenbanksystem gewechselt habe. Solche Dinge stellen sich aber für gewöhnlich immer erst konkret heraus, wenn man mit einem System arbeitet.

zum Sperren von Sätzen:
Dem Hinweis von Union folgend bin ich auf:

 AdsTable.AdsGetAllLocks(LockArray); gestoßen, aber da erhalte ich nur die Informationen über die Sätze, die ich auf dem aktuellen AP mit AdsTable.AdsLockRecord(AdsTable.RecNo); gesperrt habe.

Sinnvoll wäre doch hier eine vom Datenbanksystem komplett verwaltete Tabelle, die Auskunft darüber gibt, welcher Satz von welchem Arbeitsplatz gesperrt wurde.

Nebeneffekt von AdsLockRecord: ich kann zwar immer noch von einem anderen AP aus den Datensatz löschen, aber nicht mehr vom eigenen.

Vielen Dank für die bisherige Unterstützung.
Sollte sich eine effiziente Lösung finden, hinterlege ich diese hier im Forum.

mfg
eddy
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: ADS im Netzwerk - Zugriffskonflikte vermeiden

  Alt 1. Dez 2005, 13:28
Zitat von eddy:
zum Refresh:
So etwas hatte ich bereits zu BDE-Zeiten realisiert, eine Tabelle, in der stand: AP Nr, Datenbank-Name und Record-ID. Bevor ein Zugriff erfolgte, wurde dann die jeweilige Datenbank aktuallisiert. Ging zwar, war aber eigentlich einer der Gründe, warum ich das Datenbanksystem gewechselt habe. Solche Dinge stellen sich aber für gewöhnlich immer erst konkret heraus, wenn man mit einem System arbeitet.
Checke mal Notification beim ADS

Zitat:
zum Sperren von Sätzen:
Dem Hinweis von Union folgend bin ich auf:

 AdsTable.AdsGetAllLocks(LockArray); gestoßen, aber da erhalte ich nur die Informationen über die Sätze, die ich auf dem aktuellen AP mit AdsTable.AdsLockRecord(AdsTable.RecNo); gesperrt habe.
Du bekommst darüber nur Deine eigenen Sperren.

Zitat:
Sinnvoll wäre doch hier eine vom Datenbanksystem komplett verwaltete Tabelle, die Auskunft darüber gibt, welcher Satz von welchem Arbeitsplatz gesperrt wurde.
und das gibt es auch, wenn eine zentrale Kontrollinstanz vorhanden ist. AdsMgGetLocks funktioniert aber nur bei Client/Server, nicht dem Local Server.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  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 23:24 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