SQLMIX and functions

89 views
Skip to first unread message

Itamar Lins

unread,
Aug 4, 2026, 9:45:28 AM (9 days ago) Aug 4
to Harbour Users
Hi!

I’ve added a few functions with the help of AI, specifically regarding SQLMIX's DBF compatibility.
I needed to include `dbUnlock()`, and I will also need to add `dbRlock()`.
While it is true that these files—generated by the SQL query result—are exclusive (ArrayRDD) files, opening them in shared or exclusive mode might require these functions for use with other libraries, such as the HwGUI or MiniGUI browse controls.
I believe this is a valid approach for SQLMIX users.

Error SQLMIX/0 Unsupported operation
Called from (b)HWG_ERRSYS(20)
Called from RLOCK(0)
Called from HBROWSE:EDIT(2051)
Called from HBROWSE:BUTTONDBL(1758)
Called from HBROWSE:ONEVENT(411)
Called from HWG_DLGBOXINDIRECT(0)
Called from HDIALOG:ACTIVATE(176)
Called from PRECOS(67)
Called from (b)MAIN(117)
Called from ONCOMMAND(647)
Called from (b)HMAINWINDOW(300)
Called from HMAINWINDOW:ONEVENT(410)
Called from HWG_ACTIVATEMAINWINDOW(0)
Called from HMAINWINDOW:ACTIVATE(399)
Called from MAIN(125)
HWGUI 2.23 dev Build 8 Unicode
Date: 04/08/26
Time: 10:43:35

Best regards,
Itamar M. Lins Jr.

Itamar Lins

unread,
Aug 4, 2026, 10:22:17 AM (9 days ago) Aug 4
to Harbour Users
Hi!
Here are the modifications to prevent the error.
In the `sqlbase.c` file, I added the following below the `static HB_ERRCODE sqlbaseAppend...` function:
...
static HB_ERRCODE sqlbaseLock( AREAP pArea, DBLOCKINFO * pLockInfo )
{
HB_SYMBOL_UNUSED( pArea );
if( pLockInfo )
{
pLockInfo->fResult = HB_TRUE;
}
return HB_SUCCESS;
}

static HB_ERRCODE sqlbaseUnLock( AREAP pArea, void * pRef )
{
HB_SYMBOL_UNUSED( pArea );
HB_SYMBOL_UNUSED( pRef );
return HB_SUCCESS;
}

And further down, I changed:
( DBENTRYP_I ) NULL,              /* sqlbaseLock */
( DBENTRYP_I ) NULL,              /* sqlbaseUnLock */
to
sqlbaseLock,                     /* sqlbaseLock */
sqlbaseUnLock,                   /* sqlbaseUnLock */

Changes in the `sqlmix.c` file:
I added the following below the `static HB_ERRCODE sqlmixClose` function:
...
static HB_ERRCODE sqlmixLock( AREAP pArea, DBLOCKINFO * pLockInfo )
{
HB_SYMBOL_UNUSED( pArea );
if( pLockInfo )
{
pLockInfo->fResult = HB_TRUE;
}
return HB_SUCCESS;
}

static HB_ERRCODE sqlmixUnLock( AREAP pArea, void * pRef )
{
HB_SYMBOL_UNUSED( pArea );
HB_SYMBOL_UNUSED( pRef );
return HB_SUCCESS;
}

And the same change further down:
( DBENTRYP_I ) NULL,              /* sqlbaseLock */
( DBENTRYP_I ) NULL,              /* sqlbaseUnLock */
to
sqlbaseLock,                     /* sqlbaseLock */
sqlbaseUnLock,                   /* sqlbaseUnLock */


Best regards,
Itamar M. Lins Jr.

Itamar Lins

unread,
Aug 4, 2026, 10:33:24 AM (9 days ago) Aug 4
to Harbour Users
Hi!
My fault in sqlmix.c final change. "base" to "mix"

And the same change further down:
( DBENTRYP_I ) NULL,              /* sqlmixLock */
( DBENTRYP_I ) NULL,              /* sqlmixUnLock */
to
sqlmixLock,                     /* sqlmixLock */
sqlmixUnLock,                   /* sqlmixUnLock */

Regards,
Itamar M. Lins Jr.
Reply all
Reply to author
Forward
0 new messages