Autor Beitrag
Alice
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Fr 13.12.13 09:31 
Hallo,

in einer Funktion die ein update per SQL zur db (postgres) schreibt,
gibt es Probleme. Meistens funktioniert sie, manchmal jedoch nicht,
ich glaube zu erkennen das es meistens dann nicht Funktioniert, wenn die DB unter Last
steht. Am update Befehl selbst kann es nicht liegen, da es ja in einer Isolierten Testumgebung
einwandfrei Funktioniert.


Das SQL Statement sieht aus wie folgt:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
Update "Tabname" Set
"Feld12" = 'gfgfdg',
"Feld13" = '111gfdgdf11',
"Feld14" = 'gfdgdf',
"Feld15" = '111vcv11',
"Feld16" = 'fgsgrgtr'
where "ID" = '999999'


Das ganze schicke ich dann per execsql zu DB.

Es ist eine Applikation mit mehreren Usern die zugriff auf "Tabname" haben,
das Feld ID hat einen Index 'BTree' .

Wie kann ich dieses Problem am elegantesten lösen?

thx
Alice

Moderiert von user profile iconMartok: SQL-Tags hinzugefügt
Quitzlinga
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2

Win XP
Delphi 2007 Prof. Codegear Win32
BeitragVerfasst: Sa 14.12.13 09:18 
Hi,

Zitat:
Meistens funktioniert sie, manchmal jedoch nicht,
ich glaube zu erkennen das es meistens dann nicht Funktioniert, wenn die DB unter Last
steht.


anhand der Beschreibung würde ich auf gleichzeitige Zugriffe beim selben Datensatz tippen. Da in einer Testumgebung im allgemeinen weniger Leute arbeiten, tritt da das Problem halt seltener oder überhaupt nicht auf. Was für eine Fehlermeldung wird denn bei einem Fehlschlag ausgegeben ?

MfG

Quitzlinga
Alice Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Mo 16.12.13 15:48 
user profile iconQuitzlinga hat folgendes geschrieben Zum zitierten Posting springen:
Hi,

Zitat:
Meistens funktioniert sie, manchmal jedoch nicht,
ich glaube zu erkennen das es meistens dann nicht Funktioniert, wenn die DB unter Last
steht.


anhand der Beschreibung würde ich auf gleichzeitige Zugriffe beim selben Datensatz tippen. Da in einer Testumgebung im allgemeinen weniger Leute arbeiten, tritt da das Problem halt seltener oder überhaupt nicht auf. Was für eine Fehlermeldung wird denn bei einem Fehlschlag ausgegeben ?

MfG

Quitzlinga


hmm,

die einzelnen Datensätze werden gesperrt beim update, noch eine andere Idee?
Quitzlinga
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2

Win XP
Delphi 2007 Prof. Codegear Win32
BeitragVerfasst: Di 17.12.13 16:30 
Hi,

Zitat:
die einzelnen Datensätze werden gesperrt beim update


gesperrt durch die DB oder eine eigene Sperroutine, die Serialisierbarkeit der Statements sicherstellt ? Wenn durch die DB gesperrt wird (normales Lock auf Satzbasis) kann ja trotzdem noch das Update-Statement losgeschickt werden, bloss schlägt es dann fehl.

Ansonsten : - evt. zuviele Verbindungen
- zu hohe Wartezeit.

Besteht die Möglichkeit, die Fehlermeldung per Try/Except Block und ShowMessage auszugeben oder in eine Log-Datei zu schreiben ?

MfG

Quitzlinga