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 :

[D7] [INTERBASE] pb de requete interbase


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut [D7] [INTERBASE] pb de requete interbase
    bonjour à tous,
    Voila mon problème est simple, je veux accéder à une base interbase et créer une nouvelle colonne dans une table existante.
    voila mon 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
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       IBQuery1.Create(NIL);
       IBDatabase1.create(NIL);
       IBDatabase1.connected:=false;
       IBDatabase1.DatabaseName:=databasetest;
       IBDatabase1.Params.Add('USER_NAME=SYSDBA');
       IBDatabase1.Params.Add('PASSWORD='+Password);
       IBDatabase1.LoginPrompt:=false;
       IBDatabase1.Connected:=true;
       with  IBQuery1 do
        begin
              Transaction:=TIbTransaction.Create(Nil);
              Transaction.DefaultDatabase:= IBDatabase1;
              close;
              SQL.Clear;
              SQL.add('ALTER TABLE P1XXXXX ADD DEMANDEUR2 varchar(30)  NOT NULL');
              try
                  ExecSQL;
                  Transaction.Commit;
                  Edit1.Text:='P1.........ok';
                  except on E:exception do
                                          begin showmessage('marche pas');
                                                Transaction.Rollback;
                                          end;
             end;
        end;
        IBDatabase1.connected:=false;
    end;
    Quand j'exécute, tout ce passe bien, ma table est bien modifié, mais quand je veux fermer mon application j'ai un message d'erreur: 'Erreur ElistERROR, indice de liste hors limite (0)'

    J'ai lu que ce type d'erreur se produisait quand on faisait des requetes en utilisant les parameters, ce qui n'ait pas mon cas.
    Le plus curieux dans cette histoire c'est que la commande SQL est exécutée....

    Voila merci d'avance pour vos lumières sur ce problème.
    vince

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    Ton problème peut venir d'une grid, d'une liste ou tout autre composant ayant des listes et pas seulement des composants base de données.

    Que fais tu quand tu fermes ton application ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut
    Merci d'avoir répondu aussi vite. Je ne fais rien du tout avant de fermer. c'est juste une petite application qui viendra plus tard se greffer sur un programme plus concéquent. Si je fais pas ca le débug devient un vrai parcours du combattant.

    Je n'ai donc comme composant que 1 TIBDatabase
    1 TIBQuery
    1 TEdit (pour dire que l'opération à bien eu lieu)
    2 bouton (go et close )

    Pour fermer le programme j'ai juste ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    form1.close;
    end;

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    dans le oncloseQuery de ta form rajoute les fermeture des query/tables et connexions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Query.close;
    Tables.close;
    Connexion.Connected := False;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut
    merci de te pencher sur mon problème

    J'ai pas trouvé de onclosequery dans les evènement de mon IBquery mais il y a un before close.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.IBQuery1BeforeClose(DataSet: TDataSet);
    begin
    close;
    IBDatabase1.connected:=false;
    end;
    J'ai mis un point d'arret et le programme n'y passe jamais. Pourquoi le programme n'y va pas quand je fais ibquery1.close dans la procedure pour fermer mon appli?

    J'ai essayé aussi avec afterclose et ca fait pareil .
    De toute les facons je vois pas bien pourquoi il faudrait que je referme la connexion étant donné que je le fait déja à la fin de ma procédure principale (cf mon code dans le prmier message).

    Vince

  6. #6
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Citation Envoyé par Malatar
    dans le oncloseQuery de ta form rajoute les fermeture des query/tables et connexions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Query.close;
    Tables.close;
    Connexion.Connected := False;
    T'as pas bien lu le post de malatar, c'est le OnCloseQuery de ta form mais pas de l'IBQuery.
    merci de te pencher sur mon problème
    Citation Envoyé par plante20100
    J'ai pas trouvé de onclosequery dans les evènement de mon IBquery mais il y a un before close.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.IBQuery1BeforeClose(DataSet: TDataSet); 
    begin 
    close; 
    IBDatabase1.connected:=false; 
    end;
    J'ai mis un point d'arret et le programme n'y passe jamais. Pourquoi le programme n'y va pas quand je fais ibquery1.close dans la procedure pour fermer mon appli?
    J'ai essayé aussi avec afterclose et ca fait pareil .
    De toute les facons je vois pas bien pourquoi il faudrait que je referme la connexion étant donné que je le fait déja à la fin de ma procédure principale (cf mon code dans le prmier message).
    ]
    D'auileur, dans ce code tu appelle close qui va fermer ta fiche (cad ton appli si c'est l'unique fiche)

    A+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut
    Mea culpa!!!! Désolé malatar je crois qu'en effet j'ai mal lu ton post. J'ai donc corrigé mon erreur et j'ai fait ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
    IBQuery1.close;
    IBQuery1.Transaction.Destroy;
    IBDatabase1.Connected := False;
    CanClose:=true;
    end;
    Mais j'ai toujours la meme erreur.
    Je me demandais si il n'y aurais pas par hasard une table qui se crée automatiquement avec le TIBQuery. Parce que moi je n'en utilise pas (j'ai pas d'info à recupérer, je modifie juste la structure de la BdD) et ca serait dans ce cas le seul composant que je ne cloture pas avant de fermer mon appli.

    Voila en tout cas merci pour vos réponses.

    vince

  8. #8
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Essaie avec ce 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
     
     
    procedure TForm1.Button1Click(Sender: TObject); 
    Var 
       IBQry : TIBQuery;
       IBDB : TIBDatabase;
       IBTrans  : TIBTransaction;    
    begin 
       Try
           Try
                IBQry := TIBQuery.Create(nil);
                IBDB  := TIBDatabase.Create(nil) ;
                IBTrans :=  TIBTransaction.Create(Nil)
                IBDb.DatabaseName:=databasetest; 
                IBDb.Params.Add('USER_NAME=SYSDBA'); 
                IBDb.Params.Add('PASSWORD='+Password); 
                IBDb.LoginPrompt:=false; 
                IBDb.DefaultTransaction := IBTrans;
                IBTrans.DefaultDatabase := IBDb;
                IBDb.Open;
                IBTrans.StartTransaction;
                IBQry.Database := IBDb;
                IbQry.Transaction := IBTrans;
                IbQry.SQL.text := 'ALTER TABLE P1XXXXX ADD DEMANDEUR2 varchar(30)  NOT NULL';
                IBQry.ExecSQL;
                IBTrans.Commit;
                IBDb.Close;
           except
                IBTrans.Rollback;  
                showmessage('marche pas'); 
           end 
       finally
          IBQry.Free;
          IBTrans.Free;
          IBDB.Free;    
       end;
    Met ce bout de code sur le OnCLick d'un bouton puis clic teste le.

    A+

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut
    It's work!!!!

    Super merci beaucoup ca marche nickel. Je comprend toujours pas pourquoi il y avait cette erreur, mais bon tant pis.

    Dans tout les cas je te remercie pour ton aide

    ++

    vince

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD16] Requete Interbase, Temps de réponse long.
    Par zozo66180 dans le forum WinDev
    Réponses: 13
    Dernier message: 13/09/2013, 16h17
  2. [Interbase] probleme de requete
    Par xclam dans le forum InterBase
    Réponses: 4
    Dernier message: 27/04/2007, 10h28
  3. [InterBase 6] Aide Requete SQL
    Par cyrilleT dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/06/2006, 10h45
  4. [Interbase] Creer un Alias Interbase par programme Delphi
    Par touhami dans le forum Bases de données
    Réponses: 1
    Dernier message: 25/01/2006, 09h19
  5. Avis sur trafic réseau lié à requetes Interbase
    Par lio33 dans le forum InterBase
    Réponses: 2
    Dernier message: 24/11/2005, 19h01

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