community.borland.com

Article #15150: Function mapping from the Paradox Engine to BDE

 Technical Information Database

TI150B.txt   Function mapping from the Paradox Engine to BDE
Category   :General Programming
Platform    :All
Product    :BDE  2.x

Description:
                               Types

Paradox Engine       BDE            Variable name in this doc
-----------------------------------------------------------------
PXCODE               DBIResult      rslt
TABLEHANDLE          hDBICur        tabH
RECORDHANDLE         pBYTE          recH
FIELDNUMBER          UINT16         iFld
LOCKHANDLE           UINT32
RECORDNUMBER         UINT32         recNum
BLOBHANDLE           INT16


                              Functions

Paradox Engine       BDE
-----------------------------------------------------------------
BLANK                DbiPutField(tabH, iFld, recH, NULL);
                     (Cannot compare Field Data with BLANK in
                     IDAPI. Use the value returned from
                     DbiGetField in bIsBlank to determine if a
                     field is blank.)

ISBANK()             Use the blank parameter in
                     DbiGetField(tabH, iFld, recH, pDest,
                                 &bIsBlank);
                     or
                     DbiVerifyField(tabH, iFld, pSrc, &bIsBlank);

PXBlobClone()        Not Supported.
                     (Private BLOBs are not supported in IDAPI)

PXBlobClose()
accept == FALSE      DbiFreeBlob(tabH, recH, iFld);
accept == TRUE       Not required in IDAPI. Note that
                     DbiFreeBlob(tabH, recH, iFld) needs to be
                     called _after_ adding a record containing a
                     BLOB to a table.

PXBlobDrop()         DbiGetRecord(tabH, dbiNOLOCK, recH, NULL);
                     DbiTruncateBlob(tabH, recH, iFld, 0);
                     DbiModifyRecord(tabH, recH, FALSE);


PXBlobGet()          DbiGetBlob(tabH, recH, iFld, iOff, iLen,
                                pDest, &iRead);

PXBlobGetSize()      DbiGetBlobSize(tabH, recH, iFld, piSize);

PXBlobOpenRead()     DbiOpenBlob(tabH, recH, iField,dbiREADONLY);

PXBlobOpenWrite()    DbiOpenBlob(tabH, recH, iField,
                                 dbiREADWRITE);

PXBlobPut()          DbiPutBlob(tabH, recH, iFld, iOff, iLen,
                                pSrc);

PXBlobQuickGet()     DbiGetBlobHeading(tabH, iFld, recH, &iSize);
                     (Paradox Tables only.)

PXDateDecode()       DbiDateDecode(dateD, piMon, piDay, piYear);

PXDateEncode()       DbiDateEncode(iMon, iDay, iYear, pdateD);

PXErrMsg()           DbiGetErrorString(iErrorCode, szError);
                     or
                     DbiGetErrorInfo(&ErrInfo);
                     (Must be called imediately after the
                      offending function - privides more
                      information than DbiGetErrorString.)

PXExit()             DbiCloseDatabase(&hDb);
                     DbiExit();

PXFldBlank()         DbiGetField(tabH, iFld, recH, NULL,
                                 &bIsBlank);
                     or
                     DbiVerifyField(tabH, iFld, pSrc, &bIsBlank);
                     bIsBlank = TRUE is field is blank.

PXFldHandle()        DbiGetFieldDescs(tabH, &fldDesc);
                     fldDesc.iFldNum;

PXFldName()          DbiGetFieldDescs(tabH, &fldDesc);
                     fldDesc.szName;

PXFldType()          DbiGetFieldDescs(tabH, &fldDesc);
                     fldDesc.iFldType;
                     fldDesc.iSubType;

PXGetAlpha()         DbiGetField(tabH, iFld, recH,
                                 (pBYTE)szString, &bIsBlank);

PXGetDate()          DbiGetField(tabH, iFld, recH,
                                 (pBYTE)&Date, &bIsBlank);

PXGetDefaults()      DbiOpenCfgInfoList(hCfg, eOpenMode,
                                        eConfigMode, pszCfgPath,
                                        &tabH);

PXGetDoub()          DbiGetField(tabH, iFld, recH,
                                 (pBYTE)&Double, &bIsBlank);

PXGetLong()          DbiGetField(tabH, iFld, recH,
                                 (pBYTE)&Long, &bIsBlank);

PXGetShort()         DbiGetField(tabH, iFld, recH,
                                 (pBYTE)&Short, &bIsBlank);

PXInit()             Not Supported. See PXWinInit.

PXKeyAdd()           DbiAddIndex(hDb, tabH, szTblName, szTblType,
                                 &IdxDesc);

PXKeyDrop()          DbiDeleteIndex(hDb, tabH, szTblName,
                                    szTblType, NULL, NULL,
                                    iIndexId);

PXKeyMap()           Not Supported.
                     (Key Mapping is no longer needed - all
                      pertinent information is put in the index
                      descriptor - IdxDesc)

PXKeyNFlds()         DbiGetIndexSeqNo(tabH, NULL, NULL, 0,
                                      &seqNo);
                     DbiGetIndexDesc(tabH, seqNo, &idxDesc);
                     idxDesc.iFldsInKey;
                     (Note that Paradox in the only database
                      which has the concept of a primary index)

PXKeyQuery()         Not Supported.
                     (The BDE does not have any function like
                      this. You need to call DbiGetIndexDescs()
                      and then look for the index you want.  Once
                      found all the information about that index
                      is available to you in the structure.)

PXNetErrUser()       DbiErrGetErrorContext(ecUSERNAME,
                                           szUserName);

PXNetFileLock()      DbiAcqPersistTableLock(hDb, (pCHAR)fileName,
                                            Driver);

PXNetFileUnlock()    DbiRelPersistTableLock(hDb, (pCHAR)fileName,
                                            Driver);

PXNetInit()          Not Support. See PXWinInit.

PXNetRecGotoLock()   Not Supported.
                     (Can be simulated by setting a bookmark on
                      the record which is locked and then
                      switching to that bookmark:
                      DbiSetToBookMark(tabH, pBookMark);)

PXNetRecLock()       DbiGetRecord(tabH, dbiWRITELOCK, NULL,
                                  NULL);

PXNetRecLocked()     DbiIsRecordLocked(tabH, edbiLock, piLocks);

PXNetRecUnlock()     DbiRelRecordLock(tabH, FALSE);
                     or durring the update of the record -
                     DbiModifyRecord(tabH, recH, TRUE);

PXNetTblChanged()    Need to register a cbTABLECHANGED callback.
                     (Paradox only.)

PXNetTblLock()       DbiAcqTableLock(tabH, eLockType);
                     (Note that only Read and Write locks
                      are supported by this function. For a
                      FL on a table, open the table with
                      the dbiOPENEXCL parameter or use the
                      DbiAcqPersistTableLock function.)

PXNetTblRefresh()    DbiForceReread(tabH);

PXNetTableUnlock()   DbiRelTableLock(tabH, eLockType);

PXNetUserName()      DbiGetNetUserName(pzName);

PXPswAdd()           DbiAddPassword(szPassword);
                     (Paradox tables only.)

PXPswDel()           DbiDropPassword(szPassword);
                     (Paradox tables only.)
                     
PXPutAlpha()         DbiPutField(tabH, iFld, recH,
                                 (pBYTE)szString);

PXPutBlank()         DbiPutField(tabH, iFld, recH, NULL);

PXPutDate()          DbiPutField(tabH, iFld, recH,
                                 (pBYTE)&Date);

PXPutDoub()          DbiPutField(tabH, iFld, recH,
                                 (pBYTE)&Double);

PXPutLong()          DbiPutField(tabH, iFld, recH,
                                 (BYTE)&Long);

PXPutShort()         DbiPutField(tabH, iFld, recH,
                                 (pBYTE)&Short);

PXRawGet()           DbiSetProp((hDBIObj)tabH, curXLTMODE,
                                xltNONE)
                     DbiGetRecord(tabH, NULL, recH, NULL);

PXRawPut()           DbiSetProp((hDBIObj)tabH, curXLTMODE,
                                xltNONE)
                     DbiInsertRecord(tabH, dbiNOLOCK, recH,
                                     pDest);

PXRecAppend()        DbiAppendRecord(tabH, recH);

PXRecBufClose()      The application needs to release the memory
                     associated with the record buffer. In 'C',
                     call: free(recH).
                     (Record buffers in IDAPI are owned by the
                      application.)

PXRecBufCopy()       The application needs to copy the memory
                     which is used for the record buffer. In 'C',
                     call:
                     memcpy(recHDest, recHSource, size).
                     (Record buffers in IDAPI are owned by the
                      application.)

PXRecBufEmpty()      DbiInitRecord(tabH, recH);

PXRecBufOpen()       The application needs to allocate memory for
                     record buffer. In 'C', call:
                     DbiGetCursorProps(tabH, &CurProps);
                     recH = (pBYTE)malloc(CurProps.iRecBufSize
                                          * sizeof(BYTE));
                     (Record buffers in IDAPI are owned by the
                      application.)

PXRecDelete()        DbiDeleteRecord(tabH, NULL);

PXRecFirst()         DbiSetToBegin(tabH);
                     DbiGetNextRecord(tabH, dbiNOLOCK, NULL,
                                      NULL);
                     (IDAPI has the concept of Beginning of file,
                      which is before the first record).

PXRecGet()           DbiGetRecord(tabH, dbiNOLOCK, recH, NULL);

PXRecGoto()          Not supported by the SQL Drivers.
                     Example for use with 'C':
                     DBIResult gotoRec(hDBICur tabH,
                                       UINT32 recNum)
                     {
                         DBIResult   lastError;
                         CURProps    curProps;

                         lastError = DbiGetCursorProps(tabH,
                                                      &curProps);
                         if (lastError != DBIERR_NONE)
                         {
                             return lastError;
                         }

                         if (!strcmp(curProps.szTableType,
                                     szPARADOX))
                         {
                             lastError = DbiSetToSeqNo(tabH,
                                                       recNum);
                         }
                         else if (!strcmp(curProps.szTableType,
                                          szDBASE))
                         {
                             lastError = DbiSetToRecordNo(tabH,
                                                         recNum);
                         }
                         else
                         {
                             lastError = DBIERR_NOTSUPPORTED;
                         }

                         return lastError;
                     }

PXRecInsert()        DbiInsertRecord(tabH, dbiNOLOCK, recH);

PXRecLast()          DbiSetToEnd(tabH);
                     DbiGetPriorRecord(tabH, dbiNOLOCK, NULL,
                                       NULL);
                     (IDAPI has the concept of End of File, which
                      is after the last record).

PXRecNext()          DbiGetNextRecord(tabH, dbiNOLOCK, NULL,
                                      NULL);

PXRecNFlds()         DbiGetCursorProps(tabH, &CurProps);
                     lFlds = CurProps.iFields;

PXRecNum()           Not supported for SQL Tables.
                     Example for use with 'C':
                     DBIResult getCurRecNum(hDBICur tabH,
                                            UINT32 *recNum)
                     {
                         DBIResult   lastError;
                         CURProps    curProps;
                         RECProps    recProps;
                         
                         lastError = DbiGetCursorProps(tabH,
                                                      &curProps);
                         if (lastError != DBIERR_NONE)
                         {
                             return lastError;
                         }

                         if (!strcmp(curProps.szTableType,
                                     szPARADOX))
                         {
                             lastError = DbiGetSeqNo(tabH,
                                                (pUINT32)recNum);
                         }
                         else if (!strcmp(curProps.szTableType,
                                          szDBASE))
                         {
                             lastError = DbiGetRecord(tabH,
                                                      dbiNOLOCK,
                                                      NULL,
                                                      &recProps);
                             *recNum = recProps.iPhyRecNum;
                         }
                         else
                         {
                             lastError = DBIERR_NOTSUPPORTED;
                         }

                         return lastError;
                     }

PXRecPrev()          DbiGetPriorRecord(tabH, dbiNOLOCK, NULL,
                                       NULL);

PXRecUpdate()        DbiModifyRecord(tabH, recH, TRUE);

PXSave()             DbiForceReread(tabH);

PXSetDefaults()      DbiOpenCfgInfoList() 

PXSetHWHandler()     Not Supported

PXSrchFld()          DbiSetToKey(tabH, keySEARCHEQ, FALSE, iFlds
                                 iLen, pIdxBuf);

PXSrchKey()          DbiSwitchToIndex(&tabH, NULL, NULL, 0,
                                      TRUE);
                     DbiSetToKey(tabH, keySEARCHEQ, FALSE, iFlds
                                 iLen, pIdxBuf);
                     (can only search on the currently active
                      index)

PXTblAdd()           DbiBatchMove(NULL, hSrcCur, NULL, hDestCur,
                                  batAPPEND, 0, NULL, NULL, NULL,
                                  NULL, NULL, NULL, NULL, NULL,
                                  NULL, NULL, NULL, TRUE, FALSE,
                                  NULL, TRUE);

PXTblClose()         DbiCloseCursor(&tabH);

PXTblCopy()          DbiCopyTable(hDb, TRUE, szSrcName,
                                  szPARADOX, szDestName);

PXTblCreate()        DbiCreateTable(hDb, TRUE, &TblDesc);

PXTblCreateMode()    DbiCreateTable(hDb, TRUE, &TblDesc);
                     (Use the optional parameters to change the
                      level of the table.)

PXTblDecrypt()       Only Supported for Paradox Tables
                     Example for use with 'C':
                     DBIResult decryptTable(hDBIDb hDb,
                                           const char *tableName)
                     {
                         CRTblDesc   crTblDesc;
                         DBIResult   lastError;

                         // Clear the buffer
                         memset(&crTblDesc, 0,
                                sizeof(CRTblDesc));

                         // name of the table
                         strcpy(crTblDesc.szTblName, tableName);

                         lastError = DbiDoRestructure(hDb, 1,
                                                      &crTblDesc,
                                                      NULL, NULL,
                                                      NULL,
                                                      FALSE);

                         return lastError;
                     }

PXTblDelete()        DbiDeleteTable(hDb, szTblName, szPARADOX);

PXTblEmpty()         DbiEmptyTable(hDb, tabH, szTblName,
                                   szPARADOX);

PXTblEncrypt()       (Only Supported for Paradox Tables)
                     Example for use with 'C':
                     DBIResult encryptTable(hDBIDb hDb,
                                           const char *tableName,
                                           const char *password)
                     {
                         CRTblDesc   crTblDesc;
                         DBIResult   lastError;

                         // Clear the buffer
                         memset(&crTblDesc, 0,
                                sizeof(CRTblDesc));

                         // name of the table
                         strcpy(crTblDesc.szTblName, tableName);
                         // Master password suplied for the table
                         crTblDesc.bProtected = TRUE;
                         // Password for the table
                         strcpy(crTblDesc.szPassword, password);

                         lastError = DbiDoRestructure(hDb, 1,
                                                    &crTblDesc,
                                                    NULL, NULL,
                                                    NULL, FALSE);

                         return lastError;
                     }

PXTblExist()         Not directly supported. Need to use
                     DbiOpenTableList to get a list of available
                     tables, and then search that list for the
                     table. Example for use with 'C':
                     BOOL tableExists(hDBIDb hDb,
                                      const char *userName,
                                      const char *tableName,
                                      const char *tableType)
                     {
                         BOOL        exists = FALSE;
                         BOOL        isLocal = TRUE;
                         hDBICur     tabH   = 0;
                         char        *tblName;
                         TBLBaseDesc tblDesc;
                         CHAR        remoteName[DBIMAXNAMELEN+1];
                         DBIResult   lastError;

                         if ((!strcmp(tableType, szPARADOX)) ||
                             (!strcmp(tableType, szDBASE)) ||
                             (!strcmp(tableType, szASCII)))
                         {
                             tblName = _fstrtok((pCHAR)tableName,
                                                ".");
                             isLocal = TRUE;
                         }
                         else if ((!strcmp(tableType, "ORACLE"))
                                   ||
                                  (!strcmp(tableType, "SYBASE")))
                         {
                             strcpy(remoteName, userName);
                             strcat(remoteName, ".");
                             strcat(remoteName, tableName);
                             tblName = (pCHAR)tableName;
                             isLocal = FALSE;
                         }
                         else
                         {
                             strcpy(remoteName, tableName);
                             tblName = (pCHAR)tableName;
                             isLocal = FALSE;
                         }

                         if (tblName == NULL)
                         {
                             lastError = DBIERR_INVALIDTABLENAME;
                             return FALSE;
                         }

                         lastError = DbiOpenTableList(hDb, FALSE,
                                                      TRUE,"*.*",
                                                      &tabH);
                         if (lastError != DBIERR_NONE)
                         {
                             return FALSE;
                         }

                         lastError = DbiSetToBegin(tabH);
                         if (lastError != DBIERR_NONE)
                         {
                             return FALSE;
                         }

                         while ((DbiGetNextRecord(tabH,dbiNOLOCK,
                                                 (pBYTE)&tblDesc,
                                                 NULL))
                                 == DBIERR_NONE)
                         {
                             if (!stricmp(tblDesc.szName,
                                          tblName))
                             {
                                 // Check if the types match
                                 if (strcmp(tblDesc.szType,
                                            tableName) &&
                                     (isLocal))
                                 {
                                     // keep searching it the
                                     // table is of the wrong
                                     // type
                                     continue;
                                 }
                                 lastError = DBIERR_NONE;
                                 DbiCloseCursor(&tabH);
                                 return TRUE;
                             }
                         }

                         if (tabH)
                         {
                             DbiCloseCursor(&tabH);
                         }

                         lastError = DBIERR_NOSUCHTABLE;

                         return exists;
                     }

PXTblMaxSize()       DbiCreateTable(hDb, TRUE, &TblDesc);
                     (This is done using the optional parameters
                      in the table descriptor)

PXTblName()          DbiGetCursorProps(tabH, &CurProps);
                     strcpy(szTblName, CurProps.szName);

PXTblNRecs()         DbiGetRecordCount(tabH, &iRecCount);
                     (This function returns an approximation of
                      the number of records in the table.)

PXTblOpen()          DbiOpenTable(hDb, szTblName, szPARADOX,
                                  NULL, NULL, indexID,
                                  dbiREADWRITE, dbiOPENSHARED,
                                  xltFIELD, TRUE, NULL, &tabH);

PXTblProtected()     Not directly supported. For local tables,
                     need to call DbiOpenTableList and get the
                     information for that table.
                     Example for use with 'C':
                     BOOL isProtected(hDBIDb hDb,
                                      const char *tableName,
                                      const char *tableType)
                     {
                         BOOL        protect = FALSE;
                         hDBICur     tabH    = 0;
                         char        *tblName;
                         TBLFullDesc  tblDesc;
                         DBIResult   lastError;

                         // Different methodology required for
                         // local and remote tables
                         if ((!strcmp(tableType, szPARADOX)) ||
                             (!strcmp(tableType, szDBASE)) ||
                             (!strcmp(tableType, szASCII)))
                         {
                             tblName = _fstrtok((pCHAR)tableName,
                                                ".");
                             if (tblName == NULL)
                             {
                                 lastError =
                                         DBIERR_INVALIDTABLENAME;
                                 return FALSE;
                             }

                             lastError = DbiOpenTableList(hDb,
                                                   TRUE, TRUE,
                                                   "*.*", &tabH);
                             if (lastError != DBIERR_NONE)
                             {
                                 return FALSE;
                             }

                             lastError = DbiSetToBegin(tabH);
                             if (lastError != DBIERR_NONE)
                             {
                                 return FALSE;
                             }

                             while ((DbiGetNextRecord(tabH,
                                                 dbiNOLOCK,
                                                 (pBYTE)&tblDesc,
                                                 NULL))
                                     == DBIERR_NONE)
                             {
                                 if (!stricmp(
                                          tblDesc.tblBase.szName,
                                          tblName))
                                 {
                                     if (stricmp(
                                          tblDesc.tblBase.szType,
                                          tableType))
                                     {
                                         // Keep searching if the
                                         // type doesn't match
                                         continue;
                                     }
                                     if (
                                        tblDesc.tblExt.bProtected
                                        == TRUE)
                                     {
                                         // Table is protected
                                         lastError = DBIERR_NONE;
                                         DbiCloseCursor(&tabH);
                                         return TRUE;
                                     }
                                     else
                                     {
                                         lastError = DBIERR_NONE;
                                         DbiCloseCursor(&tabH);
                                         return FALSE;
                                     }
                                 }
                             }

                             if (tabH)
                             {
                                 DbiCloseCursor(&tabH);
                             }

                             lastError = DBIERR_NOSUCHTABLE;
                         }
                         else
                         {
                             lastError = DbiOpenTable(hDb,
                                                (pCHAR)tableName,
                                                (pCHAR)tableType,
                                                NULL, NULL, NULL,
                                                dbiREADONLY,
                                                dbiOPENSHARED,
                                                xltNONE, FALSE,
                                                NULL, &tabH);
                             if (lastError == DBIERR_NONE)
                             {
                                 DbiCloseCursor(&tabH);
                                 protect = FALSE;
                                 return protect;
                             }
                             else if (lastError ==
                                      DBIERR_INVALIDPASSWORD)
                             {
                                 lastError = DBIERR_NONE;
                                 protect = TRUE;
                                 return protect;
                             }
                         }

                         return protect;
                     }


PXTblRename()        DbiRenameTable(hDb, szOldName, szTableType,
                                    szNewName);

PXTblUpgrade()       DbiDoRestructure(hDb, 1, pTblDesc, pSaveAs,
                                      NULL, NULL, FALSE);
                     (Need to use the Optional Parameters to set
                      the level of the table. Local tables only.)

PXWinInit()          DbiInit(NULL);
                     DbiOpenDatabase(NULL, NULL, dbiREADWRITE,
                                     dbiOPENSHARED, NULL, 0,
                                     NULL, NULL, &hDb);


Reference:


7/15/98 3:24:20 PM
 

Last Modified: 15-NOV-99