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

SQL Firebird Discussion :

C++Builder6/Firebird sql error=-303 [Débutant(e)]


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut C++Builder6/Firebird sql error=-303
    Bonjour,
    j'essaie d'executer un procedure stockée avec c++builder

    voici le code pour lancer cette procedure :


    Code c++ : 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
    bool __fastcall TDataModule1::_UPDATE_PERSONNE(TClientDataSet * pCds)
    {
            //TODO: mise a jour d'un enreg table personne
     
      TParams *Param=new TParams();
      bool succes=false;
     
      try{
          try{
     
              IBStoredProc1->StoredProcName="UPDATE_PERSONNE";
     
              // creation de parametres
              Param->CreateParam(ftInteger,"ID_PERS",ptInput);
              Param->CreateParam(ftString,"NOM",ptInput);
              Param->CreateParam(ftString,"PRENOM",ptInput);
              Param->CreateParam(ftString,"ADRESSE",ptInput);
              Param->CreateParam(ftString,"VILLE",ptInput);
              Param->CreateParam(ftInteger,"CODE_POSTAL",ptInput);
              Param->CreateParam(ftString,"ENTREPRISE",ptInput);
     
              // regardez si on lit
              //ShowMessage(pCdsDelta->FieldB&yName("NOM")->AsString);
     
     
              Param->ParamByName("ID_PERS")->AsInteger=pCds->FieldByName("ID_PERS")->AsInteger;
              Param->ParamByName("NOM")->AsString=pCds->FieldByName("NOM")->AsString;
              Param->ParamByName("PRENOM")->AsString=pCds->FieldByName("PRENOM")->AsString;
              Param->ParamByName("ADRESSE")->AsString=pCds->FieldByName("ADRESSE")->AsString;
              Param->ParamByName("VILLE")->AsString=pCds->FieldByName("VILLE")->AsString;
              //ShowMessage( pCds->FieldByName("CODE_POSTAL")->AsString.Length());
     
              Param->ParamByName("CODE_POSTAL")->AsInteger=pCds->FieldByName("CODE_POSTAL")->AsInteger;
              Param->ParamByName("ENTREPRISE")->AsString=pCds->FieldByName("ENTREPRISE")->AsString;
     
              DataModule1->IBStoredProc1->Params=Param;
              DataModule1->IBStoredProc1->Prepare();
              DataModule1->IBStoredProc1->ExecProc();
     
     
              delete Param;
              succes=true;
     
          }
     
          catch(...)
          {
          succes= false; // en cas d'erreur
          }
        }
     
      __finally{ // en cas de succès ou non
     
           DataModule1->IBStoredProc1->UnPrepare();
           delete Param;
           return succes;
      }
     
    }

    Voici la procedure stockée:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    BEGIN
      /* MISE A JOUR D'UNE PERSONNE */
     
        UPDATE PERSONNE
     
        SET  PERSONNE.NOM=:NOM,
             PERSONNE.PRENOM=:PRENOM,
             PERSONNE.ADRESSE=:ADRESSE,
             PERSONNE.CODE_POSTAL=:CODE_POSTAL ,
             PERSONNE.VILLE=:VILLE, /* MODIF */
             PERSONNE.ENTREPRISE=:ENTREPRISE
     
        WHERE PERSONNE.ID_PERS=:ID_PERS  ;
     
    END

    le type des paramètres :
    Code firebird : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ID_PERS :INTEGER
    NOM :VARCHAR(20)
    PRENOM :VARCHAR(20)
    ADRESSE :VARCHAR(50)
    CODE_POSTAL :INTEGER
    VILLE :VARCHAR(20)
    ENTREPRISE :VARCHAR(20)

    quant j'essaie d'executer ceci avec C++builder 6 j'ai ce message

    ---------------------------
    Notification d'une exception du débogueur
    ---------------------------
    Le projet AnnuaireOfficiel.exe a provoqué une classe d'exception EIBInterBaseError avec le message 'Dynamic SQL Error
    SQL error code = -303
    conversion error from string "Belcaire"'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
    ---------------------------
    OK Aide
    ---------------------------

    Cette procédure s’exécute bien avec IbExpert mais avec BCB ?
    d’où cela vient je vois pas....qui peut m'expliquer et que faire?

    Je tourne en rond

    merci de vos réponses et bonnes fêtes
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Bonsoir,

    J'ai enlver remis des paramètre afin de savoir,je confirme c'est le champ et paramètre "ville" qui me pose problème
    mais je ne vois pas comment y remédier.....


    j'ai regardé la taille des champs sous BCB et firebird taille 20
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FIrebird (table PERSONNE) champ VILLE VARCHAR (20)
    FIreBird(Paramètre entré) VILLE VARCHAR (20)
    C++BUILDER6=>Composant IBQUERY=>IBQPERSVille TSTRINGField Size(20)
    Si vous pouvez m'aider

    merci
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par o_live Voir le message
    Cette procédure s’exécute bien avec IbExpert mais avec BCB ?
    d’où cela vient je vois pas....qui peut m'expliquer et que faire?
    Déjà, IbExpert (développé avec Lazarus à ce que je sache) n'utilise pas le composant TIBStoredProc qui est un composant dédié à Interbase (6), et dont la compatibilité avec les nouvelles versions de Firebird devient de plus en plus aléatoire...
    Comparer leur fonctionnement n'est pas pertinent.

    Cela étant, Quel est la version de Firebird ? 2.1 (d'après la signature) ?
    La bibliothèque client utilisée (fbclient.dll ou son renommage en gds32.dll) est elle la bonne ?
    Quel est le charset de la base ? du composant de connexion TIBDatabase ?
    Philippe.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Bonjour,
    la version de Fb est exactement 2.1.2.18118 soit la 2.1.2

    les composant utilisés:
    IBDatabase, IbTransition,TIBQuery,TIBStoredProcedure,TDatasetProvider, TClientDataSet,DataSource le tout dans un module

    Je ne comprend pas sur la même table lorsque je fais un insert cela fonctionne très bien , et de plus je lis bien mes enregistrements
    même en mode conception

    Sur l'update (le code est visible ici) il suffit que j'ajoute la param ville pour que cela plante
    alors que sur l'insert cela fonctionne très bien

    est ce que il y a pas autre chose? composant? erreur de lecture disque ? charset ?

    Code c++ : 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
    bool __fastcall TDataModule1::_INSERT_PERSONNE(TClientDataSet *pCdsDelta)
    {
            /*TODO 3 -o_live: insertion de personne
            le commit() ou rollback() sont fait dans le methode
             TDataModule1::ApplyUpdatePers()     */
     
    TParams *Param=new TParams();
    bool succes=false;
     
      try{
     
        try
        {
            IBStoredProc1->StoredProcName="INSERT_PERSONNE ";
     
            Param->CreateParam(ftString,"NOM",ptInput);
            Param->CreateParam(ftString,"PRENOM",ptInput);
            Param->CreateParam(ftString,"ADRESSE",ptInput);
            Param->CreateParam(ftString,"VILLE",ptInput);
            Param->CreateParam(ftInteger,"CODE_POSTAL",ptInput);
            Param->CreateParam(ftString,"ENTREPRISE",ptInput);
     
            //// regardez si on lit
    //        ShowMessage("nom="+pCdsDelta->FieldByName("NOM")->AsString
    //        );
     
            Param->ParamByName("NOM")->AsString=pCdsDelta->FieldByName("NOM")->AsString;
            Param->ParamByName("PRENOM")->AsString=pCdsDelta->FieldByName("PRENOM")->AsString;
            Param->ParamByName("ADRESSE")->AsString=pCdsDelta->FieldByName("ADRESSE")->AsString;
            Param->ParamByName("VILLE")->AsString=pCdsDelta->FieldByName("VILLE")->AsString;
            Param->ParamByName("CODE_POSTAL")->AsInteger=pCdsDelta->FieldByName("CODE_POSTAL")->AsInteger;
            Param->ParamByName("ENTREPRISE")->AsString=pCdsDelta->FieldByName("ENTREPRISE")->AsString;
     
            DataModule1->IBStoredProc1->Params=Param;
            DataModule1->IBStoredProc1->Prepare();
            DataModule1->IBStoredProc1->ExecProc();
     
     
            succes=true;
     
        }
        catch(...)
        {
     
        succes= false; // en cas d'erreur
        }
     
      }
      __finally{
     
      DataModule1->IBStoredProc1->UnPrepare();
      delete Param;
      return succes;
     
      }
    }

    La procedure stockéé
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    begin
      /* Ajout de personne */
      INSERT INTO PERSONNE (NOM,PRENOM,ADRESSE,
                            VILLE,CODE_POSTAL,
                            ENTREPRISE)
     
      values (:NOM ,:PRENOM,:ADRESSE,
              :VILLE,:CODE_POSTAL,
              :ENTREPRISE) ;
      suspend;
    end

    La bibliothèque client utilisée (fbclient.dll ou son renommage en gds32.dll) est elle la bonne ?
    Ou voir ceci ?
    j'ai les deux Dll sur le pc

    Quant au charset , je laisse firebird le choisir par défaut jeu de caractère aucun

    sur le composant IBDatabase SQLDIalect=3 jeu de caractère aucun

    Que prendre ?

    Encore merci de m'aider et bonnes fêtes a vous !
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par o_live Voir le message
    IBDatabase, IbTransition,TIBQuery,TIBStoredProcedure,TDatasetProvider, TClientDataSet,DataSource le tout dans un module
    Personnellement, je n'utiliserais pas les TIB* pour interagir avec Firebird.
    Même si cela peut fonctionner dans la plupart des cas, on peut très bien tomber sur un cas difficile à résoudre...
    Citation Envoyé par o_live Voir le message
    Le lien n'est plus valide...
    Citation Envoyé par o_live Voir le message
    La procedure stockéé
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    begin
      /* Ajout de personne */
      INSERT INTO PERSONNE (NOM,PRENOM,ADRESSE,
                            VILLE,CODE_POSTAL,
                            ENTREPRISE)
    
      values (:NOM ,:PRENOM,:ADRESSE,
              :VILLE,:CODE_POSTAL,
              :ENTREPRISE) ;
      suspend;
    end
    Pourquoi mettre un suspend sur une procédure non sélectionnable ?

    Citation Envoyé par o_live Voir le message
    Ou voir ceci ?
    j'ai les deux Dll sur le pc
    A votre place, je regarderais ce point en premier et m'assurerais que c'est bien la dll client de Firebird qui est appelée et pas celle d'Interbase...
    Les composants TIB* appellent par défaut la dll gds32.dll. Substituez la dll client fbclient.dll à l'actuelle gds32.dll et refaites le test. Assurez vous aussi qu'il n'y ait pas une autre gds32.dll dans le path windows.

    Citation Envoyé par o_live Voir le message
    Quant au charset , je laisse firebird le choisir par défaut jeu de caractère aucun

    sur le composant IBDatabase SQLDIalect=3 jeu de caractère aucun

    Que prendre ?
    Tout étant à none, aucune conversion n'est faite sur ce que le client envoie. donc à priori, pas de souci de ce côté la.
    Bien que personnellement, j'utiliserais UTF8 pour la base et ANSI pour BCB6.
    Philippe.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Envoyé par o_live Voir le message
    IBDatabase, IbTransition,TIBQuery,TIBStoredProcedure,TDatasetProvider, TClientDataSet,DataSource le tout dans un module
    Personnellement, je n'utiliserais pas les TIB* pour interagir avec Firebird.
    Même si cela peut fonctionner dans la plupart des cas, on peut très bien tomber sur un cas difficile à résoudre..
    Bonsoir,
    quel composant utiliseriez vous?

    voici le code C++buider

    Code c++ : 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
    bool __fastcall TDataModule1::_UPDATE_PERSONNE(TClientDataSet * pCds)
    {
            /*TODO: mise a jour d'un enreg table personne
            le commit() ou rollback() sont fait dans le methode
             TDataModule1::ApplyUpdatePers() */
     
      TParams *Param=new TParams();
      bool succes=false;
     
      try{
          try{
     
              IBStoredProc1->StoredProcName="UPDATE_PERSONNE";
     
              // creation de parametres
              Param->CreateParam(ftInteger,"ID_PERS",ptInput);
              Param->CreateParam(ftString,"NOM",ptInput);
              Param->CreateParam(ftString,"PRENOM",ptInput);
              Param->CreateParam(ftString,"ADRESSE",ptInput);
              Param->CreateParam(ftString,"VILLE",ptInput);
              Param->CreateParam(ftInteger,"CP",ptInput);
              Param->CreateParam(ftString,"ENTREPRISE",ptInput);
     
              // regardez si on lit
              //ShowMessage(pCdsDelta->FieldB&yName("NOM")->AsString);
     
     
              Param->ParamByName("ID_PERS")->AsInteger=pCds->FieldByName("ID_PERS")->AsInteger;
              Param->ParamByName("NOM")->AsString=pCds->FieldByName("NOM")->AsString;
              Param->ParamByName("PRENOM")->AsString=pCds->FieldByName("PRENOM")->AsString;
              Param->ParamByName("ADRESSE")->AsString=pCds->FieldByName("ADRESSE")->AsString;
              Param->ParamByName("VILLE")->AsString=pCds->FieldByName("VILLE")->AsString;
              //ShowMessage( pCds->FieldByName("CODE_POSTAL")->AsString.Length());
     
              Param->ParamByName("CP")->AsInteger=pCds->FieldByName("CODE_POSTAL")->AsInteger;
              Param->ParamByName("ENTREPRISE")->AsString=pCds->FieldByName("ENTREPRISE")->AsString;
     
              DataModule1->IBStoredProc1->Params=Param;
              DataModule1->IBStoredProc1->Prepare();
              DataModule1->IBStoredProc1->ExecProc();
     
     
              succes=true;
     
          }
     
          catch(...)
          {
     
          succes= false; // en cas d'erreur
          }
        }
     
      __finally{ // en cas de succes ou non
     
           DataModule1->IBStoredProc1->UnPrepare();
           delete Param;
           return succes;
      }
     
    }

    l'ordre des parametre a t il une importance sous l’outil IBExpertFree?
    Code SQL : 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
    SET TERM ^ ;
     
    CREATE OR ALTER PROCEDURE UPDATE_PERSONNE (
        id_pers integer,
        nom varchar(20),
        prenom varchar(20),
        adresse varchar(50),
        cp integer,
        ville varchar(20),
        entreprise varchar(20))
    as
    BEGIN
      /* MISE A JOUR D'UNE PERSONNE */
     
     /*
        ID_PERS
    NOM
    PRENOM
    ADRESSE
    CODE_POSTAL
    VILLE
    ENTREPRISE   */
     
     
     
        UPDATE PERSONNE
     
     
     
        SET  PERSONNE.NOM=:NOM,
             PERSONNE.PRENOM=:PRENOM,
             PERSONNE.ADRESSE=:ADRESSE,
             PERSONNE.CODE_POSTAL=:CP ,
             PERSONNE.VILLE=:VILLE, /* plante ici */
             PERSONNE.ENTREPRISE=:ENTREPRISE
     
        WHERE PERSONNE.ID_PERS=:ID_PERS  ;
     
     
     
    END
    ^
     
    SET TERM ; ^
     
    COMMENT ON PARAMETER UPDATE_PERSONNE.CP IS
    'code postal';

    Je vais regarder les histoire de dll et voir
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Points : 91
    Points
    91
    Par défaut A n'y rien comprendre...
    Bonsoir cela fonctionne ouf !

    Voila la manip faite :

    1)sous Ibexpert Free j'ai viré tous les paramètres d'entrées( il y en avait 7) sauf cela l'ID_PERS et la VILLE(celui qui posait problème)

    J'ai recomplilé le tout et a lancé un requête SQL "manuelle depuis" IbexpertFree,elle est passée

    2)J'ai modifié mon code BCB6 pour avoir aussi l'ID_PERS et VILLE
    j'ai compilé, lancé et bizarrement c'est passé

    3) j'ai tout modifié cote serveur et code BCB6 pour avoir les sept paramètres
    j'ai compilé, lancé et bizarrement c'est passé

    bref les mystères de l'informatique, en tout cas j'aimerais bien savoir ce qui s'est passé , si quelqu'un peut m'expliquer ????

    Pouvait vous répondre aux questions du post précédent ?
    merci

    merci a vous et BONNE ANNÉE 2013
    Outils utilisés : FireBird 2.1 - IbExert Free - C++ Builder 6 Pro Update 4- Windows Xp pro Sp3

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

Discussions similaires

  1. [FB 2.1] Firebird 2.1 : Invalid token Dynamic SQL Error
    Par fred7889 dans le forum Installation
    Réponses: 1
    Dernier message: 20/02/2009, 18h35
  2. [Firebird 1.5] Dynamic SQL error (-303)
    Par crade dans le forum SQL
    Réponses: 1
    Dernier message: 15/06/2007, 22h32
  3. [FireBird] Dynamic SQL Error
    Par aityahia dans le forum SQL
    Réponses: 1
    Dernier message: 28/05/2007, 11h12
  4. Réponses: 1
    Dernier message: 16/05/2007, 16h54
  5. [IBConsole]SQL Error
    Par Seb7 dans le forum SQL
    Réponses: 4
    Dernier message: 10/07/2003, 12h38

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