Toon posts:

[VB, ADO] Deadlock voorkomen bij update record

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb hier een vb applicatie waar ik bij de edit functie een record lock. Maar hierdoor worden andere applicatie vast gezet als die ook het record proberen te editten.

Wat ik wil is dat hij dan niet vastloopt maar gewoon een fout melding geeft aan de gebruiker dat het record door iemand anders gewijzigd wordt.

Ik zal dus ergens in moeten stellen dat ik een transaction wil met "no wait"

Maar ik heb gezocht en heb nergens kunnen vinden waar en hoe ik dat moet instellen.

Verbinding maken:
Visual Basic:
1
2
3
4
5
6
  conn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ccm;Data Source=DELL5000"
  
  Set cn = New ADODB.Connection
  cn.Mode = adModeReadWrite
  cn.IsolationLevel = adXactIsolated
  cn.Open conn


Code die uitgevoerd wordt als de gebruiker op edit drukt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = cn
    
    SQL = " UPDATE PRODUCTGROEPEN SET NAAM='" & lstvw_ProductGroepen.SelectedItem.Text & "' WHERE ID=" & lstvw_ProductGroepen.SelectedItem.SubItems(1)
    
    cmd.ActiveConnection = cn
    cn.BeginTrans
    cmd.CommandText = SQL
    cmd.CommandType = adCmdText
    cmd.Execute test

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Heb je gezocht in de VB handleiding of die van ADO?
Ik zie het als ADO functionaliteit.
Heb je ook geprobeerd: deadlock? timeout?

Verwijderd

Heb je ook al gedacht aan een timestamp (en dan zonder record lock)?

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Ik heb er ook flink naar lopen zoeken en het bleek dat je het in de SQL server sessie moet instellen en het niet echt een ADO functie is.
Als je de connectie geopend hebt moet je het SQL statement "SET LOCK_TIMEOUT 0" uitvoeren, dit zorgt ervoor dat timeouts direct gemeld worden.
Je krijg dan de foutmelding -2147467259 Lock request time out period exceeded, die moet je natuurlijk wel weer afvangen.

Verwijderd

Topicstarter
Bedankt Lister,

SET LOCK_TIMEOUT 0 is inderdaad de oplossing. Ik dacht zelf dat ik het moest zoeken bij ADO.

Verwijderd

Topicstarter
Nog even ter aanvulling:

Het error nummer blijkt -2147217871 te zijn.
Pagina: 1