IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Création de table Firebird avec delphi7


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Points : 52
    Points
    52
    Par défaut Création de table Firebird avec delphi7
    Bonsoir tout le monde?
    J'ai un soucis pour la création des tables avec clés primaires et étrangères ensuite la création des relations entre ces clés en firebird sous delphi7.
    Aidez moi à m'expliquer le comment ça se passe si possibilité y est.
    Merci par avance.
    Excusez moi de mes différentes fautes.
    Par Zizou7.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    un objet Query, celui que tu aime, BDE, IBX, UIB, ZEOS ... je te laisse choisir

    Ensuite, du strictement basique
    CREATE TABLE, ADD CONSTRAINT PRIMARY KEY ... LE SQL de A à Z : 7e partie - Création et manipulation des schémas : CREATE, ALTER, DROP
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut avec les uib, mais déja détourné sur dbexpress
    Créer une table

    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
    procedure NewTable(UneTable: String; UIBdatabase: tuibdatabase);
    var
      q: TUIBQuery;
      t: TUIBTransaction;
    begin
      if UIBdatabase <> nil then
      begin
        q := TUIBQuery.Create(nil);
        t := TUIBTransaction.Create(nil);
        q.Transaction := t;
        t.Database := UIBdatabase;
        UneTable:=UpperCase(UneTable);
        try
          with q do
          begin
            close;
            sql.clear;
            sql.add('select 1 from RDB$RELATIONS where RDB$RELATION_NAME = :UneTable');
            Params.ByNameAsString['UneTable'] := UneTable;
            open;
            if Fields.ByNameAsInteger['CONSTANT'] = 1 then
            ELSE begin
              ///////////////////////////////////////////////////////////
              close;
              sql.clear;
              sql.Text := ' CREATE GENERATOR GEN_' + UneTable + '_ID;';
              try
                ExecSQL;
              Except
                On E: Exception do
                  ShowMessage('Création Imposible :' + E.Message);
              end;
              ///////////////////////////////////////////////////////////
              close;
              sql.clear;
              sql.Text := 'CREATE TABLE ' + UneTable + ' ' + '(ID      INTEGER) ;';
              try
                ExecSQL;
              Except
                On E: Exception do
                  ShowMessage('Création Imposible :' + E.Message);
              end;
              ///////////////////////////////////////////////////////////
              close;
              sql.clear;
              sql.Text := 'CREATE UNIQUE INDEX ' + UneTable + '_IDX1 on '+UneTable+' (ID)';
              try
                ExecSQL;
              Except
                On E: Exception do
                  ShowMessage('Création Imposible :' + E.Message);
              end;
              /////////////////////////////////////////////////////////////
              close;
              sql.clear;
              sql.Text := 'CREATE OR ALTER TRIGGER ' + UneTable +
                '_BI FOR ' + UneTable + ' ACTIVE BEFORE INSERT POSITION 0 ' + 'as ' +
                'begin ' + '   if (new.id is null) then' +
                '      new.id = gen_id(gen_' + UneTable + '_id,1);' + 'end';
              try
                ExecSQL;
              Except
                On E: Exception do
                  ShowMessage('Création Imposible :' + E.Message);
              end;
              ///////////////////////////////////////////////////////////
            end;
          end;
        finally
          q.Free;
          t.Free;
        end;
      end;
    end;
    Creer un champ
    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
    procedure NewField(UneTable:String; UnChamp: String; UnType:String; UIBdatabase: tuibdatabase);
    var
      q : TUIBQuery;
      t : TUIBTransaction;
    begin
      if UIBDatabase<>nil then
      begin
        UneTable:=UpperCase(UneTable);
        UnChamp:=UpperCase(UnChamp);
        q:=TUIBQuery.Create(nil);
        t:=TUIBTransaction.Create(nil);
        q.Transaction:=t;
        t.Database:=UIBDatabase;
        try
          with q do
          begin
            close;
            sql.clear;
            sql.add('select 1 from rdb$relation_fields where rdb$relation_name =:UneTable and RDB$FIELD_NAME =:UnChamp;');
            Params.ByNameAsString['UneTable']:=UneTable;
            Params.ByNameAsString['UnChamp']:=UnChamp;
            open;
            if Fields.ByNameAsInteger['CONSTANT']=1 then ELSE
            begin
              close;
              sql.Clear;
              Sql.Text := Format('ALTER TABLE %s ADD %s %s;', [UneTable, UnChamp, UnType]);
              try
                ExecSQL;
              Except
                On E:Exception do ShowMessage('Création Imposible :'+E.Message);
              end;
            end;
          end;
        finally
          q.Free;
          t.Free;
        end;
      end;
    end;
    récupérer et incrémenté le générateur format IBExpert

    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
    function GetID(aType:string; Uibdatabase:Tuibdatabase):Integer;
    var
      q : TUIBQuery;
      t : TUIBTransaction;
    begin
      q:=TUIBQuery.Create(nil);
      t:=TUIBTransaction.Create(nil);
      q.Transaction:=t;
      t.DataBase:=Uibdatabase;
      try
        with q do
        begin
          SQL.Add('SELECT GEN_ID (GEN_'+aType+'_ID, 1) from rdb$database');
          Open;
          Result:=q.Fields.AsInteger[0];
          Close;
        end;
      finally
        FreeAndNil(q);
        FreeAndNil(t);
      end;
    end;
    Typiquement on appelle les les procédures
    j'ai pas d'exemple sous la main pour newtable mais bon, c'est facile a appellé
    Newfiel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewField('FACTURES','V_TELEPHONE','VARCHAR(20) CHARACTER SET ISO8859_1',dmVulcain.UIBdbVulcain);
    get ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
              if (FieldByName('ID').IsNull) or ( FieldByName('ID').AsInteger<1)
                then FieldByName('ID').AsInteger:= GetID('FACTURES', UIBDatabase);
    Avec ces procedures dans un fichier .pas, je me prends plus la tête pour la syntaxe, je recommande quand même de tester ses tables avec un outil comme IbExpert, flamerobin etc etc..

    Cordialement

    André

    Pendant que j'y suis, dans l'état ou je l'ai laissé il y a trois semaine, travaillé sur nzn.delphi changer la longeur d'un champ char ou varchar

    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
    procedure AlterFieldStringLength(db: TUIBDatabase; const TableName, FieldName: string;
     ExpectedLenght: Integer);
    var
     T: TUIBTransaction;
    begin
     
      T := TUIBTransaction.create(nil);
      T.DataBase := db;
     
      with TUIBQuery.Create(nil) do
      begin
        Transaction := T;
        SQL.Text :=
          'select f.RDB$FIELD_LENGTH '
        + 'from RDB$RELATION_FIELDS r '
        + 'join RDB$FIELDS f on (r.RDB$FIELD_SOURCE=f.RDB$FIELD_NAME) '
        + 'where (r.RDB$RELATION_NAME=?) and (r.RDB$FIELD_NAME=?)';
     
        try
          Params.AsString[0] := TableName;
          Params.AsString[1] := FieldName;
          Open;
          if (not EOF) and (Fields.AsInteger[0] < ExpectedLenght) then
          T.ExecuteImmediate(
              'ALTER TABLE ' + TableName
            + ' ALTER ' + FieldName
            + ' TYPE VARCHAR('+IntToStr(ExpectedLenght)+')'
          );
          if (not EOF) and (Fields.AsInteger[0] > ExpectedLenght) then
          begin
            T.ExecuteImmediate('ALTER TABLE '+TableName+' ADD c_temp VARCHAR('+IntToStr(ExpectedLenght)+')') ;
            T.Commit;
            T.ExecuteImmediate('UPDATE '+TableName+' SET c_temp = '+FieldName+'');
            T.ExecuteImmediate('ALTER TABLE '+TableName+' DROP '+FieldName+'');
            T.ExecuteImmediate('ALTER TABLE '+TableName+' ALTER c_temp TO '+FieldName+'');
          end;
          finally
          Free;
          T.Free;
        end;
      end;
    end;

  4. #4
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut création de table sous firebird
    Utilise un gestionnaire de base de données !
    simple, pratique, rapide, efficace !

    un must..

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Idéalement, IBExpert pour les bases de données Firebird !

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Salut

    Notepad + ISQL pour les bourins comme moi .

    Blague à part, cela marche si la création ne doit pas être faite par le programme à l'exécution. Un avantage est que l'on a la description exacte de la structure de la base dans un document que l'on peut commenter à volonté, ça coûte pas cher et ça rend service.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut
    Ou un mixte des deux :
    1 - Création de la base par IBExpert.
    2 - Extraction des fichers.SQL de création correspondants (toujours avec IBExpert).
    3 - Ensuite passer la main à un éditeur simple permettant de commenter les SQL (et de les modifier).

    Ca m'as bien aidé dernièrement pour convertir une base Interbase/Windows en une base Firebird sous Linux.
    Pierre GIRARD

Discussions similaires

  1. Cours gratuits de developpement 2 tierces firebird avec delphi7
    Par Zizoua dans le forum Bases de données
    Réponses: 4
    Dernier message: 16/06/2014, 12h40
  2. Création de table avec Null par defaut
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 15/02/2006, 09h20
  3. probléme avec la création de table Mysql 5
    Par developpeur_mehdi dans le forum Outils
    Réponses: 3
    Dernier message: 19/10/2005, 19h08
  4. Création de tables avec postgresql
    Par angiosfr dans le forum JDBC
    Réponses: 6
    Dernier message: 28/09/2005, 20h43
  5. Création de table avec index
    Par Seb7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2003, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo