Ik heb een stukje code in MS Access VBA dat een aantal variabelen in een zelf-gedefinieerde type vult en die naar een recordset overzet om in een tabel te inserten.
Werkte allemaal perfect met de laatste 32 bits Office versie, de 64 bits Office versie crasht.
Wat blijkt het probleem: een van de variabelen vul ik niet. Die is dan met een lege string gevuld. Als ik die aan de recordset toeken dan crasht Access.
Maar als ik die variabele specifiek met een lege string vul, dan gaat het wel goed.
Dit gaat fout, met een crash op .Fields("Status") = dh.Status.
dh.Status is gevuld met "" (een lege string).
Als ik de comment bij 'dh.Status = "" weghaal en die dus expliciet met een lege string vul gaat het goed.
Iemand bekend met dit gedrag? Moet je nu in 64 bits VBA altijd alle variabelen specifiek vullen voordat je ze aan een recordset toekent?
Werkte allemaal perfect met de laatste 32 bits Office versie, de 64 bits Office versie crasht.
Wat blijkt het probleem: een van de variabelen vul ik niet. Die is dan met een lege string gevuld. Als ik die aan de recordset toeken dan crasht Access.
Maar als ik die variabele specifiek met een lege string vul, dan gaat het wel goed.
code:
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
32
| Type DELIV_HEAD_type ID As LongLong Delivery_ref As String cust_nr As String Country As String Ship_type As String Destination As String Order_ref As String Status As String End Type Dim dh As DELIV_HEAD_type dh.Delivery_ref = Trim(Mid(sLine, 1, 8)) dh.cust_nr = Trim(Mid(sLine, 12, 10)) dh.Country = Trim(Mid(sLine, 23, 4)) dh.Ship_type = Trim(Mid(sLine, 28, 4)) dh.Destination = Trim(Mid(sLine, 33, 50)) 'dh.Status = "" Set rs = New ADODB.Recordset rs.Open "DELIV_HEAD", CurrentProject.Connection, adOpenDynamic, adLockPessimistic, adCmdTable With rs .AddNew .Fields("Delivery_ref") = dh.Delivery_ref .Fields("cust_nr") = dh.cust_nr .Fields("Country") = dh.Country .Fields("Ship_type") = dh.Ship_type .Fields("Destination") = dh.Destination .Fields("Status") = dh.Status .Update End With |
Dit gaat fout, met een crash op .Fields("Status") = dh.Status.
dh.Status is gevuld met "" (een lege string).
Als ik de comment bij 'dh.Status = "" weghaal en die dus expliciet met een lege string vul gaat het goed.
Iemand bekend met dit gedrag? Moet je nu in 64 bits VBA altijd alle variabelen specifiek vullen voordat je ze aan een recordset toekent?
Signatures zijn voor boomers.