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

Delphi Discussion :

Erreur sur suppression d'une table firebird


Sujet :

Delphi

  1. #1
    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 Erreur sur suppression d'une table firebird
    Bonjour à tous,

    j'obtiens un message d'erreur sur la suppression lancée à partir d'un code sous D7, d'une table Firebird,
    lorsque celle-ci n'existe pas..
    Ce évènement s'est produit lors du passage de la version 2.5.6.27020_0_Win32.exe à la version 2.5.7.27050_0_Win32.exe.

    voici 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
     
    procedure TFMain.EraseArtefact(mode: boolean);
    var
      StrSQL: string;
      i: integer;
    begin
      try
    { suppression des tables temporaires créées }
        for i := 100 downto 1 do 
          with QImport.SQL do
          begin
            if QImport.Active then
              QImport.Close;
            Clear;
              StrSQL := 'DROP TABLE ' + UpperCase(MTable.Lines.Strings[i]) + ';';
            Add(StrSQL);
            try
             QImport.ExecSQL;
            except
            end;
          end;
      finally
        MTable.Clear;
      end;
    end;
    si la table n'existe pas, le message d'erreur est le suivant:
    Invalid Command
    unknown ISC Error

    j'ai contourné la difficulté en introduisant une fonction testant la présence de la table
    mais je ne comprends pas le phénomène que je n'avais pas avec la version 2.6.

    avez-vous rencontrez ce souci ?
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    QImport : c'est quel type de composant ? TQuery ou un quelconque composant permettant un script SQL
    s'il s'agit d'un TQuery quel est la taille du SQL final ? il y a peut être débordement

    Perso je n'aurais pas fait ce cette manière mais créé une procédure Firebird
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    Citation Envoyé par cantador Voir le message
    Bonjour à tous,

    ...
    voici 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
     
    procedure TFMain.EraseArtefact(mode: boolean);
    var
      StrSQL: string;
      i: integer;
    begin
      try
    { suppression des tables temporaires créées }
        for i := 100 downto 1 do 
        begin
          with QImport.SQL do
          begin
            if QImport.Active then
              QImport.Close;
            Clear;
              StrSQL := 'DROP TABLE ' + UpperCase(MTable.Lines.Strings[i]) + ';';
            Add(StrSQL);
            try
             QImport.ExecSQL;
            except
            end;
          end;
       end;
      finally
        MTable.Clear;
      end;
    end;
    ...
    merci
    pour palier a la non existence d'une table utilise la fonction exists

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      st :=' if (exists (select 1 from rdb$relations where rdb$relation_name = "%0:s") ) then'
           +' execute statement drop table %0:s '
           +' end ';
      ExecSQL(Format(st,[nom]));
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  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
    @anapurna :
    merci
    comme je l'indique, j'ai fait cette fonction et tout fonctionne bien
    mais l'objectif est de comprendre pourquoi cette erreur apparait.

    @sergiomaster :
    merci
    il s'agit d'un TiboQuery
    oui, effectivement j'aurai pu créer une procédure stockée mais vu la simplicité du code..
    toutes les tables supprimées sont nommées (TABLE1, TABLE2, TABLE3 etc..)
    ce sont des tables qui peuvent comporter une quarantaine de champs et pas mal de données
    mais l'erreur se produit aussi sur des toutes petites..
    ??

Discussions similaires

  1. [SageX3V5] Erreur sur parcours d'une table liée
    Par Cereal123 dans le forum SAGE
    Réponses: 7
    Dernier message: 31/03/2015, 16h46
  2. Erreur de filtre sur une table Firebird
    Par defluc dans le forum Bases de données
    Réponses: 8
    Dernier message: 05/06/2010, 11h22
  3. Recupérer le résultat d'une requête sur une table Firebird
    Par defluc dans le forum Bases de données
    Réponses: 7
    Dernier message: 20/04/2007, 18h30
  4. Combler les trous lors d'une suppression dans une table
    Par Billybongjoe dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 08/04/2004, 14h02

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