| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- {
- * PROGRAM: Object oriented API samples.
- * MODULE: 01.create.pas
- * DESCRIPTION: A sample of creating new database and new table in it.
- * Run second time (when database already exists) to see
- * how FbException is caught and handled by this code.
- *
- * Example for the following interfaces:
- * IMaster - main interface to access all the rest
- * Status - returns the status of executed command
- * Provider - main interface to access DB / service
- * Attachment - database attachment interface
- * Transaction - transaction interface
- * Util - helper calls here and there
- * XpbBuilder - build various parameters blocks
- *
- * Run something like this to build: fpc -Fu<path-to-Firebird.pas> -Mdelphi 01.create.pas
- *
- * The contents of this file are subject to the Initial
- * Developer's 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.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl.
- *
- * Software distributed under the License is distributed AS IS,
- * 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 Alexander Peshkoff
- * for the Firebird Open Source RDBMS project.
- *
- * Copyright (c) 2015 Alexander Peshkoff <[email protected]>
- * and all contributors signed below.
- *
- * All Rights Reserved.
- * Contributor(s): ______________________________________. }
- Program create;
- uses Sysutils, Firebird;
- var
- // Declare pointers to required interfaces
- // Status is used to return wide error description to user
- st : IStatus;
- // This is main interface of firebird, and the only one
- // for getting which there is special function in our API
- master : IMaster;
- util : IUtil;
- // XpbBuilder helps to create various parameter blocks for API calls
- dpb : IXpbBuilder;
- // Provider is needed to start to work with database (or service)
- prov : IProvider;
- // Attachment and Transaction contain methods to work with
- // database attachment and transaction
- att : IAttachment;
- tra : ITransaction;
- procedure PrintError(s : IStatus);
- var
- maxMessage : Integer;
- outMessage : PAnsiChar;
- begin
- maxMessage := 256;
- outMessage := StrAlloc(maxMessage);
- util.formatStatus(outMessage, maxMessage, s);
- writeln(outMessage);
- StrDispose(outMessage);
- end;
- begin
- // Here we get access to master interface and helper utility interface
- // no error return may happen - these functions always succeed
- master := fb_get_master_interface;
- util := master.getUtilInterface;
- // status vector and main dispatcher are returned by calls to IMaster functions
- // no error return may happen - these functions always succeed
- st := master.getStatus;
- prov := master.getDispatcher;
- try
- // create DPB
- dpb := util.getXpbBuilder(st, IXpbBuilder.DPB, nil, 0);
- dpb.insertInt(st, isc_dpb_page_size, 4 * 1024);
- dpb.insertString(st, isc_dpb_user_name, 'sysdba');
- dpb.insertString(st, isc_dpb_password, 'masterkey');
- // create empty database
- att := prov.createDatabase(st, 'fbtests.fdb', dpb.getBufferLength(st), dpb.getBuffer(st));
- writeln ('Database fbtests.fdb created');
- // detach from database
- att.detach(st);
- att := nil;
- // remove unneeded any more tag from DPB
- if dpb.findFirst(st, isc_dpb_page_size)
- then dpb.removeCurrent(st);
- // attach it once again
- att := prov.attachDatabase(st, 'fbtests.fdb', dpb.getBufferLength(st), dpb.getBuffer(st));
- writeln ('Re-attached database fbtests.fdb');
- // start transaction
- tra := att.startTransaction(st, 0, nil);
- // create table
- att.execute(st, tra, 0, 'create table dates_table (d1 date)', 3,
- nil, nil, nil, nil); // Input parameters and output data not used
- // commit transaction retaining
- tra.commitRetaining(st);
- writeln ('Table dates_table created');
- // insert a record into dates_table
- att.execute(st, tra, 0, 'insert into dates_table values (CURRENT_DATE)', 3,
- nil, nil, nil, nil); // Input parameters and output data not used
- // commit transaction (will close interface)
- tra.commit(st);
- tra := nil;
- writeln ('Record inserted into dates_table');
- // detach from database (will close interface)
- att.detach(st);
- att := nil;
- dpb.dispose;
- dpb := nil;
- except
- on e: FbException do PrintError(e.getStatus);
- end;
- prov.release;
- end.
|