Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Neueste Beiträge

#21
MS SQL-Server / Re: Query Timeout expired
Letzter Beitrag von PhilS - April 17, 2025, 14:55:05
Zitat von: Stele4 am April 17, 2025, 14:26:12Wie kann ich den Lock verhindern, wenn die ID (Autowert) in der Abfrage vorhanden sein muss?
Komplett verhindern kannst du den Lock nicht so ohne weiteres.
Du kannst aber dafür sorgen, dass Access schnellstmöglich alle Datensätze abruft und damit der Lock nicht mehr nötig ist.
Das geht mit: Recordset.MoveLast
#22
MS SQL-Server / Re: Query Timeout expired
Letzter Beitrag von PhilS - April 17, 2025, 14:51:56
Zitat von: markusxy am April 17, 2025, 13:56:19Die Logik verstehe ich nicht.

Aus Server Sicht werden doch einfach eine bestimmte Anzahl Datensätze abgefragt und das wars.
Was verursacht den Lock?
Das war's erst dann, wenn der Client auch alle Datensätze abgerufen hat.

Client1 sendet: SELECT * FROM EineTAb WHERE XYZ = 'irgendwas';
100 Datensätze entsprechen dem Kriterium. Der Client ruft aber erstmal nur 50 Datensätze ab.
Client2 sendet: UPDATE EineTAb SET XYZ = 'was anderes' WHERE XYZ = 'irgendwas';
Was soll der Server jetzt machen?
Dem Client1 auf Abruf dann die übrigen 50 DS geben, obwohl sie schon nicht mehr dem Kriterium entsprechen?
Gar keine Daten mehr zu der ursprünglichen Abfrage nachliefern, obwohl die UPDATE-Transaktion alle Datensätze betrifft, auch die bereits an den Client gesendeten?
Das wäre beides inkonsistent. Deshalb hält der Server die Sperre auf den vom ersten SELECT betroffenen Datensätzen, bis sie auch abgerufen wurden oder das Recordset des Selects geschlossen wurde.

Das Ganze lässt sich durch das Locking-Verhalten des Servers steuern, aber das kriege ich jetzt ad-hoc nicht belastbar zusammen.


#23
MS SQL-Server / Re: Query Timeout expired
Letzter Beitrag von Stele4 - April 17, 2025, 14:26:12
Ich bin neu auf dem Feld und wuerde Markus zustimmen.
Doch Phil hat wohl wieder recht:

- Access-DB zu -> Abfrage in SSMS wird abgearbeitet.
- Access-DB auf -> auch ok
- Formular auf -> Problem

Die RecordSource des Formulars wird bei Form_Load per VBA geschrieben (als PathThrough-Abfrage).
OpenRecordset habe ich jetzt mit "Type:=dbOpenSnapshot" erweitert.
Das fuehrt aber nicht zum Erfolg.

Wie kann ich den Lock verhindern, wenn die ID (Autowert) in der Abfrage vorhanden sein muss?

Gruss

#24
MS SQL-Server / Re: Query Timeout expired
Letzter Beitrag von markusxy - April 17, 2025, 13:56:19
Zitat von: PhilS am April 17, 2025, 12:49:51Wenn die Tabelle mehr Datensätze enthält, bleibt sie gesperrt, bis du im Access-Form an das Ende der Datensätze navigierst.


Die Logik verstehe ich nicht.
Aus Server Sicht werden doch einfach eine bestimmte Anzahl Datensätze abgefragt und das wars.
Was verursacht den Lock?

OT: Persönlich verwende ich beim Server nur ADO, daher kann ich das Problem natürlich nicht haben.



#25
MS SQL-Server / Re: Query Timeout expired
Letzter Beitrag von PhilS - April 17, 2025, 13:19:56
Zitat von: Stele4 am April 17, 2025, 12:57:36Die Aktionsabfrage in SSMS kommt nicht zum Schluss.
Wenn zur gleichen Zeit das/die Access-Formular(e) geöffnet sind, die, wie oben beschrieben, das Problem auslösen können, wäre das logisch.
Was passiert, wenn du Access komplett schließt und dann die Abfrage im SQL Server Management Studio ausführst?
#26
MS SQL-Server / Re: Query Timeout expired
Letzter Beitrag von Stele4 - April 17, 2025, 12:57:36
Hallo Phil!
Das war wohl nicht eindeutig.

Die Aktionsabfrage in SSMS kommt nicht zum Schluss.
Hier gibt es wohl keine Zeitbgrenzung.

Eine SELECT-Abfrage wird sehr schnell ausgefuehrt. In Access und SSMS.

Gruss
#27
MS SQL-Server / Re: Query Timeout expired
Letzter Beitrag von PhilS - April 17, 2025, 12:49:51
Zitat von: Stele4 am April 17, 2025, 12:43:09Zur Fehlereingrenzung wurde eine aehnliche Abfrage in SSMS ausgefuehrt:
Und?
Ich vermute, dabei gab es das Problem nicht?

Zitat von: Stele4 am April 17, 2025, 12:43:09Der Server ist lokal und die Tabelle nicht riesig.
Aber die Abfrage kommt nicht zum Abschluss.

Woran kann das liegen?
Wenn du in Access eine große Menge Datensätze anforderst, bleibt die entsprechende Tabelle gesperrt bis die Daten vollständig abgerufen wurden.

Ein Klassiker, der dieses Problem verursachen kann:
Du öffnest in Access in Formular, dass an eine Tabelle gebunden ist. Dabei werden nur die ersten X (genaue Zahl weiß ich gerade nicht) Datensätze abgerufen.
Wenn die Tabelle mehr Datensätze enthält, bleibt sie gesperrt, bis du im Access-Form an das Ende der Datensätze navigierst.
Falls du vorher ein Update auf diese Tabelle ausführst, warte der SQL Server bis die Sperre aufgehoben ist, oder bist der Timeout eintritt.

#28
MS SQL-Server / Query Timeout expired
Letzter Beitrag von Stele4 - April 17, 2025, 12:43:09
Hallo!
Auf eine einfache UPDATE-PathThrough-Abfrage in Access meldet der Treiber "... Query TimeOut expired...".

Zur Fehlereingrenzung wurde eine aehnliche Abfrage in SSMS ausgefuehrt:

use MyDb;
UPDATE tblGross
SET Dsc = Dsc + ' solala'
WHERE ID = 1;

Der Server ist lokal und die Tabelle nicht riesig.
Aber die Abfrage kommt nicht zum Abschluss.

Woran kann das liegen?

Gruss

#29
Formular / Re: Form_Load wird uebergangen
Letzter Beitrag von Stele4 - April 16, 2025, 16:32:08
Dank an alle!
Knobbi hat recht.
Ich hatte die Eigenschaft im Editor vergessen.

Gruss
#30
Formular / Re: Form_Load wird uebergangen
Letzter Beitrag von knobbi38 - April 16, 2025, 16:12:25
Zitat von: Stele4 am April 16, 2025, 16:00:21Man merkt es am Fehlen der leeren ComboBoxes.

Nein, daran kann man das nicht merken. Setzte in die Load Ereignisprozedur einen Stop Befehl und dann wird der Debugger dort gestartet. Außerdem muß in der Property "OnLoad"  der Text "[Event Procedure]" stehen.

Gruß Knobbi38