次の図 は、QBIC カタログを作成する C プログラムの一部を示したものです。 このプログラムは、列全体の画像を QBIC カタログにカタログする機能もあります。 このプログラムはその全体が SAMPLES サブディレクトリーの QBCATDMO.C ファイルにあります。 このプログラムを実行する場合には、ENABLE と POPULATE のサンプル・プログラム (これらのプログラムも SAMPLES サブディレクトリーにあります) をまず実行する必要があります。 サンプル・プログラムの詳細については、付録 B, サンプル・プログラムとメディア・ファイルを参照してください。
プログラムの次の点に注目してください。
(1) dmbqbapi ヘッダー・ファイルをインクルードする。
(2) データベースに接続する。
(3) カタログを作成する。カタログは、自動カタログがオフで作成されます。
(4) カタログを更新用にオープンする。
(5) 平均色というフィーチャーをカタログに追加する。
(6) 1 つの列全体の画像をカタログする。
(7) カタログをクローズする。
#include <sql.h> #include <sqlcli.h> #include <sqlcli1.h> #include <dmbqbqpi.h> (1) #include <stdio.h> /****************************************************************************/ /* Define the function prototypes */ /****************************************************************************/ void printError(SQLHSTMT hstmt); void createCatalog(); void openCatalog(); void closeCatalog(); void addFeature(); void catalogImageColumn(); QbCatalogHandle cHdl = 0; static SQLHENV henv; static SQLHDBC hdbc; static SQLHSTMT hstmt; static SQLRETURN rc; char tableName[] = "sobay_catalog"; char columnName[] = "covers"; SQLCHAR uid[18+1]; SQLCHAR pwd[30+1]; SQLCHAR dbnName[SQL_MAX_DSN_LENGTH+1]; void main () { /*---- prompt for database name, userid, and password ----*/ printf("Enter database name:\n"); gets((char *) dbName); printf("Enter userid:\n"); gets((char *) pwd); /* set up the SQL CLI environment */ SQlAllocEnv(&henv); SQLAllocConnect(henv, &hdbc); rc = SQLConnect(hdbc,dbname,SQL_NTS,uid,SQL_NTS,pwd,SQL_NTS); (2) if (rc != SQL_SUCCESS) { printError(SQL_NULL_HSTMT); exit(1); } createCatalog(); openCatalog(); addFeature(); getCatalogInfo(); listFeatures(); catalogImageColumn(); closeCatalog(); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); } /**********************************************************************/ void createCatalog() { SQLINTEGER autoCatalog = 0; SQLINTEGER retLen; SQLINTEGER errCode = 0; char errMsg[500]; QbCreateCatalog( (3) (char *) tableName, (char *) columnName, autoCatalog, 0 ); DBiGetError(&errCode, errMsg); if(errCode) printf("Error code is %d Error Message %s", errCode, errMsg); } /**********************************************************************/ void openCatalog() { SQLINTEGER errCode = 0; char errMsg[500]; SQLINTEGER mode = qbiUpdate; QbOpenCatalog( (4) (char *) tableName, (char *) columnName, mode, &cHdl ); DBiGetError(&errCode, errMsg); if(errCode) printf("Error code is %d Error Message %s", errCode, errMsg); } /**********************************************************************/ void addFeature() { SQLINTEGER errCode=0; char errMsg[5 if(cHdl) /* if we have an open catalog, else do nothing */ { char featureName*lbrk.] = "QbColorFeatureClass"; (5) QbaddFeature( cHdl, featureName ); DBiGetError(&errCode, errMsg); if(errCode) printf("Error code is %d Error Message %s", errCode, errMsg); } else { exit(1); } } /**********************************************************************/ void catalogImageColumn() { SQLINTEGER errCode = 0; char errMsg[500]; if(cHdl) /* if we have an open catalog, else do nothing */ { SQLRETURN rc; QbCatalogColumn( (6) cHdl, ); DBiGetError(&errCode, errMsg); if(errCode) printf("Error code is %d Error Message %s", errCode, errMsg); else { exit(1); } } /**********************************************************************/ void closeCatalog() { if(cHdl) /* if we have an open catalog, else do nothing */ { QbCloseCatalog( (7) cHdl, ); } } /**********************************************************************/ |