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 :

SQL - Rédaction des requêtes [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut SQL - Rédaction des requêtes
    Bonjour,

    Poursuivant ma découverte de Lazarus et après avoir configuré l'IDE ( accès aux bibiothèques, instalation de l'aide CHm etc..) j'ai voulu tester la réalisation d'une petite Base ( Firebird 2.5 - accès par Zeos - base au préalable créée par IB Expert libre-). La base est issue d'un exemple du livre Delphi4 de J.F. Sehan (chapitre 7 - requête SQL). Cela semble se passer correctement jusqu'à la rédaction de la séquence de sélection des enregistrements par appui sur un bouton. La séquence st la suivante :
    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
    begin
      ZQuery1.active := False ;
      Zquery1.SQL.Text:= 'Select * from StocksP';
      Zquery1.Open;
      choixbouton:=  strtoint(copy((sender as Tbutton).Name, 7,1)) ;
     case choixbouton of
        1: Zquery1.SQL.Text:= 'Select * from StocksP Where Categorie = "VF"';
        //except
         //   showmessage ( 'Vous avez un problème');
        2 : showmessage ('bouton' + intTostr(choixbouton) + ' OK');
        //  2: ZQuery1.Sql.Add('Where(Categorie Like "I_")') ;
        //  3: ZQuery1.Sql.Add('Where(Categorie Like "_V")') ;
        //  4: ZQuery1.Sql.Add('Where(Categorie Like "_S")') ;
    end ;
        ZQuery1.Active:= True ;
    end;
    lorsque j'appuie sur le srcond bouton j'ai bien l'affichage du'un message bouton 2 OK.
    lorsque j'appuie sur le bouton 1 j'ai un message d'erreur :
    Code erreur 206 - GBD unparserd remainder
    J'ai tenté diverses solutions mais rien n'y fait.
    les autres boutons sont mis en remarque pour isoler le problème. Les instructions en remarques étaient celles du Delphi 4.
    Quelqu'un aurait-il une solution à me proposer et, plus généralement, où trouver un "Comment faire" génral de l'emploi du SQL avec le couple Lazarus + bases Firebird ou SQlite permettant de :

    - Créer une base (table) vide - Fermer une base (table) - supprimer une base (table) - sélectionner des enregistrements etc..
    Il semble tout de même que cela soit un peu plus compliqué avec Lazarus qu'avec Access ou Delphi4 que j'ai pratiqués dans le temps.
    Je précise que mon ambition d'amateur est avant tout d'apprendre à gérer des applications monoposte.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonjour,

    En SQL une chaîne de caractères doit être encadrée par des simples cotes. En pascal, pour transmettre une simple cote dans une chaîne de caractères il faut la doubler ce qui est différent des double-cotes qui encadrent VF dans votre texte.

    André

  3. #3
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour

    Pour les quotes (pas les cotes), je trouve que ce qui suit est plus lisible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zquery1.SQL.Text:= 'Select * from StocksP Where Categorie = '+QuotedStr('VF');
    Pour créer ou supprimer une base ou une table avec Zeos, une solution simple est d'exécuter l'instruction SQL adhoc, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Zquery1.Sql.Text := 'CREATE DATABASE '+ QuotedStr(nom_la_base) ;
    ZQuery1.Execute ;
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Citation Envoyé par tintinux Voir le message
    Pour les quotes (pas les cotes)
    Pas si sûr. Je n'ai pas trouvé de "quote" dans mon Larousse (de 95 il est vrai) où "cote" a une définition "marque pour classer, repérer". En anglais "quote" est traduit par "citation" (raison du QUOTE=tintinux pour citer ton message), et "quote...unquote" par "ouvrez les guillemets...fermez les guillemets". Dans différents forums on trouve les 2 écritures. Quelle est l'officielle en français
    Ne devrait-on pas plutôt parler d'apostrophe?

    André

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut Requêtes et quotes (Cotes)
    Bonjour,

    Je remercie ceux qui ont bien voulu répondre à mes interrogations et crois avoir eu mon quota de réponses.... pour cette série d'interrogations au moins. J'ai testé l'utilisation de l'apostrophe doublée et, bien sur, cela fonctionne. L'étape suivante est de faire afficher sur un DBgrid les enregistrements sélectionnés par l'appui sur un bouton sélectionnant certains types d'enregistrements.
    Je suppose qu'il faut sélectionner le DBGrid et lui ordonner de n'afficher que les enregistrements sélectionnés de la table résultats de son interrogation par SQL. La question est : quelle est la succession des instructions qui peut faire cela ?
    De façon générale comment modifier le contenu d'un DBGRID par du code ?
    J'ai passé de longues heures à rechercher sur le forum ce genre d'informations sans vraiment avoir de succès. N'existe t-il pas une ou deux applications "exemples" qu'il serait possible d'étudier à loisir pour apprendre efficacement.
    Merci

    R.O.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je trouve qu'en prenant de bonnes habitudes , utilisation de requêtes paramétrées cela aurait été mieux , voici 'ma version' du bout de code de départ
    a noter , j'ai préféré utiliser la propriété tag des boutons, et une ZReadOnlyQuery 'SELECT from StocksP Where Categorie like :A'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.ButtonClick(Sender: TObject);
    begin
      ZReadOnlyQuery1.Active:=false;
      case (sender as Twincontrol).tag of
        0 : ZReadonlyQuery1.ParamByname('A').asstring:='%'; // tous
        1 : ZReadonlyQuery1.ParamByname('A').asstring:='I_';
        2 : ZReadonlyQuery1.ParamByname('A').asstring:='V_';
        3 : ZReadonlyQuery1.ParamByname('A').asstring:='_S';
      end;
      ZReadOnlyQuery1.active:=true;
    end;
    j'avais aussi remarqué dans le bout de code que la query n'était pas fermée avant modification du SQL , je pense que c'est un oubli ?

    pour le reste
    Quelqu'un aurait-il une solution à me proposer et, plus généralement, où trouver un "Comment faire" génral de l'emploi du SQL avec le couple Lazarus + bases Firebird ou SQlite permettant de
    avec les ZEOSDBO
    - Créer une table vide [/QUOTE]
    un TZSQLProcessor peut faire l'affaire

    - créer une Base vide
    outre le TZSQLProcessor , le TZconnection permet de le faire (je ne me rappelle plus de la syntaxe exact de mémoire , c'est pas une opération courante)

    Fermer une Base
    TZConnection : Disconnect

    Fermer une Table
    TZtable active:=true ou Open

    supprimer une table
    Avec une Query 'DROP TABLE' ou la TZConnection .Executedirect('DROP TABLE')

    Supprimer une Base (ça j'ai jamais fait) mais bon ce n'est que supprimer un fichier s'il s'agit d'une base Firebird

    sélectionner des enregistrements
    ma première réponse évidente serait de dire "utiliser une Query ou ReadOnlyQuery " mais je pense que la question posée ne se limitait pas à ça , il y aura également le filtre de la ZTable

    je suggère de lire tout ce qui se rapporte au gestions des tables via BDE sur le forum delphi , ZeosDBO étant un BDELike la plupart des réponses s'y trouvent
    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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/03/2008, 20h09
  2. [SQL] Affichage des requêtes
    Par marquito dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 28/08/2007, 22h42
  3. [SQL] Concaténer des requêtes SQL en PHP
    Par brotelle dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 18/04/2006, 19h53
  4. [VB.NET] [SQL] Pb requête sql, récupérer des params. ?
    Par Pleymo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/02/2005, 20h15
  5. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

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