--------------------------------------------------------------------------------------------
[ENHANCED] VFP 9.0 FIX - ALWAYS ADD THE READWRITE OPTION IN THE INTO CURSOR CLAUSE
January 2026
--------------------------------------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp7, vfp8), it creates a read-write cursor with the READWRITE option,
it creates a read-only cursor without the READWRITE option.
In VFP Advanced, if we enable always adding the READWRITE option in the INTO CURSOR clause,
the INTO CURSOR CursorName clause is the same as the INTO CURSOR CursorName READWRITE clause,
it always creates a read-write cursor.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun536d15 :: ; proc near
sub esp , 0350h ;0x00536d15 : 81ec50030000
mov eax , dword ptr [ Data937090 ] ;0x00536d1b : a190709300
mov ecx , dword ptr [ Data9393ac ] ;0x00536d20 : 8b0dac939300
push ebx ;0x00536d26 : 53
push ebp ;0x00536d27 : 55
mov ebp , dword ptr [ esp + 035Ch ] ;0x00536d28 : 8bac245c030000
push esi ;0x00536d2f : 56
mov dword ptr [ esp + 0358h ] , eax ;0x00536d30 : 89842458030000
mov al , byte ptr [ecx] ;0x00536d37 : 8a01
push edi ;0x00536d39 : 57
xor edi , edi ;0x00536d3a : 33ff
cmp al , 0FEh ;0x00536d3c : 3cfe
mov dword ptr [ esp + 20 ] , edi ;0x00536d3e : 897c2414
je Label536dd3 ;0x00536d42 : 0f848b000000
Label536d48 ::
movzx eax , al ;0x00536d48 : 0fb6c0
add eax , 0FFFFFFE1h ;0x00536d4b : 83c0e1
cmp eax , 0DDh ;0x00536d4e : 3ddd000000
ja Label4a6598 ;0x00536d53 : 0f873ff8f6ff
movzx eax ,byte ptr [ eax + offset Data5362d0 ] ;0x00536d59 : 0fb680d0625300
jmp dword ptr [ 4 * eax + offset DataPtr536df0 ] ;0x00536d60 : ff2485f06d5300
Label536d67 ::
lea esi , dword ptr [ esp + 24 ] ;0x00536d67 : 8d742418
call Fun42107e ;0x00536d6b : e80ea3eeff
mov edx , dword ptr [ Data9393ac ] ;0x00536d70 : 8b15ac939300
mov al , byte ptr [edx] ;0x00536d76 : 8a02
cmp al , 031h ;0x00536d78 : 3c31
je Label5e6d51 ;0x00536d7a : 0f84d1ff0a00
cmp al , 0BDh ;0x00536d80 : 3cbd
jne Label4a6549 ;0x00536d82 : 0f85c1f7f6ff
lea esi , dword ptr [ esp + 24 ] ;0x00536d88 : 8d742418
call Fun42107e ;0x00536d8c : e8eda2eeff
mov eax , dword ptr [ Data9393ac ] ;0x00536d91 : a1ac939300
mov dword ptr [ ebp + 0164h ] , eax ;0x00536d96 : 898564010000
mov eax , dword ptr [ ebp + 8 ] ;0x00536d9c : 8b4508
test eax , eax ;0x00536d9f : 85c0
jne Label536dc3 ;0x00536da1 : 7520
pushd 00h ;0x00536da3 : 6a00
xor ecx , ecx ;0x00536da5 : 33c9
call Fun52ed72 ;0x00536da7 : e8c67fffff
mov edx , eax ;0x00536dac : 8bd0
mov dword ptr [ ebp + 0174h ] , eax ;0x00536dae : 898574010000
call Fun531d42 ;0x00536db4 : e889afffff
mov esi , eax ;0x00536db9 : 8bf0
test esi , esi ;0x00536dbb : 85f6
jne Label5e6eee ;0x00536dbd : 0f852b010b00
Label536dc3 ::
mov ecx , dword ptr [ Data9393ac ] ;0x00536dc3 : 8b0dac939300
mov al , byte ptr [ecx] ;0x00536dc9 : 8a01
cmp al , 0FEh ;0x00536dcb : 3cfe
jne Label536d48 ;0x00536dcd : 0f8575ffffff
Label536dd3 ::
;
; ---------------------------------------------------------------------------------
; VFP 9.0 FIX - ALWAYS ADD THE READWRITE OPTION IN THE INTO CURSOR CLAUSE
; September 2024
; ---------------------------------------------------------------------------------
; CCB
;
; Always add the READWRITE option in the INTO CURSOR clause.
;
; 2024/9/8, by ccb
;
Label536dd5_start ::
cmp dword ptr vfpa_sys9168_data,00h
je Label536dd5_end
cmp dword ptr [ ebp + 0164h ] , 00h
je Label536dd5_end
or dword ptr [ ebp + 0B4h ] , 03h
Label536dd5_end ::
Label536dd6 ::
mov ecx , dword ptr [ esp + 035Ch ] ;0x00536dd3 : 8b8c245c030000
call Fun42bf1d ;0x00536dda : e83e51efff
pop edi ;0x00536ddf : 5f
pop esi ;0x00536de0 : 5e
pop ebp ;0x00536de1 : 5d
pop ebx ;0x00536de2 : 5b
add esp , 0350h ;0x00536de3 : 81c450030000
ret 04h ;0x00536de9 : c20400
4. APPLIES TO:
VFP 7.0.0.9262
VFP 7.0.0.9465 (SP1)
VFP 8.0.0.2521
VFP 8.0.0.3117 (SP1)
VFP 9.0.0.2412
VFP 9.0.0.3504 (SP1)
VFP 9.0.0.4611 (SP2)
VFP 9.0.0.5015 (SP2)
VFP 9.0.0.5411 (SP2)
VFP 9.0.0.5721 (SP2)
VFP 9.0.0.5815 (SP2)
VFP 9.0.0.6303 (SP2)
VFP 9.0.0.6602 (SP2)
VFP 9.0.0.7423 (SP2)
The bug has been fixed in VFP Advanced.
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
http://www.baiyujia.com/vfpdocuments/f_vfp9fix344.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix342.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix343.asp
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|