#include <idapi.h>
#include <stdio.h>
#include <windows.h>
DBIResult Chk(DBIResult);
// Prototyp funkce
void main ()
{
hDBIDb hDb
= 0; // Madlo k databßzi
hDBICur hCur = 0;
// Madlo kurzoru
CHAR
szTblName[DBIMAXNAMELEN];
CHAR
szTblType[DBIMAXNAMELEN];
CURProps curProps;
// Vlastnosti kurzoru
pBYTE
pRecBuf;// Ukazatel na vyrovnßvacφ pam∞╗ zßznamu
DFLOAT custNum;
BOOL
isBlank;
printf("\nInicializace BDE");
Chk(DbiInit(NULL));
printf("\nOtev°enφ databßze");
Chk(DbiOpenDatabase(
NULL,
// JmΘno databßze - NULL pro standardnφ databßze
NULL,
// Typ databßze - NULL pro standardnφ databßze
dbiREADWRITE,
// Re╛im otev°enφ - Read/Write nebo Read only
dbiOPENSHARED,//
Re╛im sdφlenφ - Shared nebo Exclusive
NULL,
// Heslo - nenφ nutnΘ pro standardnφ databßze
NULL,
// PoΦet parametr∙
NULL,
// Pole deskriptor∙ pro parametry
NULL,
// Hodnoty parametr∙
&hDb));
// Madlo k databßzi
printf("\nNastavenφ adresß°e
tabulky");
Chk(DbiSetDirectory(
hDb,
// Madlo k databßzi
"e:\\bde32\\examples\\tables"));
// Nov² pracovnφ adresß°
printf("\nNastavenφ soukromΘho
adresß°e");
Chk(DbiSetPrivateDir("c:\\temp"));
strcpy(szTblName, "customer");
strcpy(szTblType, szPARADOX);
printf("\nOtev°enφ tabulky");
Chk(DbiOpenTable(
hDb,
// Madlo standardnφ databßze
szTblName,
// JmΘno tabulky
szTblType,
// Typ tabulky - pouze pro lokßlnφ tabulky
NULL,
// JmΘno indexu - VolitelnΘ
NULL,
// IndexTagName - VolitelnΘ (pouze pro dBASE)
0,
// IndexId - 0 = Primary
dbiREADWRITE,
// Re╛im otev°enφ - Read/Write nebo Read Only
dbiOPENSHARED,
// Re╛im sdφlenφ - SHARED nebo EXCL
xltFIELD,
// P°ekladov² re╛im - v∞t╣inou xltFIELD
FALSE,
// Jednosm∞rn² posuv kurzoru
NULL,
// volitelnΘ parametry
&hCur));
// Madlo kurzoru
printf("\nZφskßnφ vlastnostφ
kurzoru");
Chk(DbiGetCursorProps(
hCur,
// Madlo kurzoru
&curProps));
// Vlastnosti kurzoru
printf("\nAlokace vyrovnßvacφ
pam∞ti zßznamu");
pRecBuf = (pBYTE) malloc(curProps.iRecBufSize
* sizeof(BYTE));
if (pRecBuf == NULL)
{
// Pokud pRecBuf
je NULL, pak nenφ dostatek pam∞ti.
// Chybu zde
zpracujeme.
}
else
{
printf("\nNastavenφ
kurzoru p°ed prvnφ zßznam");
Chk(DbiSetToBegin(hCur));
printf("\nZφskßnφ
nßsledujφcφho zßznamu");
Chk(DbiGetNextRecord(
hCur, // Kurzor ze kterΘho chceme zφskat
zßznam
dbiNOLOCK, // Typ zßmku
pRecBuf, // Vyrovnßvacφ pam∞╗ pro ulo╛enφ zßznamu
NULL)); // Vlastnosti zßznamu - v na╣em p°φpad∞ nepou╛ito
printf("\nZφskßnφ
polo╛ky");
Chk(DbiGetField(
hCur, // Kurzor
obsahujφcφ zßznam
1,
// ╚φslo polo╛ky s ╚φslem zßkaznφka
pRecBuf, // Vyrovnßvacφ pam∞╗
obsahujφcφ zßznam
(pBYTE)&custNum,// Prom∞nnß pro Φφslo zßkaznφka
&isBlank)); // Je polo╛ka prßzdnß?
printf("\nHodnota
zφskanΘ polo╛ky je %f", custNum);
}
printf("\n┌klid");
if (pRecBuf != NULL)
free(pRecBuf);
// Uvoln∞nφ vyrovnßvacφ pam∞ti zßznamu
if (hCur != 0)
Chk(DbiCloseCursor(&hCur));
// Uzav°enφ kurzoru
if (hDb != 0)
Chk(DbiCloseDatabase(&hDb));
// Uzav°enφ databßze
DbiExit(); // Uzav°enφ
BDE.
}
DBIResult Chk(DBIResult ErrorValue)
{
char
dbi_status[DBIMAXMSGLEN * 5] = {'\0'};
DBIMSG
dbi_string = {'\0'};
DBIErrInfo ErrInfo;
if (ErrorValue != DBIERR_NONE)
{
DbiGetErrorInfo(TRUE,
&ErrInfo);
if (ErrInfo.iError ==
ErrorValue)
{
wsprintf(dbi_status,
" ERROR %s", ErrInfo.szErrCode);
if (strcmp(ErrInfo.szContext1,
""))
wsprintf(dbi_status,"%s\r\n %s",dbi_status, ErrInfo.szContext1);
if (strcmp(ErrInfo.szContext2,
""))
wsprintf(dbi_status,"%s\r\n %s",dbi_status, ErrInfo.szContext2);
if (strcmp(ErrInfo.szContext3,
""))
wsprintf(dbi_status,"%s\r\n %s",dbi_status, ErrInfo.szContext3);
if (strcmp(ErrInfo.szContext4,
""))
wsprintf(dbi_status,"%s\r\n %s",dbi_status, ErrInfo.szContext4);
}
else
{
DbiGetErrorString(ErrorValue,
dbi_string);
wsprintf(dbi_status,
" ERROR %s", dbi_string);
}
MessageBox(NULL, dbi_status,
"BDE Error", MB_OK | MB_ICONEXCLAMATION);
}
return ErrorValue;
}