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 d'une base de donnée par programme


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 16
    Points : 19
    Points
    19
    Par défaut création d'une base de donnée par programme
    salu
    je veux savoir comment crée une base de donnés accées à travère une interface delphi,bien sur nous devons créer la base de donnée,les tables et les champs pour chaque table.
    merci.

    [modération]Sujet déplacé vers Delphi et bases de données par -Sylvain Leray-[/modération]

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 292
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 292
    Points : 1 944
    Points
    1 944
    Par défaut
    Avec une base en particulier?

  3. #3
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    Je suppose que c'est d'une base de données Access dont tu parles.
    Si oui, fais moi passer ton email par message privé et je t'envoie tout les exemples de code dont tu as besoin:
    • Création de la base sans Access intallé sur la machine
      Création des champs
      Transfert des dataset au format CSV ou autre
      Extraction et réimplantation de fichier image depuis et vers des tables Access
      Etc...

    Cordialement,
    Hauwke

  4. #4
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Bonjour Hauwke, la réponse m'intéresse aussi, peux tu poster au moins la
    "création de la base sans Access Installé sur la machine"
    sur le forum ?

    Merci d'avance !

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pareil, ca m'interesse aussi ^^

  6. #6
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Pas de problème, je vous fais ça dés ce soir. J'ai aussi:
    • Connaître les users du domaine Acess
      Obtenir la liste des gens connectés à la base en cours d'utilisation

    Du code que j'ai utilisé sous D7 entreprise mais j'ai jeté un coup d'oeil au listing papier, y'a rien qui empêche une utilisation sur D2005 par contre avant D7 je sais pas.
    ce soir, je décompresse mon cd d'archive et je post
    Cordialement,
    Hauwke

  7. #7
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Comme promis, (J'espére que les modo vont pas m'assommer pour la longueur du post! rires)

    Création d'une base Access sans Access sur la machine (c'est dans la faq )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Uses ComObj;
    function CreerAccessMdb(FileName: string): string;
    var
      Catalog: OLEVariant;
    begin
      result := '';
      try
        Catalog := CreateOleObject('ADOX.Catalog');
        Catalog.create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Filename + ';');
        Catalog := NULL;
      except
        on E: Exception do result := E.message;
      end;
    end;
    Céeer des tables et s'en servir:
    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    // Déclarer les variables globales
    var
      Access, DataBase, TableDef, EnregSet: Variant;
     
    // Déclarer le tableau de correspondance entre les champs Delphi et Access
      arrMesBasesTypes: array[TFieldType] of Integer =
      ({dbText}10 {ftUnknown},
         {dbText}10 {ftString},
         {dbInteger}3 {ftSmallint},
         {dbLong}4 {ftInteger},
         {dbInteger}3 {ftWord},
         {dbBoolean}1 {ftBoolean},
         {dbDouble}7 {ftFloat},
         {dbCurrency}5 {ftCurrency},
         {dbDouble}7 {ftBCD},
         {dbDate}8 {ftDate},
         {dbDate}8 {ftTime},
         {dbDate}8 {ftDateTime},
         {dbLongBinary}11 {ftBytes},
         {dbLongBinary}11 {ftVarBytes},
         {dbInteger}3 {ftAutoInc},
         {dbLongBinary}11 {ftBlob},
         {dbMemo}12 {ftMemo},
         {dbLongBinary}11 {ftGraphic},
         {dbMemo}12 {ftFmtMemo},
         {dbLongBinary}11 {ftParadoxOle},
         {dbLongBinary}11 {ftDBaseOle},
         {dbBinary}9 {ftTypedBinary},
         {dbText}10 {ftCursor}
    {$IFDEF VER120}
        ,
         {dbText}10 {ftFixedChar},
         {dbText}10 {ftWideString},
         {dbBigInt}16 {ftLargeint},
         {dbText}10 {ftADT},
         {dbText}10 {ftArray},
         {dbText}10 {ftReference},
         {dbText}10 {ftDataSet}
    {$ELSE}
    {$IFDEF VER125}
        ,
         {dbText}10 {ftFixedChar},
         {dbText}10 {ftWideString},
         {dbBigInt}16 {ftLargeint},
         {dbText}10 {ftADT},
         {dbText}10 {ftArray},
         {dbText}10 {ftReference},
         {dbText}10 {ftDataSet}
     
    {$ELSE}
    {$IFDEF VER130}
        ,
         {dbText}10 {ftFixedChar},
         {dbText}10 {ftWideString},
         {dbBigInt}16 {ftLargeint},
         {dbText}10 {ftADT},
         {dbText}10 {ftArray},
         {dbText}10 {ftReference},
         {dbText}10 {ftDataSet},
         {dbLongBinary}11 {ftOraBlob},
         {dbLongBinary}11 {ftOraClob},
         {dbText}10 {ftVariant},
         {dbText}10 {ftInterface},
         {dbText}10 {ftIDispatch},
         {dbGUID}15 {ftGuid}
    {$ENDIF}
    {$ENDIF}
    {$ENDIF});
     
    // Maintenant on peut bosser avec...
     
     
    procedure ChargeAdo;
    try
      Access := GetActiveOleObject('DAO.DBEngine.35');
    except
      Access := CreateOleObject('DAO.DBEngine.35');
    end;
     
     
    procedure OuvrirMdb;
    try
      database := access.OpenDatabase(yourDatabaseName);
    except
      exit
    end;
     
    procedure NouvelleTable;
    begin
      Tabledef := Database.CreatetableDef(NomdeMatable, 0, '', '');
    end;
     
    //Ajouter une description de champ
     
    procedure AjoutDescroChamp;
    begin
      Tabledef.Fields.Append(Tabledef.CreateField(StrFieldName, arrMesBasesTypes[intDataType], Size));
    end;
     
    procedure OuvrirTable;
    begin
      EnregSet := Database.Opentable(LeNomdeMaTable, 0);
    end;
     
    // Ajout d'un enregistrement
     
    procedure AppendEnreg;
    begin
      Recordset.Addnew;
    end;
     
    //Détruire l'objet Ado
     
    procedure DestroyAdo;
    begin
      Access := Unassigned;
    end;
    Exporter au format CSV
    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
    rocedure TMainForm.SaveDataSetCSV;
    const
      adClipString = 2;
      ColumnDelimiter = ';';
      RowDelimiter = #13#10;
    var
      s: string;
      fs: TFileStream;
    begin
      SaveDialog1.DefaultExt := '.CSV';
       // build the default filename
      SaveDialog1.FileName := ADOTable1.TableName + SaveDialog1.DefaultExt;
     
      if SaveDialog1.Execute then
      begin
          // Get the complete dataset as CSV
          // the underlying Recordset-Object does the whole work for you
        s := ADOTable1.Recordset.GetString(adClipString, ADOTable1.Recordset.RecordCount, ColumnDelimiter, RowDelimiter, '');
     
          // save the CSV string to a file
        fs := TFileStream.Create(SaveDialog1.FileName, fmCreate);
        try
          fs.WriteBuffer(s[1], Length(s));
        finally
          fs.Free;
        end;
      end;
    end;
    Récupére les users connectés à la base de données (pour maintenance par exemple)
    1ére méthode
    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
    uses 
      Classes, SysUtils; 
     
    procedure ReadLoggedUsers(const MDBFile:string; ExtractUsers:boolean; 
      List:TStrings); 
    type 
      TChar32 = array[0..31] of char; 
      LDBRecord = record 
        Workstation : TChar32; 
        User : TChar32; 
      end; 
    var 
      Stm : TFileStream; 
      s : string; 
      rec : LDBRecord; 
      i : integer; 
     
      function Char32ToString(arr:TChar32) : string; 
      var 
        i : integer; 
      begin 
        SetLength(result, 32); 
        Move(arr, result[1], 32); 
        result := Trim(result); 
      end; 
     
    begin 
      if List<>nil then begin 
        List.Clear; 
        s := ChangeFileExt(MDBFile, '.ldb'); 
        if FileExists(s) then begin 
          stm := TFileStream.Create(s, fmOpenRead+fmShareDenyNone); 
          try 
            while stm.Position < stm.Size do begin 
              stm.Read(rec, SizeOf(rec)); 
              if ExtractUsers 
                then s := Char32ToString(rec.User) 
                else s := Char32ToString(rec.WorkStation); 
              List.Add(s); 
            end; 
          finally 
            stm.Free; 
          end; 
        end; 
      end; 
    end;
    Cette méthode utilise le fichier *.ldb créé par la base access et enregistrant automatiquement les utilisateurs de la table.

    Deuxième méthode

    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
    uses 
      Variants,  Classes, ADODB; 
     
    const 
      JET_SCHEMA_USERROSTER = '{947bb102-5d43-11d1-bdbf-00c04fb92675}'; 
     
    procedure ReadLoggedUsers(AConnection:TADOConnection; ExtractUsers:boolean; 
      List:TStrings); 
    var 
      Dataset : TADODataset; 
      s : string; 
    begin 
      if (AConnection<>nil) and (List<>nil) then begin 
        List.Clear; 
        Dataset := TADODataset.Create(nil); 
        try 
          Dataset.Connection := AConnection; 
          AConnection.OpenSchema(siProviderSpecific, EmptyParam, 
            JET_SCHEMA_USERROSTER, Dataset); 
          while not Dataset.EoF do begin 
            if ExtractUsers 
              then s := Dataset.FieldByName('LOGIN_NAME').AsString 
              else s := Dataset.FieldByName('COMPUTER_NAME').AsString; 
            List.Add(s); 
            Dataset.Next; 
          end; 
        finally 
          Dataset.Free; 
        end; 
      end; 
    end;
    Celle ci est à utiliser quand on accéde à la base via Ado.

    Voilà, j'ai encore plein de doc sur access récupéré ça et là au gré des surfs. Certains d'entre eux ont été utilisé au moins avec D7 ENT.
    Merci à vous de m'avoir permis de me replonger dans me archives. Je ne me souvenais mm plus de tout ces trésors! rires
    Cordialement,
    Hauwke

  8. #8
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Mais d'aller voir les tutoriels à votre disposition.
    L'un d'eux a pour sujet la création de bases Access.

  9. #9
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    ATTENTION!!!!!!
    A la relecture postée je viens de m'apercevoir que je n'ai pas toujours précisé les clauses USES!
    Ne pas oublier de rajouter les unités VARIANTS, ADODB, DB,..., etc, lorsque celà est nécessaire
    Bonne prog
    Cordialement
    Hauwke

  10. #10
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Salute frank,
    Mais d'aller voir les tutoriels à votre disposition.
    L'un d'eux a pour sujet la création de bases Access.
    +1, je viens de lire ces deux tutos, ils sont excellents.
    Dommage que les tutos ne soient pas présentés comme les sources et la faq, ils rejoindraient illico le bureau de mon pc
    Cordialement,
    Hauwke

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/07/2011, 09h02
  2. [Système/Fichiers/API] Création d'une source de donnée par programmation : SQLConfigDataSource
    Par kmaniche dans le forum C++Builder
    Réponses: 1
    Dernier message: 26/04/2011, 23h05
  3. Réponses: 1
    Dernier message: 05/10/2009, 17h00
  4. Réponses: 4
    Dernier message: 22/09/2004, 09h17
  5. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 15h29

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