ID: Q107596
2.5x 2.6x | 2.5x 2.6x
WINDOWS | MS-DOS
kbprg kbfixlist kbbuglist
The information in this article applies to:
When you are using FoxPro with the Connectivity Kit (CK), executing a DBCols() statement on a SQL Server table with approximately 200 columns in FoxPro for Windows or 150 columns in FoxPro for MS-DOS will cause a general protection (GP) fault in FoxPro for Windows and will cause FoxPro for MS- DOS to hang or crash.
Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. This problem was corrected in Visual FoxPro 3.0 for Windows.
CAUTION: Save your work and close all other programs before following these steps. This procedure may result in lost data and/or corrupted files.
To reproduce the problem, you must have the CK and SQL Server installed. Follow the steps at the top of the following program, and then run the program.
************************************************************************
* SQLTB.PRG
* Generates a GP fault in FoxPro for Windows 2.5, 2.5a, 2.5b
* Crashes or Locks FoxPro for MS-DOS 2.5, 2.5a, 2.5b
* Build a 200 (Windows) or 150 (MS-DOS) column table & execute DBCols()
*
* Assumes: FPSQL.FLL (Windows) or FPSQL.PLB (MS-DOS) Loaded
* : A valid connection handle to SQL Server
* : In "pubs" database
*
* Example: From the command window enter the following:
* : SET LIBRARY TO FPSQL.FLL (PLB)
* : mhandle = dbconnect("<DataSource>","<user>","<password>","")
* : mresult = dbexec(mhandle,"use pubs")
* : DO sqltb WITH "<tabletocreate>"
************************************************************************
PARAMETERS p_table
IF PARAMETERS()=0
WAIT WINDOW "You must pass a table name to this procedure.."
RETURN
ENDIF
SET TALK OFF
* Initialize variables
PUBLIC msqlc
PUBLIC msqle
PUBLIC mresult
PUBLIC mtable
STORE SPACE(10) TO msqlc,msqle
STORE 0 TO mresult
IF TYPE("mhandle") = "U"
STORE 1 TO mhandle
ENDIF
mtable = "dbo."+p_table
* Build SQL CREATE TABLE command string
msqlc = "create table &mtable ("
WAIT WINDOW "Command string:"+msqlc+" will be created" TIMEOUT 2
WAIT WINDOW NOWAIT "Creating SQL command string.."
FOR i = 1 TO IIF(_WINDOWS,200,150)
mvar = "C" + ukey(9)+" char(10),"
msqlc = msqlc + mvar
ENDFOR
msqlc = LEFT(msqlc, LEN(msqlc)-1)+")"
WAIT WINDOW NOWAIT "Create table string built.."
mresult = dbexec(mhandle,msqlc)
IF mresult = 1
WAIT WINDOW "Table created.." TIMEOUT 2
ELSE
WAIT WINDOW "Error - table not created.." timeout 5
? alltrim(sqe())
ENDIF
IF mresult = 1
WAIT WINDOW "Attempt dbcols() on new table.." TIMEOUT 2
mresult = dbcols(mhandle,mtable)
? mresult
ELSE
WAIT WINDOW "Please clear error condition and rerun" TIMEOUT 5
ENDIF
SET TALK ON
FUNCTION ukey
* Return unique key of length <lenkey>
PARAMETER lenkey
IF PARAMETERS()=0
lenkey=8
ENDIF
IF lenkey=1
RETURN RIGHT(SYS(3),1)
ENDIF
len1=FLOOR(lenkey/2)
len2=lenkey-len1
key1= RIGHT(SYS(3),len1)
key2= RIGHT(SYS(2015),len2)
RETURN key1+key2
* EOF ukey
FUNCTION sqe
* Evaluate and display ODBC Error
PRIVATE num,msg,mresult
STORE 0 TO num,mresult
STORE "" TO msg
mresult = dberror(1,@msg,@num)
RETURN msg+"/"+ALLTRIM(STR(num,6,0))
* EOF sqe
** EOP sqltb
For more information on the Ukey function, please see the following article in the Microsoft Knowledge Base:
ARTICLE-ID: Q106708
TITLE : How to Generate Unique Key Field Values
Additional reference words: FoxDos FoxWin VFoxWin 2.50 2.50a 2.50b 2.60
2.60a gpf fixlist 3.00 buglist2.50 buglist2.50a buglist2.50b buglist2.60
buglist2.60a lock up freeze halt stop responding
KBCategory: kbprg kbfixlist kbbuglist
KBSubcategory: FxtoolCk
Keywords : FxtoolCk kbbuglist kbfixlist
Version : 2.5x 2.6x | 2.5x 2.6x
Platform : MS-DOS WINDOWS
Solution Type : kbfix
Last Reviewed: November 25, 1998