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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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. Merci.