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 :

Maitre/Détail avec MSQLite


Sujet :

Lazarus Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Maitre/Détail avec MSQLite
    Bonjour à tous,

    Je créé une application en utilisant des tables maitres-détail avec SQLite3. Pour dialoguer avec ces tables j'utilise le composant SqliteQuery livré d'origine dans Lazarus (V 2.0.12).
    Je tourne en rond depuis plusieurs semaines pour écrire dans la table détail.
    Pour gérer ma table détail, j'utilise 3 boutons : Ajouter, éditer et supprimer (je ne souhaite pas passer par un DBNavigator).
    La fonction supprimer fonctionne bien.
    La fonction ajouter est bancale en fonctionnement -> Une nouvelle fenêtre modale (Modal_newCity.png) s'ouvre avec le champ détail à ajouter. Lorsque je clique pour valider l'enregistrement une fenêtre d'erreur m'indique que le champ City_name n'est pas trouvé dans SQLquery1 or ce champ appartient à SLQuery2.
    Pourquoi ce champ est cherché dans la table master ?
    Je vous ai mis mon source avec lequel j'essaye de trouver la solution.
    François
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    tu peux essayer de fermer ton sqlquery avant de faire ton insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Main_Form.SQLQuery2.Close;
    Main_Form.SQLQuery2.SQL.Clear;
    AMi calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour jurassic pork,
    C'est plus facile pour moi en français par ici.
    Ce que j'ai fait. J'ai closé le Query1 en mettant en variable l'id_country juste avant de créer le SQL d'insertion.
    Mon message d'erreur n'apparait plus à cet endroit.
    Une fois le post et le commit réalisé, la données est bien dans la table.
    Ensuite je réouvre le Query1 pour réafficher les données en grille mais le même message d'erreur revient à ce moment.

    Je n'ai jamais utilisé le SQL et cela est nouveau pour moi, je tatillonne.
    Le source que je voulais proposer ne fonctionne toujours pas pour l'instant, même sans code propre.
    François

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    moi quand je mets un Main_Form.SQLQuery2.Close; au début de la procédure TNewCity_Form.BtnEnregistrerclick tout semble fonctionner :
    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
    Procedure TNewCity_Form.BtnEnregistrerclick (Sender : TObject);  Var
        S : String;
        L : Integer;
        SQLQuery1_country_id: Integer;
      begin
        Main_Form.SQLQuery2.Close;
        Main_Form.SQLQuery2.SQL.Clear;
        ShowMessage ('1');
        Main_Form.SQLQuery2.SQL.Text := 'insert into cities(city_name, country_id) values (:city_name, :country_id)';
        ShowMessage ('2');
        Main_Form.SQLQuery2.Prepare;
     
     
        S := City_Edit.Text;
        L := length(s);
        S := UpperCase(copy(s,1,1)) + LowerCase(Copy(s,2,L-1));
     
     
          Try
              ShowMessage ('3');
            Main_Form.SQLQuery2.Params.ParamByName('city_name').AsString := S;
              ShowMessage ('4');
            Main_Form.SQLQuery2.Params.ParamByName('country_id').AsInteger := Main_form.SQLQuery1.FieldByName('country_id').AsInteger;
              ShowMessage ('5');
            Main_Form.SQLQuery2.ExecSQL;
              ShowMessage ('6');
            Main_Form.SQLQuery2.SQLTransaction.Commit;
              ShowMessage ('7');
     
     
          except
            on e: Exception do
              begin
                e.Message  := e.Message + 'Insertion annulée.';
                Main_Form.SQLQuery2.SQLTRansaction.Rollback;
              raise e;
              end;
          end;
     
     
      //Refesh de la grille
      Main_Form.SQLQuery2.SQL.Clear;
      Main_Form.SQLQuery2.SQL.Text := 'select * from cities where cities.COUNTRY_ID = :COUNTRY_ID';
      Main_Form.SQLQuery2.Prepare;
      //Cellule_sqlQuery.Active := True;
      Main_Form.SQLQuery2.open;
      Main_Form.SQLQuery2.last;
      City_Edit.Text:= '';
      Close;
      end;
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. Maitre/Détail avec différents panels
    Par greenzephyr dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 11/09/2009, 10h48
  2. [2K8] rapport maitre-détail avec un seul dataset
    Par mooncoder dans le forum SSRS
    Réponses: 0
    Dernier message: 17/05/2009, 18h24
  3. Exemple d'application Relation Maitre-détail avec Dbexpress
    Par Peter K. dans le forum Bases de données
    Réponses: 0
    Dernier message: 13/11/2007, 11h33
  4. Probleme etat maitre détail avec TclientDataset
    Par sessime dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/12/2005, 09h19
  5. Quick report maitre détail avec TQuery
    Par shiners300 dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2005, 15h46

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