BDE API call DbiQInstantiateAnswer not working properly with MSSQL 7.0

I am using the BDE API call DbiQInstantiateAnswer to cache a query result
to a local table (Paradox or Dbase) for the ability to quickly sort on the
result set.  After upgrading from MSSQL 6.5 to MSSQL 7.0, I am recieving
unusal results using the Paradox driver.
1)  If the result set of a query has an integer for the primary key, the
corrisponding local table field type changes to auto-increment.
The statment "Select ProductID From Products" does not return:
but returns (in a dbgrid)

2)  If selecting from a View I get the following exception:
   Invalid field type.
   Table does not exist.
   Table "C:\Apps\Local\Temp"
   Field ProductID

I have tried adding dbo.<table or view name> with the same problem(s) and
only happens when using the native SQL Links, ODBC works fine.  Could it be
a problem with SQL Links and MSSQL 7.0?  What is wierd is that the call
works fine on all of the developers workstations, it is only on end-users
machines that I experience this problem.

Here is the function called after opening the Query component:

function TSortableQuery.CreateHandle: hDBICur;
  hAnsCur, hTmpCur: hDBICur;
  TableName: string;

  // Cannot use RequestLive with this component...
  if RequestLive = True then
    raise EDatabaseError.Create('Cannot have RequestLive set to True when
using ' +
       'a TSortedQuery component.  For an updateable query, use TUpdateSQL
in ' +
       'conjunction with TSortedQuery');
  Result := nil; hAnsCur := nil; hTmpCur := nil;

  // Determine table type...
  if FTableType = ttDBASE then
    TableType := szDBASE
    TableType := szPARADOX;

  // Create table name with directory...
  if (AnswerDirectory <> '') then
     if AnswerDirectory[Length(AnswerDirectory)] <> '\' then
       TableName := AnswerDirectory + '\' + AnswerTableName
       TableName := AnswerDirectory +  AnswerTableName;

  // Remove any file name extension from the table name...
  if Pos('.', TableName) <> 0 then
    TableName := Copy(TableName, 1, Pos('.', TableName) - 1);

    if OpenSortedTable = False then
      // Prepare the query...
      if Prepared = False then
      // Execute the SQL query...
      Check(DbiQExec(StmtHandle, @hTmpCur));
      // Place the result set on disk...
      Check(DbiQInstantiateAnswer(StmtHandle, hTmpCur, Pchar(TableName),
             PChar(TableType), FOverwrite, @hAnsCur));
      // Close the cursor to the SQL result...
    // Open a database and set the directroy to where the result table
    Check(DbiOpenDatabase(nil, 'STANDARD', dbiREADONLY, dbiOPENSHARED,
                nil, 0, nil, nil, hDb));
    Check(DbiSetDirectory(hDb, PChar(AnswerDirectory)));
    // Open that table and return the cursor handle as the result...
    Check(DbiOpenTable(hDb, PChar(TableName), PChar(TableType), nil, nil,
       dbiREADONLY, dbiOPENEXCL, xltFIELD, FALSE, nil, Result));
    // If a problem happens up prepare the query...