firebird créer base de données avec code
Bonjour, j'ai fini de crée ma base de données firebird j'ai le model dans un txt avec toutes mes tables etc et la je voudrais la créer en code mais je bloque sur 'SET TERM ^ ;' cette requette SQL avec IBX me dit :
Citation:
a déclenché la classe d'exception EIBInterBaseError avec le message 'Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 5
TERM'.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| Function TdmDB.CreateNewDB(Const sName, sUser, sPass: String): Boolean;
Procedure cmd(sLine: String; NewDB: TIBDatabase);
Var
ibt: TIBTransaction;
ibq: TIBQuery;
Begin
ibt := TIBTransaction.Create(nil);
ibq := TIBQuery.Create(nil);
Try
NewDB.DefaultTransaction := ibt;
If Not ibt.InTransaction Then
ibt.StartTransaction;
Try
With ibq Do
Begin
DataBase := NewDB;
Transaction := ibt;
// rs := TResourceStream.Create(HInstance , 'DBTMYCARD', 'RT_RCDATA');
// Try
// SQL.LoadFromStream(rs);
// Finally
// rs.Free;
// End;
SQL.Text := sLine;
Prepare;
ExecSQL;
End;
ibt.CommitRetaining;
Except
ibt.RollbackRetaining;
End;
Finally
ibt.Free;
ibq.Free;
End;
End;
Var
NewDB: TIBDatabase;
// rs: TResourceStream;
Begin
Result := False;
NewDB := TIBDatabase.Create(nil);
Try
//user_name=SYSDBA
//password=masterkey
//lc_ctype=UNICODE_FSS
//sql_role_name=3
{$IFDEF DEBUG}
DeleteFile(ChangeFileExt(sName, '.db'));
{$ENDIF}
NewDB.DatabaseName := ChangeFileExt(sName, '.db');
NewDB.Params.Add('USER ''' + sUser + '''');
NewDB.Params.Add('PASSWORD ''' + sPass + '''');
NewDB.Params.Add('PAGE_SIZE 4096');
NewDB.Params.Add('DEFAULT CHARACTER SET UTF8');
NewDB.CreateDatabase;
Cmd('CREATE TABLE MY_CARD (' + 'ID INTEGER NOT NULL,' + 'DATE_REGISTER TIMESTAMP DEFAULT ''NOW'',' +
'ID_CUSTOMER INTEGER NOT NULL,' + 'SURNAME VARCHAR(255) CHARACTER SET NONE NOT NULL COLLATE NONE,' +
'"NAME" VARCHAR(200) CHARACTER SET NONE NOT NULL COLLATE NONE,' + 'NB_SEANCE INTEGER NOT NULL,' +
'ISUNLIMITED INTEGER NOT NULL,' + 'DATE_EXPIRE TIMESTAMP NOT NULL,' + 'BARCODE BIGINT NOT NULL,' +
'LASTCHECK TIMESTAMP,' + 'TOPRINT INTEGER DEFAULT 0);', NewDB);
Cmd('ALTER TABLE MY_CARD ADD PRIMARY KEY (ID);', NewDB);
Cmd('SET TERM ^ ;', NewDB);
Cmd('CREATE TRIGGER BI_MY_CARD_ID FOR MY_CARD ACTIVE BEFORE INSERT POSITION 0 AS BEGIN ' +
'IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(MY_CARD_ID_GEN, 1); END^', NewDB);
Cmd('SET TERM ; ^', NewDB);
Result := True;
Finally
NewDB.Free;
End;
End; |
et en plus écrire tout en dur est super long et galère à maintenir. Je suis ouvert à toute idée pour simplifier sa. :mur: Merci.