#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;
}