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

Delphi Discussion :

message erreur dbgrid


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2021
    Messages : 10
    Par défaut message erreur dbgrid
    Bonjour à tous
    Je débute dans Delphi et je rencontre des difficultés
    J'ai des valeurs dans un dbGrid
    Je souhaite pouvoir sélectionner une ligne de ce DBGrig pour entrer les valeurs dans une autre fenêtre de mon application
    J ai un message d'erreur "Impossible de convertir le variant de type (String) en type (Double)
    J'ai cherché sans succès dans l'aide :-(

    Voici mon code :
    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 TFrmTableauIncident.DBGrid1CellClick(Column: TColumn);
    Begin
      if DBGrid1.SelectedRows.Count > 0 then
      begin
        FrmIncident.DateTimePicker1.date:= DBGrid1.Fields[0].Value;
        FrmIncident.DateTimePicker3.Time:= DBGrid1.Fields[1].Value;
        FrmIncident.CheckBoxEleve.checked := DBGrid1.Fields[3].Value;
        FrmIncident.CheckBoxMajeur.checked := DBGrid1.Fields[4].Value;
        FrmIncident.ComBoBoxSite.Text := DBGrid1.Fields[5].value;
        FrmIncident.ComBoBoxSite.Text := DBGrid1.Fields[6].value;
        FrmIncident.CheckBoxTousSites.checked := DBGrid1.Fields[6].Value;
        FrmIncident.ComboBoxService.text := DBGrid1.Fields[7].Value;
        FrmIncident.CheckBoxTousServices.checked := DBGrid1.Fields[8].Value;
        FrmIncident.showmodal;
    end;
    end;
    Quelqu'un peut-il m'aider ? Un très grand merci par avance

    Nom : 1.PNG
Affichages : 312
Taille : 22,4 KoNom : 2.PNG
Affichages : 329
Taille : 63,5 KoNom : 3.PNG
Affichages : 301
Taille : 53,1 Ko

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Vous n'avez pas un décalage des numéros ? il n'y a pas de [2] ?
    Utilisez FieldByName et plutôt AsString, AsDateTime au lieu des variants.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2021
    Messages : 10
    Par défaut
    Merci pour votre retour
    Je teste demain et je reviens vers vous
    Bonne soiree

  4. #4
    Membre habitué
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2021
    Messages : 10
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Vous n'avez pas un décalage des numéros ? il n'y a pas de [2] ?
    Utilisez FieldByName et plutôt AsString, AsDateTime au lieu des variants.
    Merci !

    En effet, j avais un décalage de numéro J ai corrigé

    J ai tenté de modifier mon cade mais sans succès J'ai des erreur "Identificateur non déclaré FieldByName ..."

    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
    procedure TFrmTableauIncident.BtnCloturerIncidentClick(Sender: TObject);
    Begin
    if DBGrid1.SelectedRows.Count > 0 then
      begin
     
        FrmIncident.DateTimePicker3.Time:= DBGrid1.FieldByName[1].AsDateTime;
        FrmIncident.CheckBoxEleve.checked := DBGrid1.FieldByName[2].AsDateTime;
        FrmIncident.CheckBoxMajeur.checked := DBGrid1.FieldByName[3].AsString;
        FrmIncident.ComBoBoxSite.Text := DBGrid1.FieldByName[4].AsString;
        FrmIncident.CheckBoxTousSites.checked := DBGrid1.FieldByName[5].AsString;
        FrmIncident.ComboBoxService.text := DBGrid1.FieldByName[6].AsString;
        FrmIncident.CheckBoxTousServices.checked := DBGrid1.FieldByName[7].AsString;
        FrmIncident.ShowModal;
      end;
    end;

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Qu'il y ait des erreurs c'est logique un DBGrid n'a pas de FieldByName c'est son datasource associé qui en a.

    Je suis assez rouillé avec VCL. mais je releve d'abord une chose qui me parait incorrecte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if DBGrid1.SelectedRows.Count > 0 then
      begin
       ....
      end;
    Tester sur SelectedRows.Count implique généralement que une ou plusieurs ligne de la grille sont sélectionnées et donc on debrait avoir à l'intérieur un traitement de chaque ligne de la sélection du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i:=0 to DBGrid1.SelectedRows.Count-1 do 
     begin // traitement 
    end;
    Si je comprend bien l'image numero 1 c'est plutôt l'enregistrement en cours qui est à cloturé (mettre les options de grille dgRawSelected et dgAlwaysShowSelection serait un plus permettant de bien montrer la ligne)
    Dans ce cas il est plus simple d'utiliser directement les champs du dataset que de faire une assignation possible mais alambiquée

    Attention ce qui suivra n'est pas forcément juste ne connaissant pas la structure de ClientDataset1, de plus je ne me souviens jamais si Fields commence à 0 ou 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FrmIncident.DateTimePicker3.Time:=ClientDataset1.Fields[1].AsDateTime;
    FrmIncident.CheckBoxEleve.checked := ClientDataset1.Fields[2].AsBoolean;
    FrmIncident.CheckBoxMajeur.checked := ClientDataset1.Fields[3].AsBoolean;
    FrmIncident.ComBoBoxSite.Text := ClientDataset1.Fields[4].AsString;
    FrmIncident.CheckBoxTousSites.checked := ClientDataset1.Fields[5].AsBoolean;
    FrmIncident.ComboBoxService.text := ClientDataset1.Fields[6].AsString;
    FrmIncident.CheckBoxTousServices.checked := ClientDataset1.Fields[7].AsBoolean;
    De plus je suis plus partisan, pour des questions de maintenance logicielle, d'utiliser FieldByName car l'ordre des champs (trop ?) est facilement modifiable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FrmIncident.DateTimePicker3.Time:=ClientDataset1.FieldByName('nomdelacolonne').AsDateTime;
    enfin les champs sont-ils des booleens ? pas sûr je lis true/false dans la grille (tiens, Carquefou, j'en suis pas loin)
    donc pour les checkbox*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FrmIncident.CheckBoxEleve.checked := ClientDataset1.FieldbyName('nomcolonnesbool').AsString='true';
    * les versions récentes permettent de transformer 'true'/'false' en boolean mais sans votre version j'écris un "traitement" sûr

  6. #6
    Membre habitué
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2021
    Messages : 10
    Par défaut
    Merci infiniment ! : ca fonctionne :-)

    Je sélectionne une ligne dans mon "dbgrid" et toutes les valeurs se mettent dans mon "frmincident"

    Par contre, les champs date et l heure ne prennent pas les valeurs du DBGrid
    Pas de message mais rien ne se passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FrmIncident.DateTimePicker1.Time:=ClientDataset1.Fields[0].AsDateTime;
    FrmIncident.DateTimePicker3.Time:=ClientDataset1.Fields[1].AsDateTime;
    Version Delphi 10.4

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    En rouge, je vous mets sur la piste
    Citation Envoyé par Comete2006 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FrmIncident.DateTimePicker1.Time:=ClientDataset1.Fields[0].AsDateTime;
    NB. je ne suis toujours pas très Fields[n]

    comme a priori, toujours selon votre image le datetimepicker1 est pour la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FrmIncident.DateTimePicker1.DateTime:=ClientDataset1.Fields[0].AsDateTime;

    comme il semblerait que vos colonnes soit des strings ceci serait plus sûr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FrmIncident.DateTimePicker1.Date:=StrToDate(ClientDataset1.Fields[0].AsString);
    FrmIncident.DateTimePicker3.Time:=StrToTime(ClientDataset1.Fields[1].AsString);

Discussions similaires

  1. message erreur dans dbgrid
    Par khier dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/09/2008, 18h02
  2. Message erreur InterBase
    Par tchaman dans le forum InterBase
    Réponses: 9
    Dernier message: 01/04/2005, 15h50
  3. [g++] message erreur etrange
    Par infotron dans le forum Autres éditeurs
    Réponses: 15
    Dernier message: 19/09/2004, 23h14
  4. [FLASH MX 2004] message erreur de classe
    Par matN59 dans le forum Flash
    Réponses: 3
    Dernier message: 14/06/2004, 08h59
  5. [Kylix] message erreur à l'ex
    Par JlouisI dans le forum EDI
    Réponses: 5
    Dernier message: 08/03/2003, 17h47

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