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 :

[SQLite/Zeos] Problème de remplissage d'une table [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut [SQLite/Zeos] Problème de remplissage d'une table
    Bonjour,

    J'ai un problème de remplissage d'une table (BD -Sqlite3) à partir des composants Zeos :
    l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dm_rap.ZT_Synth.FieldByName('Nb_Ind').AsString := Ed_Col2.Text ;
    ou toute autre instruction similaire provoque une erreur à l'exécution du code.
    ZT_Synth est un TZConnexion de Zeos situé dans un data module de nom Dm_rap.
    Le nom de la table est Synth et Nb_Ind et le nom de l'un des champs de cette table. Ed_Col2 est un TEdit placé sur la page de travail.
    La création et l'ajout d'enregistrements à la table fonctione parfaitement à la suite d'instructions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dm_Rap.ZC_synth.Connected := False ;
      Dm_Rap.ZC_synth.Database := DNombaseC ;
      Dm_Rap.ZC_synth.Connected:= True ;
    ......
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dm_rap.ZT_Synth.Close ;
         Dm_rap.ZT_Synth.Connection := Dm_rap.ZC_Synth ;
         Dm_rap.ZT_Synth.TableName := 'Synth' ;
         Dm_rap.ZT_Synth.Active := True  ;
         Dm_rap.ZT_Synth.append ;
         Dm_rap.ZT_Synth.FieldByName('Nb_Ind').AsString :=  Ed_col2.Text ;
         Dm_rap.ZT_Synth.Post ; //Sauvegarde des valeurs dans la table
         Dm_rap.ZT_Synth.Close ; // Fermeture de la table
    Ce que j'ai pu vérifier en rendant inactive (//) l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dm_rap.ZT_Synth.FieldByName('Nb_Ind').AsString :=  Ed_col2.Text ;
    et en utilisant SQliteAdmin pour vérifier l'éventuelle création des enregistrements.

    J'ai essayé d'utiliser L'instruction QuotedStr pour vérifier si cela corrigeait l'erreur, en vain.

    Merci pour vos éventuelles suggestions.
    Cordialement

    R.O.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    Salut,

    on croit rêver...
    Citation Envoyé par OR34a Voir le message
    l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dm_rap.ZT_Synth.FieldByName('Nb_Ind').AsString := Ed_Col2.Text ;
    ou toute autre instruction similaire provoque une erreur à l'exécution du code.
    ...
    J'ai essayé d'utiliser L'instruction QuotedStr pour vérifier si cela corrigeait l'erreur, en vain.
    Mais de quelle erreur parles-tu, bon sang de bois ?

    Ah ben vi, tu parles de l'erreur générée par on ne sait trop quoi puisqu'on n'a rien, aucune info sur cette fichue erreur !


    Et bon, une fois cette énigme résolue, je n'irai pas plus loin, ne connaisant rien aux B2D.

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Précisions apportées à mon message
    Citation Envoyé par Jipété Voir le message
    Salut,

    on croit rêver...


    Mais de quelle erreur parles-tu, bon sang de bois ?

    Ah ben vi, tu parles de l'erreur générée par on ne sait trop quoi puisqu'on n'a rien, aucune info sur cette fichue erreur !


    Et bon, une fois cette énigme résolue, je n'irai pas plus loin, ne connaisant rien aux B2D.
    Bonjour,
    Effectivement mon message manquait de clarté car j'ai voulu essayer de faire court. Je n'avais pas précisé l'erreur car j'avais encadré le code par une instruction Try Except End qui empêchait l'affichage de l'erreur.

    Le code complet de la boucle qui doit permettre de remplir la table est :
    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
       DNomBaseC := F_PromoA.Ed_NomComplet.Text ;    //Chemin complet et nom de la base à traiter
      Dm_Rap.ZC_synth.Connected := False ;
      Dm_Rap.ZC_synth.Database := DNombaseC ;
      Dm_Rap.ZC_synth.Connected:= True ;
     
      For lgn := 1 to NbSections+2 Do
       Begin
         Ed_Col1.Text := SynthPromo[1, lgn] ;
         Ed_Col2.Text := SynthPromo[2, lgn] ;
         Ed_Col3.Text := SynthPromo[3, lgn] ;
         Ed_Col4.Text := SynthPromo[4, lgn] ;
         Ed_Col5.Text := SynthPromo[5, lgn] ;
         Ed_Col6.Text := SynthPromo[6, lgn] ;
         Dm_rap.ZT_Synth.Close ;
         Dm_rap.ZT_Synth.Connection := Dm_rap.ZC_Synth ;
         Dm_rap.ZT_Synth.TableName := 'Synth' ;
         Dm_rap.ZT_Synth.Active := True  ;
         Dm_rap.ZT_Synth.append ;
      //   Dm_rap.ZT_Synth.FieldByName(QuotedStr('IdentSynth')).AsString :=  Ed_col1.Text ;
         Dm_rap.ZT_Synth.FieldByName('Nb_Ind').AsString := Ed_Col2.Text ;
      //   Dm_rap.ZT_Synth.FieldByName('Nb_IndPDV').AsString := Ed_col3.Text ;
      //   Dm_rap.ZT_Synth.FieldByName('Nb_IndDCD').AsString := Ed_Col4.Text ;
     //    Dm_rap.ZT_Synth.FieldByName('pc_IndPDV').AsString := Ed_Col5.Text;
      //   Dm_rap.ZT_Synth.FieldByName('pc_IndDCD').AsString := Ed_Col6.Text  ;
           Dm_rap.ZT_Synth.Post ; //Sauvegarde des valeurs dans la table
           Dm_rap.ZT_Synth.Close ; // Fermeture de la table
       end;
    .
    j'ai passé en instrucyion non exécutable tous les champs de la table sauf un pour tester le code.
    L'erreur déteté est : Le champ "'Nb_Ind"' n'est pas trouvé. Pourtant il existe bel et bien et comme je l'ai indiqué lors de la création de la discussion , si je le passe en non exécutable par // la table est créée (avec des enregistrements auxquels aucune valeur n'est, bien sur, affectée.

    Cordialement

    R.O.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    Hello,
    Houla tu m'as l'air d'être un apprenti sorcier concernant Zeos. Sans utiliser de requête SQL de type Insert Into ou Update, tu vas avoir du mal à remplir ta table. Regarde cette discussion qui date de 2015


    Ami calmant, J.P

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Suite - Tentative de renseigner une table depuis un STRingGRID
    Bonjour,
    Lors du dernier épisode de cette discussion je me suis fait “remonter les bretelles” par Jurassik Pork, certainement avec raison. Après avoir consulté les diverses discussions sur le sujet de l’ajout, modifications de données à une table à l’aide des composants Zeos ou non, j’ai essayé d’avancer .
    En fait, j’ai programmé un logiciel de gestion d’une base d’anciens élèves, (SQLITE3 et ZEOS W10, Lazarus 2.24) que j’essaye de rendre plus convivial
    La partie construction de la base, exploitation directe des données fonctionne bien (Zeos a été mis à contribution). Je souhaite en plus construire des rapports éditables au format PDF qui seraient mis à la disposition des personnes concernées et ce, sans passer par un serveur surtout pour des problèmes de confidentialité (et aussi parce que je connais rien dans la gestion de tels outils… et suis peut-être trop âgé pour cela).
    Bref, la première partie du rapport consiste en l’édition d’une fiche de synthèse par section recensant le nombre de personnes totales concernées, le nombre de personnes perdues de vue et celles décédées (nombre et proportion).
    Cette opération de synthèse faisant appel à la lecture des enregistrements de la table des élèves est programmée et fonctionne bien. Les résultats sont synthétisés dans un STRINGGRID. Le nombre de lignes du Stringgrid peut varier car la base peut être utilisée pour plusieurs promotions et c’est pour cela que je souhaite en récupérer le contenu dans une table qui sera ensuite affichée dans LazReport.
    La requête libellée pour le transfert vers la table Synth de la base me semble rédigée correctement. Elle fait appel aux variable libellées en utilisant des "QuotedSTR " et par exemple pour la première ligne du Stringrid elle donne le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RqtSQLSynth = 'Insert Into Synth (IdentSynth, Nb_Ind, Nb_IndPDV, Nb_IndDCD, pc_IndPDV, pc_IndDCD) Values (''BCxxx'', ''13'', ''2'', ''2'', ''15,4'', ''15,4'') '
    Synth est le nom de la table à renseigner la première parenthèse contient les noms de champs et la seconde les valeurs qui leurs sont affectées.
    le nom de la varaible requête esdt RqtSQLSynth.

    J'ai programmé les évènements nécessaires à la mise en oeuvre de cete requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     DM_Rap.ZC_Synth.Connected := False ;
      DM_Rap.ZC_Synth.Database  := DNomBaseC ;
      DM_Rap.ZC_Synth.Protocol:= 'SQLITE-3' ;
      DM_Rap.ZC_Synth.Connected := True ;
     // *******   Table Synth
      DM_Rap.ZT_Synth.Active := False ;
      DM_Rap.ZT_Synth.Connection := DM_Rap.ZC_Synth ;
      DM_Rap.ZT_Synth.TableName := 'Synth' ;
      DM_Rap.ZT_Synth.Active := True ;
      // ****** le composant de liaison - DataSource
      DM_Rap.DtS_Synth.Enabled := False ;
      DM_Rap.DtS_Synth.Dataset := DM_Rap.ZT_Synth ;
      DM_Rap.DtS_Synth.Enabled := True ;
    Ces composants ne provoquent aucune erreur lors de l'exécution du code (DM_RAP est le nom du DataModule qui héberge les composants Zeos ZC_Synth, ZT_Synth et ZQ_Synth ainsi que le Datasource DtS_Synth..

    Par contre le code suivant provoque une erreur logique SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For lgn1 := 1 to NbSections + 1 Do
        Begin
          DM_Rap.ZQ_Synth.Active:= False ;
          DM_Rap.ZQ_Synth.SQL.Clear ;
          DM_Rap.ZQ_Synth.SQL.Text:= RqtSQLSynth ;
          DM_Rap.ZQ_Synth.Connection := DM_Rap.ZC_Synth ;
          DM_Rap.ZQ_Synth.Active:= True ;
          DM_Rap.ZQ_Synth.execSQL ;
        end;
    Qu'y a-t'il d'incongru dans ce code et comment créer les enregistrements à la première utilisation et les Updater lors des utilisations Suivantes ?

    Merci pour vos réponses .

    R.O.

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 154
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 154
    Par défaut
    Yep !

    Same player shoots again, hein !
    Citation Envoyé par OR34a Voir le message
    Par contre le code suivant provoque une erreur logique SQL :
    Qu'est-ce que tu appelles une " erreur logique SQL " ?
    Et quelle est la ligne où ça se produit, dans ton bout de code ?



    Je n'ai pas eu le temps de réparer ma boule de cristal...

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

Discussions similaires

  1. Problème d'insertion dans une table, SQLite
    Par syrine Jerbi dans le forum Android
    Réponses: 1
    Dernier message: 18/02/2014, 11h36
  2. SQLite : Problème de sélection d'une table
    Par spamitovic dans le forum VB.NET
    Réponses: 8
    Dernier message: 10/05/2011, 18h34
  3. Réponses: 2
    Dernier message: 27/03/2008, 15h59
  4. Problème de suppression dans une table
    Par Splinter dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 10h55
  5. Problème de dépendances dans une table
    Par PrinceMaster77 dans le forum Outils
    Réponses: 1
    Dernier message: 22/11/2004, 12h39

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