140 lines
3.9 KiB
ObjectPascal
140 lines
3.9 KiB
ObjectPascal
(*
|
|
* Program type: API Interface
|
|
*
|
|
* Description:
|
|
* This program updates a blob data type.
|
|
* Project descriptions are added for a set of projects.
|
|
* The contents of this file are subject to the Interbase Public
|
|
* License Version 1.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy
|
|
* of the License at:
|
|
* http://www.borland.com/devsupport/interbase/opensource/IPL.html
|
|
*
|
|
* Software distributed under the License is distributed on an
|
|
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
|
|
* or implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code was created by Borland Software Corporation
|
|
* and its predecessors. Portions created by Borland are Copyright (c)
|
|
* 1994 - 2001 Borland Software Corporation.
|
|
* All rights reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Aaron Ruddick InterBase QA, Borland Software Corp.
|
|
* Dan Mikhayltsa InterBase QA, Borland Software Corp.
|
|
*)
|
|
|
|
program api8;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
uses
|
|
SysUtils,
|
|
JvUIBase,
|
|
JvUIBLib;
|
|
|
|
const
|
|
Proj_data: array[0..21] of string =
|
|
('VBASE',
|
|
'Design a video data base management system for ',
|
|
'controlling on-demand video distribution.',
|
|
'',
|
|
'DGPII',
|
|
'Develop second generation digital pizza maker ',
|
|
'with flash-bake heating element and ',
|
|
'digital ingredient measuring system.',
|
|
'',
|
|
'GUIDE',
|
|
'Develop a prototype for the automobile version of ',
|
|
'the hand-held map browsing device.',
|
|
'',
|
|
'MAPDB',
|
|
'Port the map browsing database software to run ',
|
|
'on the automobile model.',
|
|
'',
|
|
'HWRII',
|
|
'Integrate the hand-writing recognition module into the ',
|
|
'universal language translator.',
|
|
'',
|
|
'');
|
|
|
|
var
|
|
Inp_ptr: Integer = 0;
|
|
|
|
function get_line: string;
|
|
begin
|
|
result := Proj_data[Inp_ptr];
|
|
inc(Inp_ptr);
|
|
end;
|
|
|
|
var
|
|
upd_stmt: string;
|
|
blob_handle: IscBlobHandle = nil;
|
|
DB: IscDbHandle = nil; (* database handle *)
|
|
trans: IscTrHandle = nil; (* transaction handle *)
|
|
sqlda: TSQLParams;
|
|
line: string;
|
|
rec_cnt: Integer = 0;
|
|
empdb: string;
|
|
FLibrary: TUIBLibrary;
|
|
|
|
begin
|
|
FLibrary := TUIBLibrary.Create;
|
|
try
|
|
if (ParamCount > 1) then
|
|
empdb := ParamStr(1) else
|
|
empdb := 'D:\Unified Interbase\demo\Database\employee.db';
|
|
|
|
upd_stmt := 'UPDATE project SET proj_desc = ? WHERE proj_id = ?';
|
|
|
|
FLibrary.AttachDatabase(empdb, DB, 'user_name=SYSDBA;password=masterkey');
|
|
|
|
// Set-up the SQLDA for the update statement.
|
|
|
|
sqlda := TSQLParams.Create;
|
|
{.$WARNING "Not supported anymore!"}
|
|
sqlda.AddFieldType('1',uftBlob);
|
|
sqlda.AddFieldType('2',uftVarChar);
|
|
//!!! sqlda.AddBlob;
|
|
//!!! sqlda.AddString;
|
|
|
|
FLibrary.TransactionStart(trans, DB);
|
|
|
|
// Get the next project id and update the project description.
|
|
|
|
line := get_line;
|
|
while (line <> '') do
|
|
begin
|
|
sqlda.AsString[1] := line;
|
|
writeln(format('Updating description for project: %s', [line]));
|
|
|
|
blob_handle := nil;
|
|
sqlda.AsQuad[0] := FLibrary.BlobCreate(DB, trans, blob_handle);
|
|
|
|
line := get_line;
|
|
while (line <> '') do
|
|
begin
|
|
writeln(format(' Inserting segment: %s', [line]));
|
|
FLibrary.BlobWriteString(blob_handle, line);
|
|
line := get_line;
|
|
end;
|
|
FLibrary.BlobClose(blob_handle);
|
|
FLibrary.DSQLExecuteImmediate(DB, trans, upd_stmt, 1, sqlda);
|
|
inc(rec_cnt);
|
|
line := get_line;
|
|
end;
|
|
|
|
FLibrary.TransactionRollback(trans); // change to TransactionCommit to apply updates
|
|
writeln(format('Added %d project descriptions.', [rec_cnt]));
|
|
|
|
FLibrary.DetachDatabase(DB);
|
|
sqlda.Free;
|
|
|
|
readln;
|
|
finally
|
|
FLibrary.Free;
|
|
end;
|
|
end.
|
|
|