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

Lazarus Pascal Discussion :

Récupérer le dernier enregistrement [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Récupérer le dernier enregistrement
    Bonjour à tous, Je développe un projet perso de gestion d'un club sous Lazarus=1.0.6/FPC=2.6.0 environnement Linux Mint (nadia) 14 Edition Mate 64-bit. dans une Database Postgresql V9.1.2
    Voilà quelques jours où je me prends le chou pour faire avancer ce programme.
    J'ai plusieurs tables, dans une fenêtre de configuration je cherche à récupérer le numéro du dernier INSERT
    structure de ma base Banque
    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
     
    CREATE TABLE "TBanques"
    (
      "Banques_ID" serial NOT NULL,
      "Banques_Nom" character varying(24),
      "Banques_CdeBank" character varying(5),
      "Banques_CdeGuichet" character varying(5),
      "Banques_Adr1" character varying(60),
      "Banques_Adr2" character varying(60),
      "Banques_LieuDit" character varying(60),
      "Banques_CP_ID" integer NOT NULL,
      CONSTRAINT "pkBanques" PRIMARY KEY ("Banques_ID" ) )
     
    procedure  prepQryBank;
    var
      sCmdQryBank : string;
     
    begin
      {------------------[Table Banques]------------------}
      sCmdQryBank := '"TBanques"'+
        ' ("Banques_ID", "Banques_Nom", "Banques_CdeBank", "Banques_CdeGuichet",'+
        ' "Banques_Adr1", "Banques_Adr2", "Banques_CP_ID")'+
        ' VALUES (DEFAULT,:pBanques_Nom, :pBanques_CdeBank, :pBanques_CdeGuichet,'+
        '  :pBanques_LieuDit,'+
        ' :pBanques_Adr1, :pBanques_Adr2, :pBanques_CP_ID) RETURNING "Banques_ID"'+';';
     
        With dmDonneesApp.sqlqBanques do
        begin
          Close;
     
           sCommand := TransCmdeQry + StartCmdeQry + sCmdQryBank
     
          //sCommand := StartCmdeQry + sCmdQryBank;
          SQL.Text := sCommand;
        end; //With dmDonneesApp.sqlqBanques
    end;
     
    procedure ExecQryBank;
    begin
        With dmDonneesApp.sqlqBanques do
        begin
          ParamByName('pBanques_Nom').AsString       := leBanques_Nom.Text;
          ParamByName('pBanques_CdeBank').AsString   := leClub_Cdebank.Text;
          ParamByName('pBanques_CdeGuichet').AsString:= leClub_CdeGuichet.Text;
          ParamByName('pBanques_LieuDit').AsString   := leBanques_LieuDit.Text;
          ParamByName('pBanques_Adr1').AsString      := leBanques_Adr1.Text;
          ParamByName('pBanques_Adr2').AsString      := leBanques_Adr2.Text;
          ParamByName('pBanques_CP_ID').AsInteger    := ACPID_Bank;
          ExecSQL;
     
          //close;
          //SQL.Text := 'SELECT CURRVAL("Banques_ID") From "TBanques"';
          //ExecSQL;
     
          AADr_Bank_ID := FieldByName('Banques_ID').AsInteger;
        end; //With dmDonneesApp.sqlqBanques
    end;
    sur Click Bouton OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       prepQryBank; 
       ExecQryBank;
    J'ai d'abord essayé de récupérer l'offset par :
    • la clause RETURNING + ... AADr_Bank_ID := ...
      j'obtiens le message EDatabaseError sqlqBanques : Field not found : "Banques_ID"
    • la commande CURRVAL en enlevant la clause RETURNING puis en décommentant les 3 lignes et
      enfin en commentant AADr_Bank_ID :=...
      J'obtiens l'erreur suivant
      EDatabaseError pqConnectDB : Execution of query failed (PostgreSQL: ERREUR: could not open relation with OID 7


    j'ai parcouru plusieurs forums, ne parvenant à régler ce problème central je me tourne vers les spécialistes ou un user ayant eu ce cas de figure sur ce forum pour m'aider à m'en sortir.
    Ce sujet a été traité sur Developpez.net mais ne fonctionne pas pour moi. Comment contourner alors si possible.

    Merci d'avance à ceux qui se donneront la peine de me répondre.

    Daniel

  2. #2
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    Salut,

    tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "Banques_ID" from "TBanques" ORDER BY "Banques_ID" DESC LIMIT 1;
    Amicalement, nullosse

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Grand merci d'avoir répondu aussi vite surtout en cette période estivale
    le code de départ devient :

    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
     
    procedure ExecQryBank;
    begin
        With dmDonneesApp.sqlqBanques do
        begin
          ParamByName('pBanques_Nom').AsString       := leBanques_Nom.Text;
          ParamByName('pBanques_CdeBank').AsString   := leClub_Cdebank.Text;
          ParamByName('pBanques_CdeGuichet').AsString:= leClub_CdeGuichet.Text;
          ParamByName('pBanques_LieuDit').AsString   := leBanques_LieuDit.Text;
          ParamByName('pBanques_Adr1').AsString      := leBanques_Adr1.Text;
          ParamByName('pBanques_Adr2').AsString      := leBanques_Adr2.Text;
          ParamByName('pBanques_CP_ID').AsInteger    := ACPID_Bank;
          ExecSQL;
     
          close;
          SQL.Text :='SELECT "Banques_ID" from "TBanques" ORDER BY   "Banques_ID" DESC LIMIT 1;';
          OPen;
    //ExecSQL;
     
          AADr_Bank_ID := FieldByName('Banques_ID').AsInteger;
        end; //With dmDonneesApp.sqlqBanques
    end;
    En utilisant :
    • Open j'ai un erreur d'ouverture de la base que je m'explique pas;
    • Avec ExecSql le code SQL s'exécute mais sur l'instruction AADr_Bank_ID := ... j'obtiens EDatabaseError sqlqBanques : Field not found : "Banques_ID"


    Comment m'en sortir merci pour votre collaboration !

  4. #4
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    hello,
    si ton composant est un TSQLQuery :
    Active := True; => Open;
    Active:= False; => Close;

    Tu ne peux utiliser :

    - Open qu'avec des requetes de type Select
    - ExecSql qu'avec des requetes de type Insert,Delete ou Update

    j'ai créé une base postgresql 9.1 comme la tienne.

    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    var DernierNumero : integer;
    begin
     SQLQUERY1.SQL.Text :='SELECT "Banques_ID" from "TBanques" ORDER BY   "Banques_ID" DESC LIMIT 1;';
     SQLQUERY1.OPen;
     DernierNumero := SQLQUERY1.FieldByName('Banques_ID').AsInteger;
    end;
    je n'ai pas d'erreur sur le Open et le dernierNumero est bon;

    Amicalement, nullosse

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci Nullosse
    pour la réponse, qui m'a mise sur la piste, en fait j'essayais de lancer une autre requête dans la requête précédemment effectuée.
    En instanciant une variable de type TSQLQuery j'ai effectivement la réponse à ma question posée
    C'est quand même dommage que je n'ai pu mettre en œuvre l'option avec RETURNING

    encore pour ton aide

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

Discussions similaires

  1. [SQL2000] Récupérer le dernier enregistrement
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/11/2007, 15h24
  2. [MySQL] Récupérer le dernier enregistrement
    Par smarechal dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/04/2007, 21h04
  3. [MySQL] Récupérer le dernier enregistrement d'une table
    Par killuaster dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/03/2007, 12h55
  4. récupérer le dernier enregistrement d'une table
    Par kuhnden dans le forum Access
    Réponses: 4
    Dernier message: 21/02/2007, 22h47
  5. [MySQL] Récupérer le dernier enregistrement?
    Par tochbee dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 25/11/2005, 21h29

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