-------------------------------------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - THE QUESTION MARK SUBSTITUTION IN THE SQLEXEC() FUNCTION
January 2026
-------------------------------------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), it always enables the question mark substitution in the SQLEXEC() (and SQLPREPARE()) function.
In VFP Advanced, we can disable the question mark substitution in the SQLEXEC() (and SQLPREPARE()) function,
for example,
=SYS(9050,0)
=SQLEXEC(m.q_connecthandle,"UPDATE mytable SET fld1=$Delim$?x1$Delim$ WHERE fldk1=123")
?x1 is a string, it will not be replaced.
The bug only occurs on some ODBC drivers.
The bug was reported by Simon White.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun45efd8 :: ; proc near
mov cl , byte ptr [eax] ;0x0045efd8 : 8a08
test cl , cl ;0x0045efda : 84c9
je Label45f01b ;0x0045efdc : 743d
jmp Label45eff9 ;0x0045efde : eb19
Label45efe0 ::
cmp byte ptr [ eax + 1 ] , dl ;0x0045efe0 : 385001
je Label5e9a97 ;0x0045efe3 : 0f84aeaa1800
Label45efe9 ::
cmp cl , dl ;0x0045efe9 : 3aca
jne Label453ecd ;0x0045efeb : 0f85dc4effff
Label45eff1 ::
mov cl , byte ptr [ eax + 1 ] ;0x0045eff1 : 8a4801
inc eax ;0x0045eff4 : 40
test cl , cl ;0x0045eff5 : 84c9
je Label45f01b ;0x0045eff7 : 7422
Label45eff9 ::
;
; ---------------------------------------------------------------------------------
; VFP 9.0 FIX - THE QUESTION MARK SUBSTITUTION IN THE SQLEXEC() FUNCTION
; January 2021
; ---------------------------------------------------------------------------------
; CCB
;
; The question mark substitution in the SQLEXEC() function.
;
; 2021/1/28, by ccb
;
cmp dword ptr vfpa_sys9050_data,00h
jne Label45effa
cmp dword ptr [ esp + 00h ] , offset Label8879cd ;; Fun887985 .. ; proc near
jne Label45effa
cmp dword ptr [ esp + 00h + (4+00h+0A8h) ] , offset Label888668 ;; Fun88835d .. ; proc near
je Label45effe
cmp dword ptr [ esp + 00h + (4+00h+0A8h) ] , offset Label8882de ;; Fun888261 .. ; proc near
je Label45effe
Label45effa ::
cmp cl , 03Fh ;0x0045eff9 : 80f93f
je Label45f01b ;0x0045effc : 741d
Label45effe ::
cmp cl , 027h ;0x0045effe : 80f927
je Label453ea5 ;0x0045f001 : 0f849e4effff
cmp cl , 022h ;0x0045f007 : 80f922
je Label453ea5 ;0x0045f00a : 0f84954effff
cmp cl , 05Bh ;0x0045f010 : 80f95b
je Label5e9a90 ;0x0045f013 : 0f8477aa1800
jmp Label45eff1 ;0x0045f019 : ebd6
Label45f01b ::
ret ;0x0045f01b : c3
4. APPLIES TO:
VFP 6.0.8167.0
VFP 6.0.8961.0 (SP5)
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_vfp9fix151.asp
2, microsoft.com:
https://social.msdn.microsoft.com/forums/en-US/451f97f4-73c9-4239-b58e-986f735cc3a9/disable-question-mark-substitution-by-sqlexec-function
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|