[ACC] dbSeeChanges

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 23-11-2024

Paxlie

chaos en inslag

Topicstarter
Goeiedag,

ik had het volgende probleem. Ik heb een brok VBA-code gebakken en dit werkte altijd perfect, totdat alle tabellen geupload werden naar een SQL-server. Hierna kreeg ik een error bij dat gedeelte van de code. Hij zei namelijk het volgende:

Run-time error '3622':

You must use the dbSeeChanges Option with OpenRecordset when accessing an SQL server table that has an IDENTITY column.

Na flink gezocht te hebben op GOT (leverde 1 topic op met een link naar een andere pagina) en ook nog met google flink gezocht te hebben kan ik nog steeds de oplossing niet vinden. Er wordt in die pagina gezegd dat je de optie dbSeeChanges moet meegeven. Ik heb nu echter al flink wat acties geprobeerd, maar hij blijft de error code geven.

Volgens mij komt dit doordat ik de Recordset alleen open en hem nergens neerzet. Hij gaat er namelijk doorheen door middel van een loopje. Om dan wat te vragen aan de gebruiker en dit dan weer door te voeren naar een andere tabel.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Dim dbs As Database, rst As Recordset, strSQL As String
    Dim Message As String, Title As String, blaat As String
    Dim varRecords As Variant, intI As Integer, intJ As Integer
    ' Return reference to current database.
    Set dbs = CurrentDb
    ' Build SQL statement that returns specified fields.
    strSQL = "SELECT optienummer, Productcode, Optie " _
        & "FROM Extra_opties WHERE Left(Productcode, 7) = '" 
        & Left(Right(Me.Productcode, 38), 6) & "'"
    ' Open dynaset-type Recordset object.
    Set rst = dbs.OpenRecordset(strSQL)
    
    ' Move to end of recordset.
    rst.MoveLast
    ' Return to first record.

    rst.MoveFirst
    ' Return all rows into array.
    varRecords = rst.GetRows(rst.RecordCount)
    ' Find upper bound of second dimension.
    For intI = 0 To UBound(varRecords, 2)
        Debug.Print
        ' Print data from each row in array.
        Title = "Optiewaarde invoerbox"
        Message = "De waarde voor " & varRecords(2, intI) & " is:"
        blaat = InputBox(Message, Title)
        DoCmd.RunSQL "Insert Into Optiewaardes values('" & Me.retournummer 
& "', '" & varRecords(0, intI) & "', '" & blaat & "')"
    Next intI
    rst.Close
    Set dbs = Nothing


Ik had dus geprobeerd om aan het openen van de recordset de optie dbSeeChanges mee te geven in het optie gedeelte, alleen dit werkte niet helemaal. Zijn er hier misschien mensen die wel ideen hebben over hoe dit probleem op te lossen?

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


Acties:
  • 0 Henk 'm!

  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 16-07 18:10

Peetman

Tjah....

Wat je kan doen is ipv de regel:

Visual Basic .NET:
1
 Set rst = dbs.OpenRecordset(strSQL)


Deze regel te gebruiken

Visual Basic .NET:
1
Set rst = dbs.Execute strSQL, dbSeeChanges

Dit loste bij mij een soortgelijk probleem op

Acties:
  • 0 Henk 'm!

Anoniem: 53142

Tip: Waarom gebruik je geen stored procedures in Sql Server? Dit is een stuk sneller. Daarnaast wil rst.RecordCount nog wel eens een -1 teruggeven. Met @@rowcount in de sp als returnparameter zit je altijd goed.

Mocht je aanvullende info willen of een voorbeeldje dan hoor ik het wel.

Mvg,
Jeroen