Verwaltung und Programmierung


Abbild-, Audio- oder Videoobjekt aktualisieren

Verwenden Sie die benutzerdefinierte Funktion (UDF) "Content" in einer SQL-Anweisung UPDATE, um ein Abbild-, Audio- oder Videoobjekt in einer Datenbanktabelle zu aktualisieren. Verwenden Sie die UDF "Replace" in einer SQL-Anweisung UPDATE, um ein Abbild-, Audio- oder Videoobjekt in einer Datenbanktabelle sowie einen dem Objekt zugeordneten Kommentar zu aktualisieren. In beiden Fällen aktualisiert der Extender die dem Objekt zugeordneten Attribute.

Sie können ein Objekt aktualisieren, das in einer Datenbanktabelle als BLOB oder in einer Server-Datei gespeichert ist. (Dabei verweist bei der zweiten Möglichkeit die Datenbank auf die Datei.) Die Quelle der Aktualisierung kann sich in einem Puffer oder einer Datei auf dem Client oder in einer Datei auf dem Server befinden.

In Tabelle 4 werden die Formate aufgelistet, in denen Abbild-, Audio- und Videoobjekte aktualisiert werden können. Sie können jedoch auch ein Objekt aktualisieren, dessen Format vom Extender nicht erkannt wird. In diesem Fall wurden die Attribute des Objekts vom Benutzer beim Speichern angegeben. Beim Aktualisieren eines Objekts mit vom Benutzter angegebenen Attributen müssen Sie die geänderten Attribute angeben.

Sie können auch das Piktogramm für ein gespeichertes Abbild oder Video aktualisieren.

Aktualisierungsoperation festschreiben: Nach dem Aktualisieren eines Abbild- Audio- oder Videoobjekts in einer Datenbank sollten Sie für die Arbeitseinheit eine COMMIT-Operation durchführen. Hierdurch werden die Sperren, die die Extender verwenden, freigegeben, so daß Sie weitere Aktualisierungsoperationen für das gespeicherte Objekt durchführen können.

Formate der UDF "Content" für die Aktualisierung

Die benutzerdefinierte Funktion (UDF) "Content" ist mehrfach belegt. Dies bedeutet, daß sie abhängig von der Verwendung der UDF unterschiedliche Formate hat. Folgende Formate stehen zur Verfügung:

Format 1: Objekt aus einem Client-Puffer oder einer Client-Datei ohne Formatumsetzung aktualisieren:

Content(
     handle,                     /* object handle */
     content,                    /* object content */
     source_format,              /* source format */
     target_file                 /* target file name for storage in file */
                                 /* server or NULL for storage in table as BLOB */
  );

Format 2: Objekt aus einer Server-Datei ohne Formatumsetzung aktualisieren:

Content(
     handle,                     /* object handle */
     source_file,                /* server file name */
     source_format,              /* source format */
     stortype                    /* MMDB_STORAGE_TYPE_EXTERNAL=store */
                                 /* in file server */
                                 /* MMDB_STORAGE_TYPE_INTERNAL=store as a BLOB*/
  );

Format 3: Objekt mit vom Benutzer angegebenen Attributen aus einem Client-Puffer oder einer Client-Datei aktualisieren:

Content(
     handle,                     /* object handle */
     content,                    /* object content */
     target_file,                /* target file name for storage in file server */
                                 /* or NULL for storage in table as BLOB */
     attrs,                      /* user-supplied attributes */
     thumbnail                   /* thumbnail (image and video only) */
  );

Format 4: Objekt mit vom Benutzer angegebenen Attributen aus einer Server-Datei aktualisieren:

Content(
     handle,                     /* object handle */
     source_file,                /* server file name */
     stortype,                   /* MMDB_STORAGE_TYPE_EXTERNAL=store */
                                 /* in file server*/
                                 /* MMDB_STORAGE_TYPE_INTERNAL=store as a BLOB */
     attrs,                      /* user-supplied attributes */
     thumbnail                   /* thumbnail (image and video only) */
  );

Für Abbildobjekte verfügt die UDF "Content" über die folgenden zusätzlichen Formate:

Format 5: Abbild aus einem Client-Puffer oder einer Client-Datei mit Formatumsetzung aktualisieren:

Content(
     handle,                     /* object handle */
     content,                    /* object content */
     source format,              /* source format */
     target format,              /* target format */
     target_file                 /* target file name for storage in file server */
                                 /* or NULL for storage in table as BLOB */
  );

Format 6: Objekt aus einer Server-Datei mit Formatumsetzung aktualisieren:

Content(
     handle,                     /* object handle */
     source_file,                /* server file name */
     source format,              /* source format */
     target format,              /* target format */
     target_file                 /* target file name for storage in file server */
                                 /* or NULL for storage in table as BLOB */
  );

Format 7: Abbild aus einem Client-Puffer oder einer Client-Datei mit Formatumsetzung und zusätzlichen Änderungen aktualisieren:

Content(
     handle,                     /* object handle */
     content,                    /* object content */
     source format,              /* source format */
     target format,              /* target format */
     conversion_options,         /* conversion options */ 
     target_file                 /* target file name for storage in file server */
                                 /* or NULL for storage in table as BLOB */
  );

Format 8: Objekt aus einer Server-Datei mit Formatumsetzung und zusätzlichen Änderungen aktualisieren:

Content(
     handle,                     /* object handle */
     source_file,                /* server file name */
     source format,              /* source format */
     target format,              /* target format */
     conversion_options,         /* conversion options */
     target_file                 /* target file name for storage in file server */
                                 /* or NULL for storage in table as BLOB */
  );

Die folgenden Anweisungen in einem C-Anwendungsprogramm aktualisieren beispielsweise ein Abbild in der Tabelle "employee". Der Quelleninhalt für die Aktualisierung befindet sich in einer Server-Datei mit dem Namen ajones.bmp. Das aktualisierte Abbild wird in der Tabelle "employee" ohne Formatumsetzung als BLOB (Binary Large Object) gespeichert. (Dies entspricht dem oben aufgeführten Format 2.)

EXEC SQL UPDATE employee
   SET picture=Content(
                 picture,                         /*image handle*/
                 '/employee/newimg/ajones.bmp',   /*source file */
                 'ASIS',                          /*keep the image format*/
                 '');                             /*store image in DB as BLOB*/
   WHERE name='Anita Jones';

Die folgenden Anweisungen in einem C-Anwendungsprogramm aktualisieren das gleiche Abbild wie im vorigen Beispiel. In diesem Fall wird jedoch das Abbild beim Aktualisieren vom BMP-Format in das GIF-Format umgesetzt. (Dies entspricht dem oben aufgeführten Format 6.)

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;

EXEC SQL UPDATE employee
   SET picture=Content(
                 picture,                         /*image handle*/
                 '/employee/newimg/ajones.bmp',   /*source file */
                 'BMP',                           /*source format*/
                 'GIF',                           /*target format*/
                 :hvStorageType);                 /*store image in DB as BLOB*/
   WHERE name='Anita Jones';

Formate der UDF "Replace" für die Aktualisierung

Die benutzerdefinierte Funktion (UDF) "Replace" ist mehrfach belegt. Dies bedeutet, daß sie abhängig von der Verwendung der UDF unterschiedliche Formate hat. Folgende Formate stehen zur Verfügung:

Format 1: Objekt aus einem Client-Puffer oder einer Client-Datei ohne Formatumsetzung aktualisieren und seinen Kommentar ebenfalls aktualisieren:

Replace(
     handle,                      /* object handle */
     content,                     /* object content */
     source_format,               /* source format */
     target_file,                 /* target file name for storage in file */
     comment                      /* user comment */
  );

Format 2: Objekt aus einer Server-Datei ohne Formatumsetzung aktualisieren:

Replace(
     handle,                      /* object handle */
     source_file,                 /* server file name */
     source_format,               /* source format */
     stortype,                    /* MMDB_STORAGE_TYPE_EXTERNAL=store */
                                  /* in file server*/
                                  /* MMDB_STORAGE_TYPE_INTERNAL=store as a BLOB*/
     comment                      /* user comment */
  );

Format 3: Objekt mit vom Benutzer angegebenen Attributen aus einem Client-Puffer oder einer Client-Datei aktualisieren und seinen Kommentar ebenfalls aktualisieren:

Replace(
     handle,                      /* object handle */
     content,                     /* object content */
     target_file,                 /* target file name for storage in file server */
                                  /* or NULL for storage in table as BLOB */
     comment,                     /* user comment */
     attrs,                       /* user-supplied attributes */
     thumbnail                    /* thumbnail (image and video only) */
  );

Format 4: Objekt mit vom Benutzer angegebenen Attributen aus einer Server-Datei aktualisieren und seinen Kommentar ebenfalls aktualisieren:

Replace(
     handle,                      /* object handle */
     source_file,                 /* server file name */
     stortype,                    /* MMDB_STORAGE_TYPE_EXTERNAL=store */
                                  /* in file server */
                                  /* MMDB_STORAGE_TYPE_INTERNAL=store as a BLOB*/
     comment                      /* user comment */
     attrs,                       /* user-supplied attributes */
     thumbnail                    /* thumbnail (image and video only) */
  );

Für Abbildobjekte verfügt die UDF "Replace" über die folgenden zusätzlichen Formate:

Format 5: Abbild aus einem Client-Puffer oder einer Client-Datei mit Formatumsetzung aktualisieren und seinen Kommentar ebenfalls aktualisieren:

Replace(
     handle,                      /* object handle */
     content,                     /* object content */
     source_format,               /* source format */
     target_format,               /* target format */
     target_file,                 /* target file name for storage in file server */
                                  /* or NULL for storage in table as BLOB */
     comment                      /* user comment */
  );

Format 6: Objekt aus einer Server-Datei mit Formatumsetzung aktualisieren und seinen Kommentar ebenfalls aktualisieren:

Replace(
     handle,                      /* object handle */
     source_file,                 /* server file name */
     source_format,               /* source format */
     target_format,               /* target format */
     target_file,                 /* MMDB_STORAGE_TYPE_EXTERNAL=store */
                                  /* in file server */
                                  /* MMDB_STORAGE_TYPE_INTERNAL=store as a BLOB*/
     comment                      /* user comment */
  );

Format 7: Abbild aus einem Client-Puffer oder einer Client-Datei mit Formatumsetzung und zusätzlichen Änderungen aktualisieren und seinen Kommentar ebenfalls aktualisieren:

Replace(
     handle,                      /* object handle */
     content,                     /* object content */
     source_format,               /* source format */
     target_format,               /* target format */
     conversion_options,          /* conversion options */ 
     target_file,                 /* target file name for storage in file server */
                                  /* or NULL for storage in table as BLOB */
     comment                      /* user comment */
  );

Format 8: Objekt aus einer Server-Datei mit Formatumsetzung und zusätzlichen Änderungen aktualisieren und seinen Kommentar ebenfalls aktualisieren:

Replace(
     handle,                      /* object handle */
     source_file,                 /* server file name */
     source_format,               /* source format */
     target_format,               /* target format */
     conversion_options,          /* conversion options */
     target_file,                 /* MMDB_STORAGE_TYPE_EXTERNAL=store */
                                  /* in file server */
                                  /* MMDB_STORAGE_TYPE_INTERNAL=store as a BLOB*/
     comment                      /* user comment */
  );

Die folgenden Anweisungen in einem C-Anwendungsprogramm aktualisieren beispielsweise einen Audioclip in der Tabelle "employee" und aktualisieren den ihm zugeordneten Kommentar. Der Quelleninhalt für die Aktualisierung befindet sich in einer Server-Datei mit dem Namen ajones.wav. Der aktualisierte Audioclip wird in der Tabelle "employee" ohne Formatumsetzung als BLOB (Binary Large Object) gespeichert (der Audio Extender unterstützt keine Formatumsetzung). Dies entspricht dem oben aufgeführten Format 2.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;

EXEC SQL UPDATE employee
   SET sound=Replace(
                 sound,                         /*audio handle*/
                 '/employee/newaud/ajones.wav', /*source file */
                 'WAV',                         /*keep the audio format*/
                 :hvStorageType,                /*store audio in DB as BLOB*/
                 'Anita''s new greeting')       /*user comment*/
   WHERE name= 'Anita Jones';

Im folgenden Beispiel werden ein Abbild und der ihm zugeordnete Kommentar aktualisiert. Der Quelleninhalt für die Aktualisierung befindet sich in einer Server-Datei. Das aktualisierte Abbild wird in der Tabelle "employee" als BLOB (Binary Large Object) gespeichert und beim Aktualisieren vom BMP-Format in das GIF-Format umgesetzt. (Dies entspricht dem oben aufgeführten Format 6.)

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;

EXEC SQL UPDATE employee
   SET picture=Replace(
                 picture,                         /*image handle*/
                 '/employee/newimg/ajones.bmp',   /*source file */
                 'BMP',                           /*source format*/
                 'GIF',                           /*target format*/
                 ''                               /*store image in DB as BLOB*/
                 'Anita''s new picture')
   WHERE name='Anita Jones';                      /* user comment */

Objekt vom Client aktualisieren

Verwenden Sie eine Host-Variable oder eine Dateireferenzvariable, um ein Abbild-, Audio- oder Videoobjekt aus einem Client-Puffer oder einer Client-Datei zu aktualisieren.

Befindet sich die Quelle für die Aktualisierung in einer Client-Datei, sollten Sie eine Dateireferenzvariable verwenden, um seinen Inhalt zu übertragen. Die Anweisungen im folgenden Beispiel für ein C-Anwendungsprogramm definieren eine Dateireferenzvariable mit dem Namen Audio_file und verwenden sie, um einen Audioclip, der als BLOB in einer Datenbanktabelle gespeichert ist, zu aktualisieren. Die Quelle für die Aktualisierung befindet sich in einer Client-Datei. Beachten Sie, daß das Feld file_options der Dateireferenzvariablen auf die Option SQL_FILE_READ, d. h. auf Eingabe gesetzt ist. Beachten Sie auch, daß die Dateireferenzvariable als Inhaltsargument für die benutzerdefinierte Funktion "Content" verwendet wird.

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB_FILE Audio_file;
EXEC SQL END DECLARE SECTION;

strcpy (Audio_file.name, "/employee/newsound/ajones.wav");
Audio_file.name_length= strlen(Audio_file.name);
Audio_file.file_options= SQL_FILE_READ;

EXEC SQL UPDATE employee
   SET sound=Content(
                 sound,
                 :Audio_file                 /*file reference variable*/
                 'WAVE',                     /*keep the image format*/
                 CAST(NULL as LONG VARCHAR)
   WHERE name='Anita Jones';

Befindet sich das Objekt in einem Client-Puffer, sollten Sie eine Host-Variable verwenden, um seinen Inhalt zum Aktualisieren zu übertragen. Im folgenden Beispiel für ein C-Anwendungsprogramm wird eine Host-Variable mit dem Namen Video_seg verwendet, um den Inhalt eines Videoclips zum Aktualisieren zu übertragen. Der dem Videoclip zugeordnete Kommentar wird ebenfalls aktualisiert. Der Videoclip wird als BLOB in einer Datenbanktabelle gespeichert. Beachten Sie, daß die Host-Variable als Inhaltsargument für die benutzerdefinierte Funktion "Replace" verwendet wird.

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB (2M) Video_seg
EXEC SQL END DECLARE SECTION;

EXEC SQL UPDATE employee
   SET video=Content(
                 video,
                 :Video_seg                  /*host variable*/
                 'MPEG1',
                 CAST(NULL as LONG VARCHAR),
                 'Anita''s new video')
   WHERE name='Anita Jones';

Stellen Sie sicher, daß genügend UDF-Speicher zur Verfügung steht: Wenn Sie ein Objekt aktualisieren, dessen Inhalt sich in einem Client-Puffer befindet, müssen Sie sicherstellen, daß der Parameter UDF_MEM_SZ in der Datenbankmanagerkonfiguration auf einen Wert von mindestens 4 MB gesetzt ist. Sie können den Parameter UDF_MEM_SZ mit dem DB2-Befehl UPDATE DATABASE MANAGER CONFIGURATION aktualisieren.

Objekt vom Server aktualisieren

Wenn sich der Quelleninhalt für die Aktualisierung eines Abbild-, Audio- oder Videoobjekts in einer Server-Datei befindet, müssen Sie den Dateipfad als Inhaltsargument für die benutzerdefinierte Funktion angeben. Die folgende Anweisung in einem C-Anwendungsprogramm aktualisiert beispielsweise ein Abbild in einer Datenbank. Der Abbildinhalt befindet sich in einer Server-Datei, auf die von der Datenbank aus verwiesen wird. Die Quelle für die Aktualisierung befindet sich ebenfalls in einer Server-Datei.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_EXTERNAL;

EXEC SQL UPDATE employee
   SET picture=Content(
                 picture,                              /* image handle */
                 '/employee/newimg/ajones.bmp',        /* source file */
                 'ASIS',
                 :hvStorageType)
   WHERE name='Anita Jones';

Geben Sie den korrekten Pfad an: Wenn Sie ein Objekt aktualisieren, dessen Quelle sich in einer Server-Datei befindet, können Sie den vollständig qualifizierten oder den relativen Namen der Datei angeben. Wenn Sie einen relativen Namen angeben, müssen Sie sicherstellen, daß die entsprechenden Umgebungsvariablen auf dem DB2-Server den korrekten Pfad für die Datei enthalten. Informationen zum Definieren dieser Umgebungsvariablen befinden sich in Anhang A. Umgebungsvariablen für DB2 Extender einstellen.

Datenbank- oder Dateispeicherung für die Aktualisierungen angeben

Sie können ein Abbild-, Audio- oder Videoobjekt aktualisieren, das in einer Datenbanktabelle als BLOB oder in einer Server-Datei (auf die von der Datenbank aus verwiesen wird) gespeichert ist.

Wenn Sie das Objekt aus einem Client-Puffer oder einer Client-Datei aktualisieren, erfolgt die Speicherung als BLOB oder Server-Datei entsprechend der Angaben, die Sie im Parameter "filename" machen. Die Angabe eines Dateinamens bedeutet, daß ein Objekt aktualisiert werden soll, dessen Inhalt sich in einer Server-Datei befindet. Wenn Sie keinen Dateinamen angeben, bedeutet dies, daß ein als BLOB in einer Datenbanktabelle gespeichertes Objekt aktualisiert werden soll.

Die folgenden Anweisungen in einem C-Anwendungsprogramm aktualisieren beispielsweise ein Abbild, dessen Inhalt sich in einer Server-Datei befindet. Die Aktualisierungsquelle befindet sich in einem Client-Puffer. Der Kommentar zum Abbild wird ebenfalls aktualisiert.

EXEC SQL BEGIN DECLARE SECTION;
  SQL TYPE IS BLOB (2M) Img_buf
EXEC SQL END DECLARE SECTION;

EXEC SQL UPDATE employee
   SET picture=Replace(
                   picture,
                   :Img_buf,
                   'ASIS',
                   '/employee/newimg/ajones.bmp',      /*update image in*/
                                                       /*server file*/
                   'Anita''s new picture')
   WHERE name='Anita Jones';

Geben Sie beim Aktualisieren eines Objekts aus einer Server-Datei die Konstante MMDB_STORAGE_TYPE_INTERNAL an, wenn Sie ein als BLOB in einer Datenbanktabelle gespeichertes Objekt aktualisieren wollen. Wollen Sie ein Objekt aktualisieren, dessen Inhalt sich in der Server-Datei befindet, geben Sie MMDB_STORAGE_TYPE_EXTERNAL an.

Im folgenden C-Anwendungsprogramm wird beispielsweise ein Audioclip aktualisiert. Der Inhalt des Audioclips befindet sich in einer Server-Datei. Die Quelle für die Aktualisierung befindet sich ebenfalls in einer Server-Datei.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_EXTERNAL;

EXEC SQL UPDATE employee
   SET sound=Content(
                 sound,
                 '/employee/newimg/ajones.wav',
                 'WAVE',
                 :hvStorageType)        /*update audio in server file*/
   WHERE name='Anita Jones';

Format für die Aktualisierung angeben

Beim Aktualisieren eines Objekts müssen Sie sein Format angeben. Die Extender speichern das aktualisierte Abbild-, Audio- oder Videoobjekt im gleichen Format wie die Quelle. Bei Abbildern haben Sie die Möglichkeit anzugeben, daß der Image Extender das Format des aktualisierten Abbilds umsetzen soll. Soll das Abbildformat umgesetzt werden, müssen Sie das Format der Aktualisierungsquelle und des Zielabbilds (d. h. des aktualisierten zu speichernden Abbilds) angeben.

Format für die Aktualisierung ohne Umsetzung angeben

Geben Sie das Format der Quelle des Abbild-, Audio- oder Videoobjekts an, wenn ein Objekt ohne Formatumsetzung aktualisiert werden soll. Die folgende Anweisung in einem C-Anwendungsprogramm aktualisiert beispielsweise ein Bitmap-Abbild (BMP), dessen Inhalt sich in einer Server-Datei befindet. Das Format des aktualisierten Abbilds wird nicht umgesetzt.

EXEC SQL UPDATE employee
   SET picture=Content(
                 picture,
                 '/employee/newimg/ajones.bmp',
                 'BMP',                          /*image format*/
                 '')
   WHERE name='Anita Jones';

Sie können auch einen Nullwert oder eine leere Zeichenfolge als Format angeben. Für den Image Extender ist auch die Zeichenfolge ASIS zulässig. In diesem Fall bestimmt der Extender das Format, indem er die Quelle prüft.

NULL oder ASIS als erkennbare Formate verwenden: Geben Sie einen Nullwert, eine leere Zeichenfolge oder die Zeichenfolge ASIS nur an, wenn der Extender das Format erkennen kann, d. h., wenn es eines der Formate ist, die in Tabelle 4 für den Extender aufgeführt sind. Sonst kann der Extender das Objekt nicht aktualisieren.

Formate und Umsetzungsoptionen für die Aktualisierung mit Formatumsetzung angeben

Geben Sie das Format für die Quellen- und Zielabbilder an, wenn Sie ein Abbild mit Formatumsetzung aktualisieren wollen. In Tabelle 4 ist aufgelistet, welche Formatumsetzungen zulässig sind.

Darüber hinaus können Sie Umsetzungsoptionen für zusätzliche Änderungen angeben, z. B. Drehung oder Komprimierung, die für das aktualisierte Abbild angewendet werden sollen. Die Umsetzungsoption wird über einen Parameter und einen zugeordneten Wert angegeben. Die Parameter und die zulässigen Werte sind in Tabelle 5 aufgelistet. Sie können mehrere Änderungen für das aktualisierte Abbild anfordern, indem Sie mehrere Parameter/Wert-Paare angeben.

Im folgenden Beispiel wird ein Abbild, dessen Inhalt sich in einer Server-Datei befindet, aktualisiert. Die Quelle der Aktualisierung ist im Bitmap-Format (BMP). Das Format wird beim Aktualisieren vom BMP- in das GIF-Format umgesetzt.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;

EXEC SQL UPDATE employee
   SET picture=Content(
                 picture,
                 '/employee/newimg/ajones.bmp',
                 'BMP',                               /*source format*/
                 'GIF',                               /*target format*/
                 :hvStorageType)
   WHERE name='Anita Jones';

Im folgenden Beispiel wird das gleiche Abbild beim Aktualisieren in das GIF-Format umgesetzt. Darüber hinaus wird das Abbild beim Aktualisieren um 90 Grad im Uhrzeigersinn gedreht.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;

EXEC SQL UPDATE employee
   SET picture=Content(
                 picture,
                 '/employee/newimg/ajones.bmp',
                 'BMP',                               /*source format*/
                 'GIF',                               /*target format*/
                 '-r 1',                               /* conversion options */
                 :hvStorageType)
   WHERE name='Anita Jones';

Objekt mit vom Benutzer angegebenen Attributen aktualisieren

Wenn Sie ein Abbild-, Audio- oder Videoobjekt aktualisieren, das mit vom Benutzer angegebenen Attributen gespeichert wurde, müssen Sie die Attribute des Inhalts, mit dem aktualisiert wird, angeben. Ordnen Sie die Attributwerte in einer Attributstruktur zu. Die Attributstruktur muß im Datenfeld der Variablen mit dem Datentyp LONG VARCHAR FOR BIT DATA in der benutzerdefinierten Funktion gespeichert werden.

Der UDF-Code auf dem Server erwartet Daten immer in einem Format, das spezifisch für UNIX-Plattformen ist. Wenn Sie ein Objekt von einem Nicht-UNIX-Client aktualisieren, müssen Sie die vom Benutzer angegebenen Attributdaten vorbereiten, so daß der UDF-Code auf dem Server das Objekt korrekt verarbeiten kann. Verwenden Sie die API DBiPrepareAttrs, um Attribute für Abbildobjekte vorzubereiten, die API DBaPrepareAttrs für die Attribute von Audioobjekten und die API DBvPrepareAttrs für die Attribute von Videoobjekten.

Die folgenden Anweisungen in einem C-Anwendungsprogramm aktualisieren beispielsweise ein Abbild, dessen Inhalt sich in einer Server-Datei befindet. Das Quellenabbild hat ein benutzerdefiniertes Format und eine Höhe von 640 Pixel sowie eine Breite von 480 Pixel. Beachten Sie, daß die Attribute vorbereitet werden, bevor das Abbild aktualisiert wird.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
struct {
       short len;
       char data[400];
       }hvImgattrs;
EXEC SQL END DECLARE SECTION;

DB2IMAGEATTRS    *pimgattr;

hvStorageType=MMDB_STORAGE_TYPE_INTERNAL;

pimgattr = (DB2IMAGEATTRS *) hvImgattrs.data;
strcpy(pimgattr>Format,"FormatI");
pimgattr>width=640;
pimgattr>height=480;
hvImgattrs.len=sizeof(DB2IMAGEATTRS);

DBiPrepareAttrs(pimgattr);

EXEC SQL UPDATE employee
   SET picture=Replace(
                 picture,
                 '/employee/newimg/ajones.bmp',
                 :hvStorageType,
                 'Anita''s new picture',
                 :ImgAttrs,                     /*user-supplied attributes*/
                 CAST(NULL as LONG VARCHAR),
   WHERE name='Anita Jones';

Piktogramm aktualisieren (nur für Abbild und Video)

Verwenden Sie die benutzerdefinierte Funktion (UDF) "Thumbnail", um ein für ein Abbild- oder Videoobjekt gespeichertes Piktogramm zu aktualisieren oder um ein Piktogramm hinzuzufügen, falls dem gespeicherten Abbild- oder Videoobjekt noch keines zugeordnet ist. Geben Sie bei der Verwendung der UDF "Thumbnail" die Kennung des Objekts, dessen Piktogramm aktualisiert werden soll, und den Inhalt des aktualisierten oder neuen Piktogramms an.

Generieren Sie das Piktogramm in Ihrem Programm; die Extender stellen keine APIs zur Verfügung, mit denen Piktogramme generiert werden können. Sie können die Größe und das Format des aktualisierten Piktogramms steuern. Erstellen Sie im Programm eine Struktur für das Piktogramm und geben Sie die Piktogrammstruktur in der UDF an.

Die folgenden Anweisungen in einem C-Anwendungsprogramm aktualisieren beispielsweise das einem gespeicherten Videoclip zugeordnete Piktogramm.

EXEC SQL BEGIN DECLARE SECTION;
     struct {
       short len;
       char data[10000];
     }hvThumbnail;
EXEC SQL END DECLARE SECTION;

/*Create thumbnail and store in hvThumbnail*/

EXEC SQL UPDATE employee
   SET picture=Thumbnail(
                 picture,
                 :hvThumbnail)
   WHERE name='Anita Jones';

Sie können ein Piktogramm auch aktualisieren, wenn Sie ein Abbild- oder Videoobjekt mit vom Benutzer angegebenen Attributen aktualisieren. Wenn Sie ein Abbild- oder Videoobjekt mit vom Benutzer angegebenen Attributen aktualisieren, ist es sogar notwendig, daß Sie ein Piktogramm als Eingabe angeben. Geben Sie anstelle des Piktogramms einen Nullwert oder eine leere Zeichenfolge an, wenn Sie das Piktogramm beim Aktualisieren des Objekts nicht ebenfalls aktualisieren wollen.

Die folgenden Anweisungen in einem C-Anwendungsprogramm aktualisieren einen Videoclip mit vom Benutzer angegebenen Attributen sowie ein dem Videoclip zugeordnetes Piktogramm.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
   struct {
       short len;
       char data[400];
   }hvVidattrs;
   struct {
       short len;
       char data[10000];
   }hvThumbnail;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_EXTERNAL;

MMDBVideoAttrs         *pvideoAttr;
pvideoAttr=(MMDBVideoAttrs *)hvVidattrs.data;
strcpy(pvideoAttr>cformat,"Formatv");
hvVidattrs.len=sizeof(MMDBVideoAttrs);

/* Update video content and thumbnail */

EXEC SQL UPDATE employee
   SET video=Replace(
                 video,
                 '/employee/newvid/ajones.mpg',
                 :hvStorageType,
                 'Anita''s new video',
                 :VidAttrs,
                 :hvThumbnail)               /*thumbnail*/
   WHERE name='Anita Jones';

Kommentar aktualisieren

Sie können einen Kommentar separat oder bei der Aktualisierung des zugeordneten Objekts aktualisieren.

Verwenden Sie die benutzerdefinierte Funktion (UDF) "Comment", um einen Kommentar separat zu aktualisieren. Geben Sie den Inhalt des aktualisierten Kommentars und die Tabellenspalte, die die Kennung des Objekts enthält, an. Verwenden Sie eine Host-Variable, um den Inhalt an den Server zu übertragen. Die folgenden Anweisungen deklarieren beispielsweise eine Host-Variable mit dem Namen hvRemarks und verwenden sie, um einen bestehenden Kommentar für einen gespeicherten Videoclip zu aktualisieren.

EXEC SQL BEGIN DECLARE SECTION;
  struct {
         short len;
         char data [40];
  }hvRemarks;
EXEC SQL END DECLARE SECTION;

/* Get the old comment */

EXEC SQL SELECT Comment(video)
     INTO :hvRemarks
     FROM employee
     WHERE name = 'Anita Jones';

/* Append to old comment */

hvRemarks.data[Remarks.len]='\0';
hvRemarks.len=strlen(hvRemarks.data);
strcat (hvRemarks.data, "Updated video");
EXEC SQL UPDATE employee
     SET video=Comment(video, :hvRemarks)
     WHERE name = 'Anita Jones';

Verwenden Sie die UDF "Replace", um einen Kommentar zu aktualisieren, wenn das zugeordnete Objekt aktualisiert wird. Die folgenden Anweisungen aktualisieren beispielsweise einen Videoclip, der in einer Server-Datei gespeichert ist, sowie den ihm zugeordneten Kommentar.

EXEC SQL BEGIN DECLARE SECTION;
  long hvStorageType;
EXEC SQL END DECLARE SECTION;

hvStorageType=MMDB_STORAGE_TYPE_EXTERNAL;

EXEC SQL UPDATE employee
   SET video=Replace(
                 video,
                 '/employee/newvid/ajones.mpg',
                 'MPEG1',
                 :hvStorageType,
                 'Anita''s new video')        /*updated comment*/
   WHERE name='Anita Jones';


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

Search the DB2 Extender Books