Verwaltung und Programmierung


QBIC-Kataloge verwalten

Bevor Abbilder nach Inhalt abgefragt werden können, müssen sie in einem QBIC-Katalog katalogisiert sein. Ein QBIC-Katalog hält die Daten zu visuellen Merkmalen von Abbildern.

Sie erstellen einen QBIC-Katalog für jede Abbildspalte in einer Benutzertabelle, die Sie für die Abfrage anhand des Inhalts verfügbar machen wollen. Für jede Abbildspalte in einer Benutzertabelle kann nicht mehr als ein QBIC-Katalog definiert sein, mehrere Spalten können nicht denselben QBIC-Katalog gemeinsam benutzen.

Beim Erstellen eines QBIC-Katalogs geben Sie die Merkmale an, für die der Image Extender Daten speichern soll. Sie geben außerdem an, ob der Image Extender ein Abbild automatisch katalogisieren soll. Das automatische Katalogisieren bedeutet, daß der Image Extender automatisch Einträge für ein Abbild im Katalog erstellt, wenn das Abbild in einer Benutzertabelle gespeichert wird. Wenn das Abbild nicht automatisch katalogisiert wird, müssen Sie es manuell katalogisieren. Das bedeutet, daß Sie explizit im Image Extender angeben müssen, daß für das Abbild Einträge im Katalog erstellt werden sollen.

Nach dem Erstellen eines QBIC-Katalogs können Sie folgende Aktionen ausführen:

Sie können diese Tasks, einschließlich Erstellen eines QBIC-Katalogs, in einem Anwendungsprogramm ausführen, indem Sie die APIs verwenden, die vom Image Extender zur Verfügung gestellt werden. Sie können außerdem viele der Tasks unter Verwendung des db2ext-Befehlszeilenprozessors ausführen.

QBIC-Katalog erstellen

Verwenden Sie die API QbCreateCatalog oder den Befehl CREATE QBIC CATALOG,

um einen QBIC-Katalog zu erstellen. Um einen Katalog erstellen zu können, müssen Sie der Eigner der Benutzertabelle sein, deren Abbilder katalogisiert werden. Darüber hinaus müssen Sie über die Berechtigung CREATE TABLE für die Datenbank verfügen, die den Katalog enthalten wird. Die Benutzertabelle und Abbildspalte müssen für den Image Extender aktiviert sein, bevor Sie einen QBIC-Katalog für die Abbilder in dieser Spalte erstellen.

Beim Erstellen eines QBIC-Katalogs müssen Sie

Benutzertabelle und Spalte müssen aktiviert sein: Die Benutzertabelle und Spalte müssen für den Image Extender aktiviert sein, bevor Sie einen QBIC-Katalog für die Abbilder in dieser Spalte erstellen. (Informationen zum Aktivieren von Benutzertabellen und Spalten für den Image Extender befinden sich in Kapitel 6. Datenobjekte für Extender-Daten vorbereiten.)

Verwendung der API: Wenn Sie die API QbCreateCatalog verwenden, geben Sie das automatische oder manuelle Katalogisieren mit Hilfe des Werts autoCatalog an. Der Wert 1 gibt das automatische Katalogisieren an, der Wert 0 das manuelle Katalogisieren.

Beispielsweise erstellt die folgende Anweisung einen QBIC-Katalog für die Abbilder in der Spalte 'picture' der Tabelle 'employee'. Die Abbilder werden automatisch katalogisiert, wenn sie in der Tabelle 'employee' gespeichert werden:

SQLINTEGER autoCatalog=1;                          /* automatic cataloging */

rc=QbCreateCatalog(
                  "employee",                      /* user table */
                  "picture",                       /* image column */
                  autoCatalog);                    /* auto catalog setting */

Verwendung der Befehlszeile: Wenn Sie den Befehl CREATE QBIC CATALOG eingeben, geben Sie das automatische Katalogisieren mit der Option ON und das manuelle Katalogisieren mit der Option OFF an. OFF ist der Standardwert.

Beispielsweise wird mit dem folgenden Befehl der gleiche QBIC-Katalog erstellt wie im vorangegangenen Beispiel mit der API:

CREATE QBIC CATALOG employee picture on

QBIC-Katalog sichern: Der Image Extender speichert einen QBIC-Katalog in Dateien. Sie sollten diese Dateien in regelmäßigen Abständen sichern für den Fall, daß Sie den Katalog wiederherstellen müssen. Auf einem AIX-, HP-UX- oder Sun Solaris-Server befinden sich die Dateien im Verzeichnis /home/exemplareigner/dmb/qbic, wobei exemplareigner die Benutzer-ID des Exemplareigners ist. Auf einem OS/2- oder Windows-Server befinden sich die Dateien im Verzeichnis \ziel\instance\exemplarname\qbic, wobei ziel das Verzeichnis ist, in dem der Image Extender installiert ist, und exemplarname der Name des Extender-Exemplars ist.

QBIC-Katalog öffnen

Sie müssen einen QBIC-Katalog öffnen, um weitere Aktionen ausführen zu können, die den Katalog ändern oder die Informationen im Katalog verwenden. Beispielsweise müssen Sie einen QBIC-Katalog öffnen, bevor Sie ein Merkmal zu diesem Katalog hinzufügen oder bevor Sie nach Abbildern anhand des Inhalts suchen (dazu wird auf Merkmalinformationen im Katalog zuzugriffen).

Um einen QBIC-Katalog zu öffnen, verwenden Sie die API QbOpenCatalog oder den Befehl OPEN QBIC CATALOG.

Beim Öffnen eines QBIC-Katalogs müssen Sie

Falls ein Katalog bereits geöffnet ist: Sie können keinen Katalog für Aktualisierungsoperationen öffnen, wenn der Katalog in einer anderen Sitzung zum Aktualisieren geöffnet ist. Wenn Sie einen QBIC-Katalog öffnen, schließt der Image Extender jeden QBIC-Katalog, der bereits in der aktuellen Sitzung geöffnet ist.

Verwendung der API: Wenn Sie die API QbOpenCatalog verwenden, geben Sie explizit den Modus an, in dem der Katalog geöffnet werden soll. Geben Sie folgendes an:

QbiRead und QbiUpdate sind Konstanten, die in der Kopfdatei für QBIC, dmbqbapi.h, definiert sind.

Sie müssen außerdem auf die Katalogkennung zeigen. Die Katalogkennung hat den QBIC-spezifischen Datentyp QbCatalogHandle. Dieser Datentyp ist auch in der Datei dmbqbapi.h definiert. Der Image Extender gibt den Wert für die Katalogkennung als Ausgabe der API zurück.

Beispielsweise öffnet der folgende API-Aufruf einen QBIC-Katalog für Leseoperationen:

SQLINTEGER mode;
QbCatalogHandle  *CatHdl;

mode=qbiRead;                                     /* open catalog for */
                                                  /* read operations */
rc=QbOpenCatalog(
                 "employee",                      /* user table */
                 "picture",                       /* image column */
                 mode,                            /* open catalog mode */
                 &CatHdl);                        /* catalog handle */

Verwendung der Befehlszeile: Wenn Sie den Befehl OPEN QBIC CATALOG eingeben, versucht der Image Extender, den Katalog für Aktualisierungsoperationen zu öffnen. Ist der Katalog momentan zum Aktualisieren in einer anderen Sitzung geöffnet, öffnet der Image Extender den Katalog für Leseoperationen.

Beispielsweise wird mit dem folgenden Befehl ein QBIC-Katalog geöffnet. Der Image Extender versucht, ihn für Aktualisierungsoperationen zu öffnen:

OPEN QBIC CATALOG employee picture

Katalog nach dem Beenden von QBIC-bezogenen Vorgängen schließen: Wenn Sie einen QBIC-Katalog öffnen, ordnet der Image Extender Ressourcen, wie z. B. Hauptspeicher, zu. Schließen Sie den Katalog, wenn Sie die QBIC-bezogenen Vorgänge beendet haben. Dadurch werden die zugeordneten Ressourcen freigegeben.

Einstellung für das automatische Katalogisieren ändern

Verwenden Sie die API QbSetAutoCatalog oder den Befehl SET QBIC AUTOCATALOG,

um vom automatischen Katalogisieren zum manuellen Katalogisieren zu wechseln und umgekehrt. Der QBIC-Katalog muß für Aktualisierungsoperationen geöffnet sein, bevor Sie die Katalogeinstellung ändern können.

Die Änderung ist nicht rückwirkend: Wenn Sie die Einstellung zum automatischen Katalogisieren ändern, gilt dies nur für Abbilder, die nach der Änderung zur Benutzertabellenspalte hinzugefügt werden. Abbilder, die bereits in der Benutzertabellenspalte gespeichert sind, sind davon nicht betroffen. Ändern Sie beispielsweise die Einstellung von manuellem Katalogisieren in automatisches Katalogisieren, werden nur die Abbilder automatisch katalogisiert, die nach der Änderung zur Benutzertabellenspalte hinzugefügt werden. Wenn Sie Abbilder katalogisieren wollen, die bereits in der Tabellenspalte sind, müssen Sie sie manuell katalogisieren. (Weitere Informationen zum manuellen Katalogisieren eines Abbilds befinden sich im Abschnitt Abbild manuell katalogisieren.)

Verwendung der API: Wenn Sie die API QbSetAutoCatalog verwenden, geben Sie die Kennung des QBIC-Katalogs an (sie wird zurückgegeben, wenn Sie den Katalog mit Hilfe der API QbOpenCatalog öffnen). Geben Sie außerdem den autoCatalog-Wert 1 für das automatische Katalogisieren oder den Wert 0 für das manuelle Katalogisieren an.

Im folgenden Beispiel ist das manuelle Katalogisieren für einen QBIC-Katalog angegeben, der den Abbildern in der Spalte 'picture' der Tabelle 'employee' zugeordnet ist. Beachten Sie, daß der QBIC-Katalog zunächst für Aktualisierungsoperationen geöffnet wird.

SQLINTEGER mode;
SQLINTEGER autoCatalog=0;                         /* manual cataloging */

QbCatalogHandle  *CatHdl;

mode=qbiUpdate;                                   /* open catalog for */
                                                  /* update */
/* Open a QBIC catalog */
rc=QbOpenCatalog(
                 "employee",                      /* user table */
                 "picture",                       /* image column */
                 mode,                            /* open catalog mode */
                 &CatHdl);                        /* catalog handle */

/* Change the auto catalog setting */
rc=QbSetAutoCatalog(
                  CatHdl,                         /* catalog handle */
                  autoCatalog);                   /* auto catalog flag */

Verwendung der Befehlszeile: Wenn Sie den Befehl SET QBIC AUTOCATALOG eingeben, geben Sie das automatische Katalogisieren mit der Option ON und das manuelle Katalogisieren mit der Option OFF an. Der Befehl gilt für den momentan geöffneten Katalog.

Beispielsweise schaltet der folgende Befehl das automatische Katalogisieren für den momentan geöffneten QBIC-Katalog aus (OFF).

SET QBIC AUTOCATALOG off

Merkmal zu einem QBIC-Katalog hinzufügen

Verwenden Sie die API QbAddFeature oder den Befehl ADD QBIC FEATURE,

um ein Merkmal zu einem QBIC-Katalog hinzuzufügen. Sie müssen mindestens ein Merkmal zu einem QBIC-Katalog hinzufügen, bevor Sie ein Abbild darin katalogisieren können. Der QBIC-Katalog muß für Aktualisierungsoperationen geöffnet sein, bevor Sie ein Merkmal hinzufügen können.

Wenn Sie ein Merkmal zu einem Katalog hinzufügen, geben Sie den Namen des hinzuzufügenden Merkmals an (Merkmalnamen werden in der folgenden Tabelle aufgelistet).

Tabelle 7. QBIC-Merkmalnamen
Merkmalname Merkmal
QbColorFeatureClass Durchschnittsfarbe
QbColorHistogramFeatureClass Histogrammfarbe
QbDrawFeatureClass Positionsgebundene Farbe
QbTextureFeatureClass Textur

Abbilder müssen möglicherweise erneut katalogisiert werden: Wenn Sie ein Merkmal zu einem QBIC-Katalog hinzufügen, speichert der Image Extender die Daten zum neuen Merkmal für die bereits katalogisierten Abbilder nicht automatisch, auch wenn das automatische Katalogisieren eingeschaltet ist. Um die Daten zu einem neuen Merkmal für bereits katalogisierte Abbilder einzufügen, müssen Sie die Abbilder erneut katalogisieren (siehe Abbild erneut katalogisieren).

Verwendung der API: Wenn Sie die API QbAddFeature verwenden, müssen Sie die Kennung des QBIC-Katalogs zusätzlich zum Merkmalnamen angeben. Beachten Sie die Verwendung der Konstanten qbiMaxFeatureName für die Länge des Merkmalnamens. Die Konstante ist in der Kopfdatei für QBIC, dmbqbapi.h, mit dem Wert 50 definiert.

Im folgenden Beispiel wird die API QbAddFeature verwendet, um das Merkmal 'Histogrammfarbe' zu einem QBIC-Katalog hinzuzufügen:

char  featureName[qbiMaxFeatureName];

QbCatalogHandle   CatHdl;

strcpy(featureName,"QbColorHistogramFeatureClass");

rc=QbAddFeature(
                CatHdl,                              /* catalog handle */
                featureName);                        /* feature name */

Verwendung der Befehlszeile: Der Befehl ADD QBIC FEATURE gilt für den momentan geöffneten Katalog. Im folgenden Beispiel wird der Befehl verwendet, um das Merkmal 'positionsgebundene Farbe' zum momentan geöffneten Katalog hinzuzufügen:

ADD QBIC FEATURE QbDrawFeatureClass

Merkmal aus einem QBIC-Katalog löschen

Verwenden Sie die API QbRemoveFeature oder den Befehl REMOVE QBIC FEATURE,

um ein Merkmal aus einem QBIC-Katalog zu löschen. Der Image Extender löscht die Katalogtabelle für das Merkmal. Daraus ergibt sich, daß Daten für dieses Merkmal nicht gespeichert werden, wenn Sie ein Abbild katalogisieren. Der QBIC-Katalog muß für Aktualisierungsoperationen geöffnet sein, bevor Sie ein Merkmal löschen können.

Wenn Sie ein Merkmal aus einem Katalog löschen, geben Sie den Namen des zu löschenden Merkmals an.

Verwendung der API: Wenn Sie die API QbRemoveFeature verwenden, müssen Sie die Kennung des QBIC-Katalogs zusätzlich zum Merkmalnamen angeben.

Im folgenden Beispiel wird die API QbRemoveFeature verwendet, um das Merkmal 'Histogrammfarbe' aus einem QBIC-Katalog zu löschen:

char  featureName[qbiMaxFeatureName];

QbCatalogHandle   CatHdl;

strcpy(featureName,"QbColorHistogramFeatureClass");

rc=QbRemoveFeature(
                CatHdl,                              /* catalog handle */
                featureName);                        /* feature name */

Verwendung der Befehlszeile: Der Befehl REMOVE QBIC FEATURE gilt für den momentan geöffneten Katalog. Im folgenden Beispiel wird der Befehl verwendet, um das Merkmal 'positionsgebundene Farbe' aus dem momentan geöffneten QBIC-Katalog zu löschen:

REMOVE QBIC FEATURE QbDrawFeatureClass

Informationen zu einem QBIC-Katalog abrufen

Sie können die folgenden Informationen zu einem QBIC-Katalog abrufen:

Verwenden Sie die API QbGetCatalogInfo, um die Benutzertabelle und Spaltennamen, die Anzahl an Merkmalen und die Einstellung für das automatische Katalogisieren abzurufen. Verwenden Sie die API QbListFeatures, um die Merkmalnamen abzurufen. Sie können auch den Befehl GET QBIC CATALOG INFO verwenden, um alle Informationen abzurufen.

Der QBIC-Katalog muß geöffnet sein, bevor Sie Informationen abrufen können.

Verwendung der API: Wenn Sie die API QbGetCatalogInfo verwenden, müssen Sie die Kennung des QBIC-Katalogs angeben. Sie müssen außerdem auf eine Struktur zeigen, in der der Image Extender die Kataloginformationen zurückgibt. Die Struktur der Kataloginformationen ist in der Kopfdatei für QBIC, dmbqapi.h, wie folgt definiert:

typedef struct{
          char       tableName[qbiMaxTableName+1]    /* user table */
          char       columnName[qbiMaxColumnName+1]  /* image column */
          SQLINTEGER featureCount;                   /* number of features */
          SQLINTEGER autoCatalog;                    /* auto catalog flag */
} QbCatalogInfo;

Wenn Sie den API-Aufruf eingeben, müssen Sie einen Puffer zuordnen, der die zurückgegebenen Merkmalnamen enthalten soll. Merkmalnamen, die im Puffer gespeichert werden, werden durch Leerzeichen voneinander getrennt. Sie müssen außerdem die Katalogkennung und die Größe des Puffers für die zurückgegebenen Merkmalnamen angeben. Um die benötigte Puffergröße zu schätzen, können Sie die Merkmalanzahl verwenden, die von der API QbGetCatalogInfo zurückgegeben wird, und sie mit der Länge des längsten Merkmalnamens multiplizieren. Sie können die Konstante qbiMaxFeatureName als Größe des längsten Merkmalnamens verwenden.

Die API-Aufrufe in den folgenden Beispielen rufen Informationen zu einem QBIC-Katalog ab. Beachten Sie, wie die Merkmalanzahl, die von der API QbGetCatalogInfo zurückgegeben wird, und die Namenskonstante qbiMaxFeature verwendet werden, um die Puffergröße für die API QbListFeatures zu berechnen:

long  bufSize;
long  count;
char  *featureNames;

QbCatalogHandle  CatHdl;
QbCatalogInfo    catInfo;

/* Get user table name, image column name, feature count, */
/* and auto catalog setting */

rc=QbGetCatalogInfo(
                CatHdl,                              /* catalog handle */
                &catInfo);                           /* catalog info. structure */

/* List feature names */

bufSize=catInfo.featureCount*qbiMaxFeatureName;
featureNames=malloc(bufSize);

rc=QbListFeatures(
                CatHdl,                              /* catalog handle */
                bufSize                              /* size of buffer */
                count,                               /* feature count */
                featureNames);                       /* buffer for feature names */

Verwendung der Befehlszeile: Der Befehl GET QBIC CATALOG INFO gilt für den momentan geöffneten Katalog. Im folgenden Beispiel wird der Befehl verwendet, um Informationen zu dem momentan geöffneten QBIC-Katalog abzurufen:

GET QBIC CATALOG INFO

Abbild manuell katalogisieren

Wenn Sie einen Katalog erstellen, geben Sie an, ob der Image Extender ein Abbild automatisch katalogisieren soll, wenn das Abbild in einer Benutzertabelle gespeichert wird. Wenn ein Abbild nicht automatisch katalogisiert wird, müssen Sie es manuell katalogisieren, nachdem es in der Benutzertabelle gespeichert wurde. Sie können ein einzelnes Abbild oder eine ganze Spalte mit Abbildern katalogisieren.

Einzelnes Abbild manuell katalogisieren

Verwenden Sie die API QbCatalogImage, um ein einzelnes Abbild manuell zu katalogisieren. Sie können ein Abbild nicht mit Hilfe eines Befehls katalogisieren, da es keine Möglichkeit gibt, ein einzelnes Abbild in der Befehlszeile zu identifizieren. Wenn Sie die API verwenden, geben Sie die Katalogkennung und die Abbildkennung an (Sie können die Abbildkennung aus der Benutzertabelle abrufen). Der QBIC-Katalog muß geöffnet sein, bevor Sie ein Abbild manuell katalogisieren können.

Beispielsweise rufen die folgenden Anweisungen eine Abbildkennung aus einer Benutzertabelle ab und katalogisieren danach das Abbild:

/* Retrieve the image handle */

EXEC SQL BEGIN DECLARE SECTION;
char Img_hdl[251];
EXEC SQL END DECLARE SECTION;

QbCatalogHandle   CatHdl;

EXEC SQL SELECT picture INTO :Img_hdl
  FROM employee
  WHERE name='Anita Jones';

/* Catalog the image*/

rc=QbCatalogImage(
                CatHdl,                              /* catalog handle */
                Img_hdl);                            /* image handle */

Spalte mit Abbildern manuell katalogisieren

Verwenden Sie die API QbCatalogColumn oder den Befehl CATALOG QBIC COLUMN,

um eine Spalte mit Abbildern manuell zu katalogisieren. Der Image Extender katalogisiert nur Abbilder in der Spalte, die momentan nicht katalogisiert sind, und er katalogisiert diese Abbilder für alle Merkmale im Katalog. Der QBIC-Katalog muß für Aktualisierungsoperationen geöffnet sein, bevor Sie eine Spalte mit Abbildern manuell katalogisieren können.

Verwendung der API: Wenn Sie die API QbCatalogColumn verwenden, geben Sie die Katalogkennung an. Der Image Extender verwendet die Abbilder in der Benutzertabellenspalte, die dem angegebenen Katalog zugeordnet ist.

Beispielsweise werden mit dem folgenden API-Aufruf die nicht katalogisierten Abbilder in einer Benutzertabellenspalte katalogisiert, die dem angegebenen Katalog zugeordnet ist. Die Abbilder werden für alle Merkmale im Katalog katalogisiert:

QbCatalogHandle  CatHdl;

rc=QbCatalogColumn(
                CatHdl);                             /* catalog handle */

Verwendung der Befehlszeile: Verwenden Sie den Befehl CATALOG QBIC COLUMN, um eine Spalte mit Abbildern manuell zu katalogisieren. Sie können den Befehl auch verwenden, um Abbilder erneut zu katalogisieren (siehe Abbild erneut katalogisieren). Geben Sie die Parameter FOR und NEW an. (FOR und NEW sind Standardparameter.)

Im folgenden Beispiel wird der Befehl verwendet, um die nicht katalogisierten Abbilder in der Tabellenspalte zu katalogisieren, die dem momentan geöffneten Katalog zugeordnet ist. Die Abbilder werden für alle Merkmale im Katalog katalogisiert:

CATALOG QBIC COLUMN FOR NEW

Abbild entkatalogisieren

Das Entkatalogisieren eines Abbilds bedeutet, daß die Einträge für das Abbild aus einem QBIC-Katalog gelöscht werden. Verwenden Sie die API QbUncatalogImage, um ein Abbild zu entkatalogisieren. Sie können ein Abbild nicht mit Hilfe eines Befehls entkatalogisieren, da es keine Möglichkeit gibt, ein einzelnes Abbild in der Befehlszeile zu identifizieren. Wenn Sie die API verwenden, geben Sie die Katalogkennung und die Abbildkennung an (Sie können die Abbildkennung aus der Benutzertabelle abrufen). Der QBIC-Katalog muß für Aktualisierungsoperationen geöffnet sein, bevor Sie ein Abbild entkatalogisieren können.

Beispielsweise rufen die folgenden Anweisungen eine Abbildkennung aus einer Benutzertabelle ab und entkatalogisieren danach das Abbild:

/* Retrieve the image handle */

EXEC SQL BEGIN DECLARE SECTION;
char Img_hdl[251];
EXEC SQL END DECLARE SECTION;

QbCatalogHandle  CatHdl;

EXEC SQL SELECT picture INTO :Img_hdl
  FROM employee
  WHERE name='Anita Jones';

/* Uncatalog the image */

rc=QbUncatalogImage(
                CatHdl,                              /* catalog handle */
                Img_hdl);                            /* image handle */

Abbild erneut katalogisieren

Wenn Sie ein Abbild katalogisieren, analysiert der Image Extender die Merkmale des Abbilds, die für den QBIC-Katalog identifiziert wurden, und speichert die Werte für diese Merkmale im Katalog. Wenn Sie ein Merkmal zu einem QBIC-Katalog hinzufügen, analysiert der Image Extender nicht automatisch das neue Merkmal für bereits katalogisierte Abbilder. Um Werte für das neue Merkmal zum Katalog hinzuzufügen, müssen Sie die Abbilder erneut katalogisieren.

Verwenden Sie die API QbReCatalogColumn oder den Befehl CATALOG QBIC COLUMN,

um die Abbilder in einem QBIC-Katalog erneut zu katalogisieren. Der Image Extender analysiert die neuen Merkmale für die Abbilder und analysiert die bestehenden Merkmale für die Abbilder erneut. Der QBIC-Katalog muß geöffnet sein, bevor Sie Abbilder erneut katalogisieren können.

Verwendung der API: Wenn Sie die API QbReCatalogColumn verwenden, geben Sie die Katalogkennung an.

Im folgenden Beispiel werden die Abbilder in einem QBIC-Katalog erneut analysiert:

QbCatalogHandle  CatHdl;

rc=QbReCatalogColumn(
                CatHdl);                             /* catalog handle */

Verwendung der Befehlszeile: Verwenden Sie den Befehl CATALOG QBIC COLUMN, um Abbilder erneut zu katalogisieren. Der Befehl gilt für den momentan geöffneten Katalog. Sie können den Befehl auch verwenden, um Abbilder manuell zu katalogisieren (siehe Abbild manuell katalogisieren).

Wenn Sie den Befehl eingeben, geben Sie die Parameter FOR und ALL an. Dadurch wird dem Image Extender angegeben, daß alle Abbilder erneut katalogisiert werden sollen.

Im folgenden Beispiel werden die katalogisierten Abbilder im momentan geöffneten QBIC-Katalog erneut katalogisiert:

CATALOG QBIC COLUMN FOR ALL

QBIC-Katalog neu verteilen (nur EEE)

Verwenden Sie die API DMBRedistribute oder den Befehl REDISTRIBUTE NODEGROUP, um QBIC-Merkmaldaten neu zu verteilen, wenn ein Knoten zu einer Knotengruppe hinzugefügt oder aus einer Knotengruppe gelöscht wird. Der Befehl stellt die QBIC-Merkmaldaten auf den gleichen Knoten wie die entsprechenden Benutzerdaten.

Wenn der Neuverteilungsprozeß einen Fehler zurückgibt, können Sie den Befehl mit oder ohne den Parameter CONTINUE erneut ausführen, je nachdem, welche Anweisungen in der Antwort auf den Befehl geliefert werden. Mit dieser Option wird das System angewiesen, an der Stelle fortzufahren, an der es gestoppt wurde, und nicht am Anfang erneut zu starten. Der Parameter CONTINUE sollte nicht verwendet werden, wenn der Befehl REDISTRIBUTE NODEGROUP das erste Mal nach Ausführung des DB2-Befehls REDISTRIBUTE verwendet wird.

Um die Datenintegrität zu gewähren, müssen Sie die einzelnen Knotengruppen nacheinander neu verteilen. Warten Sie, bis die Neuverteilung für eine Knotengruppe beendet ist, bevor Sie die nächste starten.

Verwendung der API: Das folgende Beispiel zeigt, wie die QBIC-Merkmaldaten in der Knotengruppe 'groupone' neu verteilt werden:

        #include <dmbrdst.h>

        rc = DMBRedistribute(groupone,"continue");

Verwendung der Befehlszeile: Das folgende Beispiel zeigt, wie mit dem Befehl REDISTRIBUTE NODEGROUP Daten für den Knoten 'my_nodegroup' unter Verwendung des Parameters CONTINUE neu verteilt werden:

redistribute nodegroup my_nodegroup continue

QBIC-Katalog schließen

Verwenden Sie die API QbCloseCatalog oder den Befehl CLOSE QBIC CATALOG,

um einen QBIC-Katalog zu schließen. Der QBIC-Katalog muß geöffnet sein, bevor Sie ihn schließen können.

Verwendung der API: Wenn Sie den API-Aufruf QbCloseCatalog eingeben, geben Sie die Katalogkennung an. Beispiel:

QbCatalogHandle  CatHdl;

rc=QbCloseCatalog(
                 CatHdl);                             /* catalog handle */

Verwendung der Befehlszeile: Der Befehl CLOSE QBIC CATALOG gilt für den momentan geöffneten Katalog. Im folgenden Beispiel wird der Befehl verwendet, um den momentan geöffneten QBIC-Katalog zu schließen:

CLOSE QBIC CATALOG

QBIC-Katalog löschen

Beim Löschen eines QBIC-Katalogs werden alle Merkmaldaten in den Katalogtabellen gelöscht. Daraus ergibt sich, daß die zugehörigen Abbilder nicht länger für die Abfrage anhand des Inhalts zur Verfügung stehen. Um einen QBIC-Katalog zu löschen, müssen Sie über die Berechtigung ALTER oder CONTROL für die Tabelle verfügen, die dem Katalog zugeordnet ist. Der QBIC-Katalog muß geöffnet sein, bevor Sie ihn löschen können.

Verwenden Sie die API QbDeleteCatalog oder den Befehl DELETE QBIC CATALOG, um einen QBIC-Katalog zu löschen.

Wenn Sie einen QBIC-Katalog löschen, geben Sie die Benutzertabelle und Spalte an, die dem Katalog zugeordnet sind.

Verwendung der API: Im folgenden Beispiel wird die API QbDeleteCatalog verwendet, um einen QBIC-Katalog zu löschen:

 
rc=QbDeleteCatalog(
                  "employee",                      /* user table */
                  "picture");                      /* image column */

Verwendung der Befehlszeile: Der Befehl DELETE QBIC CATALOG gilt für den momentan geöffneten Katalog. Im folgenden Beispiel wird der Befehl verwendet, um den momentan geöffneten QBIC-Katalog zu löschen:

DELETE QBIC CATALOG employee picture

Programm für QBIC-Katalogbeispiel

Die folgende Abbildung zeigt Teile eines in C geschriebenen Programms, mit dem ein QBIC-Katalog erstellt wird. Das Programm katalogisiert außerdem eine Spalte mit Abbildern im QBIC-Katalog. Das vollständige Programm befindet sich in der Datei QBCATDMO.C im Unterverzeichnis SAMPLES. Bevor Sie das vollständige Programm ausführen können, müssen Sie die Beispielprogramme ENABLE und POPULATE ausführen (die sich auch im Unterverzeichnis SAMPLES befinden). Weitere Informationen zu Beispielprogrammen befinden sich im Anhang B. Beispielprogramme und Multimediadateien.

Beachten Sie die folgenden Punkte im Programm:

(1)Die Kopfdatei dmbqbapi wird eingeschlossen.

(2)Eine Verbindung zur Datenbank wird hergestellt.

(3)Der Katalog wird erstellt. Das automatische Katalogisieren ist ausgeschaltet (OFF).

(4)Der Katalog wird für Aktualisierungsoperationen geöffnet.

(5)Das Merkmal 'Durchschnittsfarbe' wird zum Katalog hinzugefügt.

(6)Eine Spalte mit Abbildern wird katalogisiert.

(7)Der Katalog wird geschlossen.

Abbildung 20. Programm für QBIC-Katalogbeispiel

#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,
        );
 }
}
/**********************************************************************/


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]

Search the DB2 Extender Books