Category : Windows 3.X Files
Archive   : QWNSQL2C.ZIP
Filename : EXAMPLEC.C

 
Output of file : EXAMPLEC.C contained in archive : QWNSQL2C.ZIP
/*
* EXAMPLEC.C - Quasar SQL API example in 'C'
*
* LANGUAGE : Microsoft C6.0
* MODEL : Small
* ENVIRONMENT : Microsoft Windows 3.0
*
* Developed by:
* Philip Roll
* Ming-Li Wang
*
* (C) Copyright 1991
* Stellar Industries
* 3335 S. Falcon Ridge Road
* Diamond Bar CA 91765
*
*/

#define OEMRESOURCE
#define NOCOMM
#include
#include
#include "sql.h"
#include "examplec.h"

/*
*
* Define macros:
*
*/

#define IDC_RECORD_BOX 100
#define IDC_RECORD_STATIC 101
#define IDC_TABLE_BOX 200
#define IDC_TABLE_STATIC 201
#define IDC_USER_BOX 300
#define IDC_USER_STATIC 301

#define mExampleMargin 4

/*
*
* Define local variables:
*
*/

static HANDLE hSqlUser;
static HCURSOR hcursorHourGlass;
static SQLCONTROL SqlControl;

static char szExampleClass[] = "SqlExampleInC";
static char szExampleCommit[] = "commit work;";
static char szExampleTitle[] = "Sql Example In C";
static HANDLE hExampleInstance;
static HWND hwndExample;
static RECT rectExample;
static TEXTMETRIC tmExampleTextMetrics;
static unsigned nExampleComboBoxHeight;

static char szRecordTitle[] = " Record: ";
static char szRecordSelectStatement[] = "select * from %s.%s;";
static HWND hwndRecordComboBox;
static PSTR pstrRecordRecord;
static RECT rectRecordComboBox;
static unsigned nRecordRecordSize;

static char szTableTitle[] = " Table: ";
static char szTableSelectStatement[] = "select TABLE_NAME from TABLES where USER_NAME = '%s' and TABLE_NAME not like '~%%';";
static HWND hwndTableComboBox;
static PSTR pstrRecordTable;
static RECT rectTableComboBox;
static unsigned nTableRecordSize;

static char szUserTitle[] = " User: ";
static char szUserSelectStatement[] = "select USER_NAME from USERS;";
static HWND hwndUserComboBox;
static PSTR pstrRecordUser;
static RECT rectUserComboBox;
static unsigned nUserRecordSize;

/*
*
* Local function prototypes:
*
*/

static void near ExampleCreate(void);
static BOOL near ExampleInitializeApplication(void);
static BOOL near ExampleInitializeInstance(int);
static void near ExampleRefresh(void);

static void near RecordComboBoxCreate(HDC);
static BOOL near RecordComboBoxRefresh(void);

static void near TableComboBoxCreate(HDC);
static BOOL near TableComboBoxRefresh(void);

static void near UserComboBoxCreate(HDC);
static BOOL near UserComboBoxRefresh(void);

/*
*
* Global function prototypes:
*
*/

long FAR PASCAL ExampleWndProc(HWND, WORD, WORD, LONG);
int PASCAL WinExample(HANDLE, HANDLE, LPSTR, int);

/*
*
* Quasar Example Window Creation
*
*/

static void near
ExampleCreate()
{
HDC hdcDeviceContext;

hdcDeviceContext = GetDC(hwndExample);
GetTextMetrics(hdcDeviceContext, &tmExampleTextMetrics);
nExampleComboBoxHeight = 8 * GetSystemMetrics(SM_CYMENU);
rectExample.left = 0;
rectExample.top = GetSystemMetrics(SM_CYSCREEN) / 2;
rectExample.right = rectExample.left + GetSystemMetrics(SM_CXSCREEN);
UserComboBoxCreate(hdcDeviceContext);
TableComboBoxCreate(hdcDeviceContext);
RecordComboBoxCreate(hdcDeviceContext);
ReleaseDC(hwndExample, hdcDeviceContext);
rectExample.bottom = rectExample.top + rectRecordComboBox.bottom + mExampleMargin + 2;
MoveWindow(hwndExample, rectExample.left, rectExample.top, rectExample.right - rectExample.left, rectExample.bottom - rectExample.top, FALSE);
hSqlUser = SqlLogin(&SqlControl, "SYSTEM", "QUASAR");
if (hSqlUser)
ExampleRefresh();
else
MessageBox(hwndExample, SqlControl.szErrorMessage, szExampleTitle, MB_OK | MB_ICONSTOP);
}

/*
*
* Quasar Example Application Initialization
*
*/

static BOOL near
ExampleInitializeApplication()
{
WNDCLASS WndClass;

memset(&WndClass, 0, sizeof(WndClass));
WndClass.lpfnWndProc = ExampleWndProc;
WndClass.hInstance = hExampleInstance;
WndClass.hIcon = LoadIcon(hExampleInstance, "ExampleIcon");
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = "ExampleMenu";
WndClass.lpszClassName = szExampleClass;
if (RegisterClass(&WndClass))
return (TRUE);
else
return (FALSE);
}

/*
*
* Quasar Example Initialization for each instance
*
*/

static BOOL near
ExampleInitializeInstance(int nCmdShow)
{
HWND hwndTemp;

hcursorHourGlass = LoadCursor(NULL, IDC_WAIT);
hwndTemp = CreateWindow(szExampleClass,
szExampleTitle,
(WS_MINIMIZEBOX | WS_OVERLAPPED | WS_SYSMENU),
0,
0,
100,
100,
NULL,
NULL,
hExampleInstance,
NULL);
if (hwndTemp) {
ShowWindow(hwndTemp, nCmdShow);
UpdateWindow(hwndTemp);
return (TRUE);
} else
return (FALSE);
}

/*
*
* Re-execute all queries and load all combo boxes
*
*/

static void near
ExampleRefresh()
{
if (UserComboBoxRefresh())
if (TableComboBoxRefresh())
RecordComboBoxRefresh();
}

/*
*
* Example Window Procedure:
*
*/

long FAR PASCAL
ExampleWndProc(HWND hwndTemp, WORD wMessage, WORD wParam, LONG lParam)
{
HCURSOR hcursorOld;
PAINTSTRUCT psPaintStructure;
POINT pointRecordComboBoxLeftTop;
unsigned nNotificationCode;

switch (wMessage) {
case WM_CLOSE:
case WM_QUERYENDSESSION:
if (hSqlUser)
SqlLogout(hSqlUser, &SqlControl);
if (pstrRecordRecord)
pstrRecordRecord = (PSTR) LocalFree((HANDLE) pstrRecordRecord);
if (pstrRecordTable)
pstrRecordTable = (PSTR) LocalFree((HANDLE) pstrRecordTable);
if (pstrRecordUser)
pstrRecordUser = (PSTR) LocalFree((HANDLE) pstrRecordUser);
break;
case WM_COMMAND:
switch (wParam) {
case IDM_REFRESH:
hcursorOld = SetCursor(hcursorHourGlass);
RecordComboBoxRefresh();
SetCursor(hcursorOld);
break;
case IDC_RECORD_BOX:
break;
case IDC_TABLE_BOX:
nNotificationCode = HIWORD(lParam);
if (nNotificationCode == CBN_SELCHANGE) {
hcursorOld = SetCursor(hcursorHourGlass);
RecordComboBoxRefresh();
SetCursor(hcursorOld);
}
break;
case IDC_USER_BOX:
nNotificationCode = HIWORD(lParam);
if (nNotificationCode == CBN_SELCHANGE) {
hcursorOld = SetCursor(hcursorHourGlass);
if (TableComboBoxRefresh())
RecordComboBoxRefresh();
SetCursor(hcursorOld);
}
break;
}
break;
case WM_CREATE:
hwndExample = hwndTemp;
hcursorOld = SetCursor(hcursorHourGlass);
ExampleCreate();
SetCursor(hcursorOld);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
pointRecordComboBoxLeftTop.x = rectRecordComboBox.left + rectExample.left;
pointRecordComboBoxLeftTop.y = rectRecordComboBox.top + rectExample.top;
ScreenToClient(hwndExample, &pointRecordComboBoxLeftTop);
BeginPaint(hwndTemp, &psPaintStructure);
TextOut(psPaintStructure.hdc, 0, mExampleMargin + 1, szUserTitle, sizeof(szUserTitle) - 1);
TextOut(psPaintStructure.hdc, (rectExample.right - rectExample.left) / 2, mExampleMargin + 1, szTableTitle, sizeof(szTableTitle) - 1);
TextOut(psPaintStructure.hdc, 0, pointRecordComboBoxLeftTop.y + 1, szRecordTitle, sizeof(szRecordTitle) - 1);
EndPaint(hwndTemp, &psPaintStructure);
break;
case WM_SETFOCUS:
SetFocus(hwndUserComboBox);
break;
}
return (DefWindowProc(hwndTemp, wMessage, wParam, lParam));
}

/*
*
* Create a Record ComboBox:
*
*/

static void near
RecordComboBoxCreate(HDC hdcDeviceContext)
{
POINT pointUserComboBoxLeftBottom;
unsigned nWidth;

nWidth = LOWORD(GetTextExtent(hdcDeviceContext, szRecordTitle, sizeof(szRecordTitle) - 1));
pointUserComboBoxLeftBottom.x = rectUserComboBox.left;
pointUserComboBoxLeftBottom.y = rectUserComboBox.bottom;
ScreenToClient(hwndExample, &pointUserComboBoxLeftBottom);
hwndRecordComboBox = CreateWindow("ComboBox",
NULL,
(WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_VSCROLL),
nWidth,
pointUserComboBoxLeftBottom.y + mExampleMargin,
rectExample.right - rectExample.left - nWidth - mExampleMargin,
nExampleComboBoxHeight,
hwndExample,
IDC_RECORD_BOX,
hExampleInstance,
NULL);
GetWindowRect(hwndRecordComboBox, &rectRecordComboBox);
SendMessage(hwndRecordComboBox, WM_SETFONT, GetStockObject(SYSTEM_FIXED_FONT), 0);
}

/*
*
* Re-execute query for records and load record combo box
*
*/

static BOOL near
RecordComboBoxRefresh()
{
char szQuery[257];
HANDLE hSqlCursorRecord;
SQLTABLE SqlTable;
unsigned nTableIndex;
unsigned nUserIndex;
unsigned long lRecordPosition;

hSqlCursorRecord = SqlCursorOpen(hSqlUser, &SqlControl);
nTableIndex = (unsigned) SendMessage(hwndTableComboBox, CB_GETCURSEL, 0, 0);
nUserIndex = (unsigned) SendMessage(hwndUserComboBox, CB_GETCURSEL, 0, 0);
SendMessage(hwndTableComboBox, CB_GETLBTEXT, nTableIndex, (LONG) (LPSTR) pstrRecordTable);
SendMessage(hwndUserComboBox, CB_GETLBTEXT, nTableIndex, (LONG) (LPSTR) pstrRecordUser);
wsprintf(szQuery, szRecordSelectStatement, (LPSTR) pstrRecordUser, (LPSTR) pstrRecordTable);
SqlControl.nPadding = 2;
SqlControl.wFlags = mSqlFlagFormatPadded;
if (SqlExecute(hSqlUser, hSqlCursorRecord, &SqlControl, szQuery)) {
SqlDescribeTable(hSqlUser, hSqlCursorRecord, &SqlControl, &SqlTable);
if (pstrRecordRecord)
LocalFree((HANDLE) pstrRecordRecord);
pstrRecordRecord = (PSTR) LocalAlloc(LPTR, SqlTable.nRecordSize);
SqlControl.nRecordBufferSize = SqlTable.nRecordSize;
SendMessage(hwndRecordComboBox, CB_RESETCONTENT, 0, 0);
for (lRecordPosition = 0; lRecordPosition < SqlTable.lNumberOfRecords; lRecordPosition++) {
if (lRecordPosition)
SqlFetchNext(hSqlUser, hSqlCursorRecord, &SqlControl, pstrRecordRecord);
else
SqlFetchFirst(hSqlUser, hSqlCursorRecord, &SqlControl, pstrRecordRecord);
if (SqlControl.nResultCode)
MessageBox(hwndExample, SqlControl.szErrorMessage, szExampleTitle, MB_OK | MB_ICONSTOP);
SendMessage(hwndRecordComboBox, CB_ADDSTRING, 0, (LONG) (LPSTR) pstrRecordRecord);
}
SendMessage(hwndRecordComboBox, CB_SETCURSEL, 0, 0);
} else
MessageBox(hwndExample, SqlControl.szErrorMessage, szExampleTitle, MB_OK | MB_ICONSTOP);
SqlExecute(hSqlUser, hSqlCursorRecord, &SqlControl, szExampleCommit);
SqlCursorClose(hSqlUser, hSqlCursorRecord, &SqlControl);
return (!SqlControl.nResultCode);
}

/*
*
* Create a Table ComboBox:
*
*/

static void near
TableComboBoxCreate(HDC hdcDeviceContext)
{
unsigned nWidth;

nWidth = LOWORD(GetTextExtent(hdcDeviceContext, szTableTitle, sizeof(szTableTitle) - 1));
hwndTableComboBox = CreateWindow("ComboBox",
NULL,
(WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_VSCROLL),
nWidth + (rectExample.right - rectExample.left) / 2,
mExampleMargin,
(rectExample.right - rectExample.left) / 2 - nWidth - mExampleMargin,
nExampleComboBoxHeight,
hwndExample,
IDC_TABLE_BOX,
hExampleInstance,
NULL);
GetWindowRect(hwndTableComboBox, &rectTableComboBox);
SendMessage(hwndTableComboBox, WM_SETFONT, GetStockObject(SYSTEM_FIXED_FONT), 0);
}

/*
*
* Re-execute query for tables and load table combo box
*
*/

static BOOL near
TableComboBoxRefresh()
{
char szQuery[257];
HANDLE hSqlCursorTable;
SQLTABLE SqlTable;
unsigned nUserIndex;
unsigned long lRecordPosition;

hSqlCursorTable = SqlCursorOpen(hSqlUser, &SqlControl);
nUserIndex = (unsigned) SendMessage(hwndUserComboBox, CB_GETCURSEL, 0, 0);
SendMessage(hwndUserComboBox, CB_GETLBTEXT, nUserIndex, (LONG) (LPSTR) pstrRecordUser);
wsprintf(szQuery, szTableSelectStatement, (LPSTR) pstrRecordUser);
SqlControl.wFlags = mSqlFlagFormatString;
if (SqlExecute(hSqlUser, hSqlCursorTable, &SqlControl, szQuery)) {
SqlDescribeTable(hSqlUser, hSqlCursorTable, &SqlControl, &SqlTable);
if (pstrRecordTable)
LocalFree((HANDLE) pstrRecordTable);
pstrRecordTable = (PSTR) LocalAlloc(LPTR, SqlTable.nRecordSize);
SqlControl.nRecordBufferSize = SqlTable.nRecordSize;
SendMessage(hwndTableComboBox, CB_RESETCONTENT, 0, 0);
for (lRecordPosition = 0; lRecordPosition < SqlTable.lNumberOfRecords; lRecordPosition++) {
if (lRecordPosition)
SqlFetchNext(hSqlUser, hSqlCursorTable, &SqlControl, pstrRecordTable);
else
SqlFetchFirst(hSqlUser, hSqlCursorTable, &SqlControl, pstrRecordTable);
if (SqlControl.nResultCode)
MessageBox(hwndExample, SqlControl.szErrorMessage, szExampleTitle, MB_OK | MB_ICONSTOP);
SendMessage(hwndTableComboBox, CB_ADDSTRING, 0, (LONG) (LPSTR) pstrRecordTable);
}
SendMessage(hwndTableComboBox, CB_SETCURSEL, 0, 0);
} else
MessageBox(hwndExample, SqlControl.szErrorMessage, szExampleTitle, MB_OK | MB_ICONSTOP);
SqlCursorClose(hSqlUser, hSqlCursorTable, &SqlControl);
return (!SqlControl.nResultCode);
}

/*
*
* Create a User ComboBox:
*
*/

static void near
UserComboBoxCreate(HDC hdcDeviceContext)
{
unsigned nWidth;

nWidth = LOWORD(GetTextExtent(hdcDeviceContext, szUserTitle, sizeof(szUserTitle) - 1));
hwndUserComboBox = CreateWindow("ComboBox",
NULL,
(WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_VSCROLL),
nWidth,
mExampleMargin,
(rectExample.right - rectExample.left) / 2 - nWidth - mExampleMargin,
nExampleComboBoxHeight,
hwndExample,
IDC_USER_BOX,
hExampleInstance,
NULL);
GetWindowRect(hwndUserComboBox, &rectUserComboBox);
SendMessage(hwndUserComboBox, WM_SETFONT, GetStockObject(SYSTEM_FIXED_FONT), 0);
}

/*
*
* Re-execute query for users and load user combo box
*
*/

static BOOL near
UserComboBoxRefresh()
{
HANDLE hSqlCursorUser;
SQLTABLE SqlTable;
unsigned long lRecordPosition;

hSqlCursorUser = SqlCursorOpen(hSqlUser, &SqlControl);
SqlControl.wFlags = mSqlFlagFormatString;
if (SqlExecute(hSqlUser, hSqlCursorUser, &SqlControl, szUserSelectStatement)) {
SqlDescribeTable(hSqlUser, hSqlCursorUser, &SqlControl, &SqlTable);
if (pstrRecordUser)
LocalFree((HANDLE) pstrRecordUser);
pstrRecordUser = (PSTR) LocalAlloc(LPTR, SqlTable.nRecordSize);
SqlControl.nRecordBufferSize = SqlTable.nRecordSize;
SendMessage(hwndUserComboBox, CB_RESETCONTENT, 0, 0);
for (lRecordPosition = 0; lRecordPosition < SqlTable.lNumberOfRecords; lRecordPosition++) {
if (lRecordPosition)
SqlFetchNext(hSqlUser, hSqlCursorUser, &SqlControl, pstrRecordUser);
else
SqlFetchFirst(hSqlUser, hSqlCursorUser, &SqlControl, pstrRecordUser);
if (SqlControl.nResultCode)
MessageBox(hwndExample, SqlControl.szErrorMessage, szExampleTitle, MB_OK | MB_ICONSTOP);
SendMessage(hwndUserComboBox, CB_ADDSTRING, 0, (LONG) (LPSTR) pstrRecordUser);
}
SendMessage(hwndUserComboBox, CB_SETCURSEL, 0, 0);
} else
MessageBox(hwndExample, SqlControl.szErrorMessage, szExampleTitle, MB_OK | MB_ICONSTOP);
SqlCursorClose(hSqlUser, hSqlCursorUser, &SqlControl);
return (!SqlControl.nResultCode);
}

/*
*
* Example Window Program:
*
*/

int PASCAL
WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpstrCmdLine, int nCmdShow)
{
MSG msgMessage;

lpstrCmdLine = lpstrCmdLine;
hExampleInstance = hInstance;
if (!SqlGetStatus(0, 0, NULL, NULL)) {
MessageBox(GetFocus(), "The Dba is not running!", szExampleTitle, MB_OK | MB_ICONSTOP);
return (0);
}
if (!hPrevInstance && !ExampleInitializeApplication())
return (0);
if (!ExampleInitializeInstance(nCmdShow))
return (0);
while (GetMessage(&msgMessage, NULL, 0, 0)) {
TranslateMessage(&msgMessage);
DispatchMessage(&msgMessage);
}
return (0);
}


  3 Responses to “Category : Windows 3.X Files
Archive   : QWNSQL2C.ZIP
Filename : EXAMPLEC.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/