Toon posts:

[access] 'Runtime error 3008 Tabel exclusief geopend'? *

Pagina: 1
Acties:
  • 343 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
In mijn database heb ik een form staan en op die form heb ik een subform staan en ook een combobox. De combobox laat toe dat je kan kiezen voor een andere backup, waarbij de subform zich dan meteen verandert in de overeenkomende gekozen waarde. Indien de gebruiker een andere waarde wil toevoegen in de tabel backup kan hij via dubbele klik terechtkomen in een nieuwe form.
De nieuwe form is gebaseerd op dezelfde tabel als de subform.
Bij dubbelklikken op de combobox zou de nieuwe form moeten open gaan, maar ik krijg telkens het volgende runtime error:
run time error 3008
de tabel backup is exclusief geopend door een andere gebruiker of geopend met behulp van de gebruikersinterface en kan niet door via programmering worden geprogrammeerd.

Bij een zoektocht op het net, eerst in het nederlands vond ik geen echt relevante uitleg. Later deed ik mijn zoektocht over in het engels en werd ik naar de volgende url verwezen:
ACC: Second OpenRecordset Fails with Run-Time Error 3008

Hier kan je natuurlijk wel haarfijn lezen waarover het probleem gaat en ik slaagde er ook in om de fout opnieuw te regenereren in de database northwind, maar er staat geen oplossing bij. Er wordt wel verwezen naar een pagina in de Microsoft Jet Database Engine Programmer's Guide, maar ik weet niet waar ik dan verder moet zoeken. Ook het zoeken naar de OpenRecordset method heeft niets opgeleverd.

Heb nog een andere link gevonden namelijk:
http://database.ittoolbox...runtime-error-3008-946358

Maar hetgeen me daarin wordt uitgelegd begrijp ik niet. Hier volgt de uitleg:
Run-time error 3008

This is how I do it. First I have a Form_Timer event routine. Then, right before I open my continus form non modally, I set the TimerInterval to 1000. In the Form_Current event of the continus form, I set the primary key of the calling form in a global variable (one dimsioned Publicly in a module). Every time the on timer event fires I check the value in my global variable to see if it has changed. If it has then I move the calling form to that record.

I have a diary database and on my "Entries" form I have a search command. This sets the forms TimerInterval and calls the Search form. The code below is the on timer event of the calling form.

Ik had gehoopt dat "the code below" een oplossing zou bieden, maar "the code bellow" staat er niet...

Kan iemand me helpen? :'(

Gek genoeg gebruik ik exact dezelfde code voor een andere form die wel open gaat en waarmee er geen probleem is. Heb op alle gebioed beide forms en code achter de forms en comboboxen nagekeken en vind hoegenaamd geen enkel verschil.
:O

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verzin even een titel voor je topic en doe een topicreport. Alleen 'Access' zegt namelijk niks.

On topic:
De oorzaak staat er toch redelijk goed bij in het MS artikel. Dan weet je toch ook de oplossing? M.a.w. controleer het soort lock / recordset wat je gebruikt in je form...

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Als titel zou ik runtime error 3008 tabel exclusief geopend zetten.

Heb ondertussen nog wat verder gezocht en moet in feite een subroutine schrijven die de waarde geeft aan de combobox. En deze procedure roep ik op bij het openen, laden,... van de form.

Ik heb de volgende code, maar ik vermoed dat ik meer code moet zetten, ik bedoel er zijn vast stukjes code die ontbreken. Als foutmelding krijg ik "object variable or with block variable not set"
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Populate_cboBackup()

Dim rs As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim strSQL As String

Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
strSQL = "SELECT &  qryBackupNaam.bacBackupIdn, qryBackupNaam.[Naam/N°] FROM qryBackupNaam"
rs.Open strSQL, cnn, adOpenStatic, adLockReadOnly, adCmdText


With Me!cboBackup
.RowSourceType = "table/query"
.BoundColumn = 1
Set .Recordset = rs
End With

rs.Close
Set rs = Nothing


End Sub

Verwijderd

Topicstarter
Ok, ben al een beetje verder opgeschoten, maar mijn fout blijft verder lopen.
Dit is de code om mijn combobox te vullen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Populate_cboBackup()

Dim rs As New ADODB.Recordset
rs.Open "SELECT qryBackupNaam.bacBackupIdn, qryBackupNaam.[Naam/N°] FROM qryBackupNaam;", CurrentProject.AccessConnection, adOpenForwardOnly, adLockOptimistic
With Me.cboBackup
.RowSourceType = "table/query"
.BoundColumn = 1
Set .Recordset = rs
End With

rs.Close

End Sub


Nu ben ik op zoek om ook de subform op het formulier op die manier te voorzien van de recordset.
Maar nu klopt natuurlijk de .RowSourceType niet, ik zoek nog even verder en hoop op die manier de runtime error 3008 op te lossen.

Verwijderd

Topicstarter
Graag toch wat hulp voor de code om mijn subform te vullen.
Ik vulde het volgende in, maar natuurlijk een combobox is geen subform en ik denk dat ik verkeerd bezig ben. Krijg nu altijd de volgende foutmelding: 'Kan de methode of gegevenslid niet vinden.' Hij stopt dus bij de zin Set . recordset = rsform.
Mijn code is de volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Populate_fsubBackup()


Dim rsform As New ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT tblBackup.bacBackupIdn, tblBackup.bacNaam, tblBackup.bacVoornaam, tblBackup.bacStamnummer, tblBackup.bacAdministratieId, tblBackup.bacTaalId, tblBackup.bacTelefoonnummer, tblBackup.bacFaxnummer, tblBackup.bacGsmnummer, tblBackup.bacEmail, tblBackup.bacOpmerkingen FROM tblBackup;"
rsform.Open strSQL, CurrentProject.AccessConnection, adOpenForwardOnly, adLockOptimistic
Set rsform = Me.fsubBackup.Form.Recordset

With Me.fsubBackup
.Form.Recordset = strSQL

.SourceObject = "table/query"
Set .Recordset = rsform
End With

rsform.Close
End Sub

Verwijderd

Topicstarter
OK, nu heb ik de volgende code gevonden (bij het lezen op deze website van de topis recordsource veranderen) om mijn subformulier te vullen. Eenvoudiger kon het niet, zocht het veel te ver!!! 8)7
code:
1
2
 Me.fsubBackup.Form.RecordSource = "tblBackup"
 Me.fsubBackup.Form.Requery


Maar mijn probleem is helaas niet opgelost. :'(
Ik krijg nog steeds de runtime error 3008!!! Zal ik toch moeten werken met een timer?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Na, je doet echt veel te moeilijk én je probleem staat echt goed omschreven in de link die je geeft:
code:
1
2
strSQL = "SELECT &  qryBackupNaam.bacBackupIdn, qryBackupNaam.[Naam/N°] FROM qryBackupNaam"
rs.Open strSQL, cnn, adOpenStatic, adLockReadOnly, adCmdText

Dit lockt je tabel zoals omschreven, maar ipv heel dat recordset gedoe werkt dit ook:

code:
1
2
3
cboBla.rowsource = qryNaam
of 
cboBla.rowsource = sqlString


en denk erom dat een variabele zonder "" komt maar een letterlijke tekst wél tussen "" moet

[ Voor 10% gewijzigd door Lustucru op 04-12-2007 20:48 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
ja, dat vullen van die combobox had eenvoudiger gekunt.
Maar ook al vul ik de combo en de subform op die manier ik blijf die runtime error genereren. Heb ondertussen nog verder gedolven op het internet en ik kan je verzekeren er zijn tientallen topics met deze runtime error. Maar nooit wordt de zaak echt opgelost.
Hoe kan ik die tabel unlocken?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Je zult je code en je formulieren na moeten lopen waar dezelfde tabel gebruikt wordt en bekijken hoe die geopend wordt. (alleen lezen/dynamisch/ statisch etc) Standaard is er een enkel probleem om een combobox te vullen met een (query op) een tabel en dezelfde tabel ergens anders te gebruiken.
Check ook het tabblad geavanceerd bij opties.

[ Voor 7% gewijzigd door Lustucru op 04-12-2007 21:54 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Ik gebruik de tabel zowel bij de combobox als bij de subform. Maar het gekke is dat ik net hetzelfde doe voor de coordinators, waar ik ook de combobox vul met een query gebaseerd op de tabel coordinators en de overeenkomende subform vul met de tabel.
Op het tabblad geavanceerd staat een vinkje bij gedeeld of shared.
Ik zette de recordset type to Snapshot en the locks to No Locks. Het probleem is immer hetzelfde.

Verwijderd

Topicstarter
Vermits dat ik identiek hetzelfde doe voor de coordinateur op mijn formulier, ben ik nu systematisch alle eigenschappen gaan nakijken en heb alle eigenschappen aangepast waar nodig.
Maar het probleem is niet weg. Ik vraag me af hoe ik kan kijken wanneer die lock optreed en misschien alzo achterhalen wat de oorzaak is.

Verwijderd

Topicstarter
Ergens las ik iets over het feit dat als je de subform copieert en daarna hernoemt om er dan alzo je inputform van te maken, ondanks je alles aanpast er problemen kunnen opduiken. Dit is nu echt nog het enige verschil... maw opnieuw beginnen. :?

Verwijderd

Topicstarter
Eindelijk de bug is opgelost!
De fout zat op het formulier dat ik wou open doen (en ik maar zoeken op het formulier waar ik de dubbele klik op deed). Er zat een recordvergrendeling op alle records! Zo eenvoudig en zo ingewikkeld uitgelegd door microsoft!http://gathering.tweakers.net/global/smileys/wink.gif
http://gathering.tweakers.net/global/smileys/wink.gif ;) ;)
Pagina: 1