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 :

comment retourné la liste des nom des tables tant que je travail via ODBC


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut comment retourné la liste des nom des tables tant que je travail via ODBC
    salut à tous , je travaile via ODBC et je connecte sur des différent type de base , je désire faire la requette qui me retourne les noms des tables dans une base et je le trouve pas (requette), pouvez vous m'aidez svp.

    (je fait mes test sur deux type , access et excel).
    je vous attend et merci

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    pour ACCESS voici le code je l'ai obtenu depuis swissdelphicenter.

    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
    unit dbTables;
     
    interface
     
    uses ADODb;
     
    type
      TTableType = (ttTable, ttView, ttSynonym, ttSystemTable, ttAccessTable);
     
    type
      TTableTypes = set of TTableType;
     
    type
      TTableItem = record
        ItemName: string;
        ItemType: string;
      end;
     
    type
      TTableItems = array of TTableItem;
     
    function addFilter(string1, string2: string): string;
    function ADODbTables(ADOConnection: TADOConnection; types: TTableTypes): TTableItems;
     
    implementation
     
    function addFilter(string1, string2: string): string;
    begin
      if string1 <> '' then
        Result := string1 + ' or ' + string2
      else
        Result := string2;
    end;
     
    function ADODbTables(ADOConnection: TADOConnection; types: TTableTypes): TTableItems;
    var
      ADODataSet: TADODataSet;
      i: integer;
    begin
      ADODataSet := TADODataSet.Create(nil);
      ADODataSet.Connection := ADOConnection;
      ADOConnection.OpenSchema(siTables, EmptyParam, EmptyParam, ADODataSet);
     
      if (ttTable in types) then
        ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''TABLE'')');
     
      if (ttView in types) then
        ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''VIEW'')');
     
      if (ttSynonym in types) then
        ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''SYNONYM'')');
     
      if (ttSystemTable in types) then
        ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''SYSTEM TABLE'')');
     
      if (ttAccessTable in types) then
        ADODataSet.Filter := addFilter(ADODataSet.Filter, '(TABLE_TYPE = ''ACCESS TABLE'')');
     
      ADODataSet.Filtered := True;
     
      SetLength(Result, ADODataSet.RecordCount);
     
      i := 0;
      with ADODataSet do
      begin
        First;
        while not EOF do
        begin
          with Result[i] do
          begin
            ItemName := FieldByName('TABLE_NAME').AsString;
            ItemType := FieldByName('TABLE_TYPE').AsString;
          end;
          Inc(i);
          Next;
        end;
      end;
     
      ADODataSet.Free;
    end;
     
    end.
     
    {
    Example: create a new project and add a TADOConnection (ADOConnection1),
    a TButton (Button1) and a TMemo (Memo1); assign a ConnectionString to the
    TADOConnection component and set "ADOConnection1.Active := True"
    }
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      output: ttableitems;
      i: integer;
    begin
      output := ADODbTables(ADOConnection1, [ttTable, ttView, ttSynonym]);
      //  output := ADODbTables(ADOConnection1, [ttSystemTable, ttAccessTable]);
      for i := Low(output) to High(output) do
      begin
        Memo1.Lines.Add(output[i].ItemName + '---' + output[i].ItemType);
      end;
      output := nil;
    end;
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #3
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    merci bien mais j'utilise l'ODBC donc seulement je doit insérer la requette apres reservation de hundle et connection , voila le code :
    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
     
    begin
     
        // Allocation d'un Handle d'environnement
        RetCode := SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, Henv);
     
        if SQLSucceeded(retcode) then
        // location de hundle OK
        showmessage('hundle reservé')
        Else
        // Echec  en  location de hundle
        showmessage('erreur en location de hundle');
     
     
     
        // Fixe la version de l'ODBC
        RetCode := SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, SQLPOINTER(SQL_OV_ODBC3), 0);
        if SQLSucceeded(retcode) then
        // OK
        showmessage('version 3 fixé')
        Else
        showmessage('erreur en fixation de version  3');
        // Echec
     
     
        // Allocation d'un Handle de connexion
        retCode := SQLAllocHandle(SQL_HANDLE_DBC, hEnv, HDbc);
        if SQLSucceeded(retcode) then
        // location de hundle OK
        showmessage('hundle connection réeusit ')
        Else
        // Echec  en  location de hundle
        showmessage('erreur en location de hundle de connection ');
     
     
     
             //connection à la base
     
        iChaine_Len := 256;
        sChaine := StringOfChar(' ',iChaine_Len);
        RetCode := SQLDriverConnect(hDbc,Application.Handle,
                   pchar(nomDriver+'; DBQ=' + cheminBD),
                   SQL_NTS, PChar(sChaine), iChaine_Len, siRet,
                   SQL_DRIVER_NOPROMPT);
        if sqlsucceeded(retcode) then
        // OK
        showmessage('connection à la base réeusite')
        Else
        // Echec
         showmessage('erreur du connection à la base');
     
     
     
         //préparation de connextion pour la requette
    // Allocation d'un Handle de résultat
        RetCode := SQLAllocHandle(SQL_HANDLE_STMT, hDbc, hStmt);
        if sqlsucceeded(retcode) then
     
        // OK
        showmessage('location de hundle pour la requette réeussi')
     
        Else
        // Echec d'allocation du handle de résultat
         showmessage('Echec d allocation du handle de résultat pour la requette');
    // Requête SQL à exécuter
     
    sSQL := 'ici e vais mettre mon requette qui doit retourné les noms des tables';
     
    // Lance la requête
     
        RetCode := SQLExecDirect(hStmt, Pchar(sSQL), SQL_NTS);
     
        if sqlsucceeded(retcode) then
     
        // OK
        showmessage('requette réeussi')
        Else
     
        // Echec de la requête SQL
         showmessage('Echec de la requête SQL');
    donc c juste la requette qui doit etre inclure , c le meme travail pour tous les type (grace au ODBC).

  4. #4
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut.
    salut.
    juste une prposition
    je désire faire la requette qui me retourne les noms des tables dans une base
    j'ai l'habitude de travailler avec ADO et j'itulise la fonction GETTABLENAME de composant Tadoconnection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adoconnection1.gettablename(Tliste,false)
    il te rend la liste des tables de votrs base .

    cordialement rec82.

  5. #5
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    merci bien , mais je travaille avec l'ODBC , je doit faire une commande sql de base ,c ca le probleme .

  6. #6
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    A priori il n'y a pas de requête SQL standard pour obtenir le nom des tables.

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    si tu arrives à une solution je suis preneur car j'ai beau cherché mais sans résultat.

    Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/08/2007, 21h05
  2. Liste le nom des tables
    Par Elstak dans le forum Access
    Réponses: 9
    Dernier message: 21/08/2006, 22h07
  3. récupérer la liste des noms des champs d'une table
    Par la_didise dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 16h55
  4. [ODBC] Comment récupérer le nom des champs de table Access
    Par Alexlesilex dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/05/2006, 14h14
  5. Comment obtenir la liste des noms des ordinateurs du réseau ?
    Par da_latifa dans le forum Web & réseau
    Réponses: 2
    Dernier message: 17/08/2005, 11h58

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