Componentes.Terceros.jvcl/official/3.32/examples/JvUIB/API/api8.dpr

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.