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

Bases de données Delphi Discussion :

Message d'erreur sur base de données


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut Message d'erreur sur base de données
    Bonjour à tous,
    Me revoilà avec ma base de données Delphi/Access. L'un d'entre vous peut-il me dire pourquoi j'ai systématiquement le message bien connu "ADOQuery1: l'ensemble de données n'est pas en Insertion ou Édition" en lançant la procédure ci-dessous sauf si je met en commentaire le segment allant de "if Dm.ADOQuery1.Locate" à "'Contrée non confirmée';" ça commence à me...... mais sérieusement alors !

    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
    procedure TForm1.btnValiderClick(Sender: TObject);
    begin
    if lblTitre.caption='Ajouter un contact' then
       Dm.ADOQuery1.Insert
    else
    Dm.ADOQuery1.Edit;
    Dm.ADOQuery1.FieldByName('Numero').Value:=NumeroEdit.Text;
    Dm.ADOQuery1.FieldByName('Jour').Value:=DatePicker3.Date;
    Dm.ADOQuery1.fieldbyname('Debut').value:=DebutMaskEdit.text;
    Dm.ADOQuery1.fieldbyname('Fin').value:=FinMaskEdit.text;
    Dm.ADOQuery1.fieldbyname('Bande').value:=BandeEdit.text;
    Dm.ADOQuery1.FieldByName('Indicatif').Value:=IndicatifEdit.Text;
    Dm.ADOQuery1.fieldbyname('S_RST').Value:=SRSTEdit.Text;
    Dm.ADOQuery1.fieldbyname('M_RST').Value:=MRSTEdit.Text;
    Dm.ADOQuery1.fieldbyname('Mode').Value:=ModeComboBox.Text;
    Dm.ADOQuery1.fieldbyname('Observations').Value:=ObservationsEdit.Text;
    Dm.ADOQuery1.fieldbyname('S_QSL').Value:=SQSLEdit.Text;
    Dm.ADOQuery1.fieldbyname('M_QSL').Value:=MQSLEdit.Text;
     
    if Dm.ADOQuery1.Locate('Zone_CQ',DxccEdit.Text,[]) then
      Label29.Caption := 'Contrée confirmée'
      Else
      Label29.Caption := 'Contrée non confirmée';
     
    {if SQSLEdit.Text = 'X' then
      if Label29.Caption = 'Contrée non confirmée' then
      Dm.ADOQuery1.fieldbyname('Zone_CQ').Value:=DxccEdit.Text;}
     
    Dm.ADOQuery1.Post;
    Form1.NbContacts.Caption := Format('%d', [Dm.AdoQuery1.RecordCount]);
    btnAjouter.Visible := False;
    btnValider.Visible := False;
    With Dm.AdoQuery1 do
      begin
        SQL.Clear;
        SQL.Add('SELECT * FROM tblContacts');
        SQL.Add ('ORDER BY Numero ASC');
        Open;
        Dm.AdoQuery1.Last;
        NbContacts.Caption := Format('%d', [Dm.AdoQuery1.RecordCount]);
      end;
      With Dm.AdoQuery2 do
      begin
        SQL.Text := 'SELECT * FROM tblDxcc ORDER BY Numero ASC';
        Open;
        Dm.AdoQuery2.First;
      end;
      SV2.Close;
    end;
    Merci de m'aider. Amicalement.

  2. #2
    Rédacteur/Modérateur

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

    Parce que, lorsque vous faites le Locate, sur le même ensemble de données, l'état passe à dsBrowse et perd donc le mode édition.
    Vous feriez ceci (la partie en commentaire) dans l'évènement AfterPost il n'y aurait aucun souci
    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

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Oui, je me grattais le crâne à propos de AfterPost quand j'ai compris qu'il s'agit d'un évènement de la table. Je vais essayer. Je vous tiens au courant.
    Encore merci et bon week-end

  4. #4
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Je dirais même plus qu'il suffirait de monter la ligne DM.ADOQuery1.Post; au dessus du if concerné.

  5. #5
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Veni Vidi Vici ! Encore une fois vous avez fait mouche. Le message a disparu. Je mets en résolu.
    Grand merci. Bon week-end

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut Message d'erreur sur base de données
    Bonjour à tous,
    Décidément je n'ai pas de chance. J'ai bien placé le code ci-dessous dans l'évènement AfterPost de ADOQuery1 mais quelque soit le cas, j'ai toujours le message situé après le Else, que ce soit "Contrée non confirmée" ou "Contrée confirmée" si j'inverse les messages. Et ce quel que soit l'endroit où je place ce code. Par contre, dans une petite appli de test cette procédure fonctionne. Curieux pour moi, pas pour vous j'espère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TDm.ADOQuery1AfterPost(DataSet: TDataSet);
    begin
    if Dm.ADOQuery1.Locate('Zone_CQ',Form1.DxccEdit.Text,[]) then
      Form1.lblDxcc.Caption := 'Contrée confirmée'
      Else
      Form1.lblDxcc.Caption := 'Contrée non confirmée';
    end;
    Je fais donc encore appel à votre sagacité. Merci beaucoup à tous

    PS: Passez un bon WE, je peux largement attendre lundi !

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 302
    Points
    11 302
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Il ne trouve donc jamais de ligne du DataSet où Zone_CQ vaut Form1.DxccEdit.Text. Mais y en a-t-il bien une au moins ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Bonjour Tourlourou,
    Merci de vous intéresser à mon problème.
    Oui, je teste différentes occurrences dont je sais qu'elles existent bien dans le champ Zone_CQ mais j'ai toujours le message placé après le Else, quel qu'il soit, et donc forcément avec une occurrence qui n'existe pas.

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 302
    Points
    11 302
    Billets dans le blog
    6
    Par défaut
    Il pourrait être intéressant, si vous ne l'avez fait, de tester le RecordCount puis le Locate après une requête dont la clause WHERE contiendrait ' AND Zone_CQ = ' + QuotedString(Form1.DxccEdit.Text).
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Merci Tourlourou, j'ai appliqué la suggestion de votre dernier post et tous les essais fonctionnent dans leurs différentes hypothèses.
    Je rappelle que le code est placé dans l'évènement AfterPost de la table ADOQuery1.
    Comme j'aime bien apprendre, je brûle maintenant de savoir pourquoi ça fonctionne. Pouvez-vous me (nous) l'expliquer ?
    Merci pour vos lumières.
    Bonne fin de dimanche et peut-être à bientôt pour d'autres problèmes !!!!!

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 302
    Points
    11 302
    Billets dans le blog
    6
    Par défaut
    Je n'en ai aucune idée... Je pensais seulement vérifier que le test sur le Locate fonctionnait bien en fonction des données obtenues de la requête !
    Peut-être le QuotedString était-il nécessaire en cas de Locate sur un intitulé avec espaces ? La parole est aux spécialistes BDD !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  12. #12
    Rédacteur/Modérateur

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

    sans être un spécialiste d'Access (loin de là, d'ailleurs je déteste le coupe ADO Access), je vais tenter d'éclaircir le "mystère"
    La première chose qui me gêne c'est l'utilisation de form1 dans le datamodule, on ne mélange pas la partie métier (le datamodule) et la partie interface utilisateur. Il eut mieux fallu ajouter une sorte de fonction passant les paramètres nécessaires mais ce n'est pas le sujet.

    Seconde chose qui me gêne c'est cette colonne Zone_CQ d'où sort-elle ? Si je m'en tiens au code d'ajout/modification je ne vois pas cette colonne, donc il doit s'agir soit d'une zone dont la valeur est générée par Access, soit d'une colonne issue d'une jointure avec une autre table. Ne maitrisant pas Access je ne penche pas pour la première hypothèse reste donc la seconde.

    Partant de cette seconde hypothèse, l'utilisation du Locate me gêne premièrement car il n'est pas gravé sur marbre que vous restiez sur l'enregistrement en cours, ce que vous ne voyez pas car vous passez ensuite par une phase de close/open pour rafraichir l'ensemble de données affiché. Ensuite pourquoi interroger (locate) la requête ADOQuery1 alors que, toujours dans le seconde hypothèse, ce serait la table tblDxcc (?) qu'il faudrait balayer.

    En écrivant cela je me suis souvenu d'un autre de vos discussions où il était question de radio-amateur et de code donc ma question sur cette colonne Zone_CQ s'étoffe d'une autre possibilité : Zone_CQ de Adoquery1 ne serait pas par un malencontreux hasard une zone calculée ? Ce qui me permettrait de comprendre la partie code 33 à 40, le SQL de Adoquery1 et biens d'autres choses.

    Dans le cas d'une zone calculée, mon manque de connaissance ADO me fait également poser une question : existe t-il une instruction Adoquery1.RefreshRecord qui permettrait dans ce cas de forcer le "calcul" de Zone_CQ ?

    Une remarque, parlant du bloc de code 33-40 je ne vois nulle part de close, l'habitude me fait toujours en mettre un avant de changer de SQL, un simple close(ou active:=false)/open(ou active:=true) suivi de last . Quasi même remarque pour le bloc de code 42-47 ?
    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

  13. #13
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Bonjour à Tourlourou et SergioMaster,
    Oui vous vous souvenez bien de moi SergioMaster, je suis le radioamateur.
    Zone_CQ est un champ non calculé de la table tblContacts qui stocke les préfixes des stations déjà confirmées, alors que le même champ de la table tblDxcc stocke TOUS les préfixes attribués à chaque pays (contrées). Ensuite je détermine le nombre de contrées confirmées par une requête SELECT DISTINCT sur le champ Zone_CQ de tblContacts, requête qui fonctionne très bien.
    Voilà, pour le reste, je ne suis pas assez calé en BDD pour contester ce que vous dites, SergioMaster. Je relirai votre post pour bien m'en imprégner.
    Quant aux blocs 33-40 et 42-47 ils réinitialisent uniquement l'affichage des tables tblContacts et tblDxcc présentes dans l'interface par 2 DBGrid, bousculés lors des opérations précédentes. Il y a peut-être moyen de faire autrement.
    Le problème de ce week-end était de remplir le champ Zone_CQ si et seulement si 2 conditions sont remplies :
    1. Que la contrée n'existe pas déjà dans le champ ;
    2. Que la contrée soit confirmée par coche de la zone SQSL.Edit (SQSL veut dire que j'ai reçu Sa QSL).
    Peut-être n'est-ce pas d'une "élégance folle" mais ça fonctionne.
    Bien sûr, en tant que candide, je suis ouvert à toutes vos suggestions.
    Merci à tous les deux pour votre aide éclairée et au plaisir de vous lire à nouveau.

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Re, je ne comprends pas tout à propos de cette zone SQSL (edit ou checkbox ?) mais voici quelques idées à mettre juste après le post
    Citation Envoyé par f5jcg_Lulu Voir le message
    1. Que la contrée n'existe pas déjà dans le champ ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ADOQuery1.FieldByName('Zone_CQ').isNull then   
      lblDxcc.Caption := 'Contrée non confirmée'
      Else
      lblDxcc.Caption := 'Contrée confirmée';
    2. Que la contrée soit confirmée par coche de la zone SQSL.Edit (SQSL veut dire que j'ai reçu Sa QSL).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ADOQuery1.FieldByName('Zone_CQ').isNull OR not SQSL.Checked then   
      lblDxcc.Caption := 'Contrée non confirmée'
      Else
      lblDxcc.Caption := 'Contrée confirmée';
    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

  15. #15
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Merci SergioMaster, la 1ère proposition fonctionne très bien et évite le Locate qui me positionne sur le contact trouvé. Je n'ai pas encore testé la 2e proposition car je vais devoir modifier mon interface de saisie, c-à-d remplacer le SQSLEdit en SQSL à cocher, auquel d'ailleurs je n'avais jamais pensé et qui semble séduisant.
    Encore du boulot en perspective, voilà qui me plait.
    Merci encore. Je pense que vous rencontrerez encore mes posts.
    Longue vie au forum.

  16. #16
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut Problème de base de données
    Bonjour à tous,
    C'est de nouveau moi, le radioamateur, avec un dernier (?) problème que je soumets à votre sagacité.
    Comme vous savez déjà, dans ma base de données des contacts radio j'ai un champ Zone_CQ qui se remplit automatiquement avec le préfixe du pays "si et seulement si" je coche la case SQSLEdit à la confirmation d'un contact. Jusque là pas de problème.
    Seulement je voudrais qu'il n'existe "qu'une et une seule" occurrence de chaque pays dans le champ Zone_CQ, autrement dit que celui-ci ne se remplisse que si le pays dont j'ai eu confirmation est nouveau. J'ai bien bricolé 2 bouts de code mais qui ne font pas l'affaire.
    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
     
    procedure TDm.ADOQuery1AfterPost(DataSet: TDataSet);
    begin
      if ADOQuery1.FieldByName('Zone_CQ').isNull then
       if Form1.SQSLEdit.Text = '' then
      Form1.lblDxcc.Caption := 'Contrée non confirmée'
      Else
      Form1.lblDxcc.Caption := 'Contrée confirmée';
    end;
     
    procedure TDm.ADOQuery1BeforePost(DataSet: TDataSet);
    begin
    if Form1.SQSLEdit.Text = 'X' then
      if Form1.lblDxcc.Caption = 'Contrée non confirmée' then
      Dm.ADOQuery1.fieldbyname('Zone_CQ').Value:=Form1.DxccEdit.Text;
    end;
    où lblDxcc est une zone où apparaît le préfixe du pays. Avec ces codes j'ai toujours le préfixe dans Zone_CQ même si l’occurrence existe déjà.
    J'ai réussi à me sortir de la conversion d'une sélection de contacts en fichier au format ADIF, et ce n'était pas simple, mais là je cale.
    Merci de m'aider encore une fois. Restera le problème de l'impression, mais ça ce n'est pas important.
    A bientôt.

  17. #17
    Rédacteur/Modérateur

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

    ma première réaction a été OMG (Oh My God) utiliser form1.xxxx dans un datamodule ou, en terme "pro" un élément interface dans la couche métier, c'est plus que fortement déconseillé !
    Je n'y avais pas fait attention avant mais est-ce parce que je suis un peu plus pointilleux aujourd'hui ? Je suis

    deuxième réaction sur la phrase :
    Seulement je voudrais qu'il n'existe "qu'une et une seule" occurrence de chaque pays dans le champ Zone_CQ,
    Logiquement, c'est au niveau de la base de données que cela devrait se gérer (un index sur la colonne,unique et le tour est joué) et j'avoue ce n'est pas très clair

    Zone_CQ ce n'est pas "l'immatriculation" donc normalement unique du contact ? S'il s'agit seulement de la partie "pays" ou devrais-je plutôt dire région comment donc pourrait-elle être unique dans le fichier, j'imagine qu'il y a plusieurs radio-amateurs dans la même région et donc je ne vois pas comment un contrainte d'unicité pourrait s'appliquer

    Encore une fois c'est le modèle de la base de données qui me paraît étrange ! Je serais curieux d'avoir une copie de la structure, a mon avis il y a moyen de faire quelque chose de plus SOLIDe (entre SOLID l'acronyme et solide l'adjectif le pas était trop tentant )
    Note : comme le week-end prochain est prolongé, je suis prêt à faire une plongée dans la BDD pour proposer quelque chose, voire plusieurs alternatives (on peut se contacter par MP pour le transfert de la base)

    Plus ça va, plus je me re-penche sur votre code de début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dm.ADOQuery1.FieldByName('Numero').Value:=NumeroEdit.Text;
    Dm.ADOQuery1.FieldByName('Jour').Value:=DatePicker3.Date;
    Dm.ADOQuery1.fieldbyname('Debut').value:=DebutMaskEdit.text;
    Dm.ADOQuery1.fieldbyname('Fin').value:=FinMaskEdit.text;
    et me dit mais pourquoi ne sont-ce des composants TDBxxxxxx ou du moins des zones liées directement ?
    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

  18. #18
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Oui c'est truffé de bizarreries de débutant
    Form1 parce que je fais référence à un contrôle situé dans Unit1, et que quand je retire Form1, lblDxcc.Caption est souligné en rouge bien que Unit1 soit déclaré dans uses. Curieux.
    Pour le reste, je vais prendre le temps d'analyser votre réponse qui je l'avoue me donne le tournis tellement elle est foisonnante. Et notamment le passage sur les TDBxxx. Et oui, pourquoi pas ? Je vais essayé tout ça et d'autres choses encore.
    Quand à vous transmettre ma BDD, pas de problème, il n'y a aucun secret mais vous n'aurez qu'une version light mais représentative car elle est "grosse" (55Mo, il y a 3229 contacts). Donnez-moi vos instructions pour le MP. Je commence à croire que le choix ADO/Access n'était pas des plus judicieux, mais je suis prêt à tout reprendre. Ce serait marrant de repartir de zéro, non ? Mais j'y suis prêt.
    A vous lire.

  19. #19
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Re,
    Citation Envoyé par f5jcg_Lulu Voir le message
    Oui c'est truffé de bizarreries de débutant
    les bonnes pratiques ne s'apprennent pas en une journée, cela fait plus de 20 ans que j'utilise Delphi et commence à peine certaines choses

    Form1 parce que je fais référence à un contrôle situé dans Unit1, et que quand je retire Form1, lblDxcc.Caption est souligné en rouge bien que Unit1 soit déclaré dans uses. Curieux.
    non, c'est normal mais, en règle général, on utilisera plutôt un TDatasource sur Form1 (lié au dm.Adotable1) et du coup les composants comme TDBxxxx seront très facile à lier.

    Pour le reste, je vais prendre le temps d'analyser votre réponse qui je l'avoue me donne le tournis tellement elle est foisonnante.
    J'avoue je suis en pleine période de créativité : Nouveaux programmes pour l'entreprise => Utilisation de FMX (par choix) => recherches/curiosité personnelle => nouveaux tutoriels pour DVP, du coup je fais plus attention aux codes proposés.
    La réflexion sur le datamodule et l'interface utilisateur me vient plus du fait que, récemment, j'ai été dans l'obligation d'utiliser beaucoup de thread (processus s'exécutant en parallèle)
    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

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    à me confirmer mais je pense que c'est quelque chose comme les valeurs de INFO de cette image que vous voulez obtenir
    Nom : Capture.PNG
Affichages : 293
Taille : 63,2 Ko
    Pour info pas une seule ligne de code pour passer votre base Access vers un base SQLite juste un peu de design et l'utilisation de Firedac au lieu de ADO
    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.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/10/2012, 13h21
  2. Message d'erreur sur ma base de données
    Par Zizou7 dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/06/2010, 15h42
  3. Message flash variable sur base de donnée SQL
    Par Gwegz dans le forum Dynamique
    Réponses: 4
    Dernier message: 12/07/2007, 10h28
  4. Manipulation de XML sur base de données
    Par psyche dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 02/11/2004, 14h07
  5. Réponses: 2
    Dernier message: 19/06/2003, 21h58

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