DBGrid n'affiche pas certaines colonnes [Résolu]

dygbahou89 - 1 oct. 2012 à 23:21 - Dernière réponse :  dygbahou89
- 5 oct. 2012 à 12:09
Bonjour a tous,
Je développe une application en Delphi 7 reliée a une base de données MySQL via ADOConnection. J'utilise notamment des ADOTable, ADOQuery et DataSource sur mon Data Module.

Le problème qui se pose c'est que lorsque je choisis d'afficher les données issues d'une table sur mon DBGrid, il n'affiche que certaines colonnes. Quand je ne définie pas de colonnes et que je le laisse afficher toutes les colonnes d'une table, il me renvoie toutes les valeurs. Sauf qu'il y a certaines colonnes dont j'aimerais bien me passer telles que (Num, contact, ...).

Au besoin, je rappelle que je travaille dans l'environnement Windows XP SP2.
Afficher la suite 

20 réponses

Répondre au sujet
dygbahou89 - 5 oct. 2012 à 12:09
+3
Utile
Merci a vous tous pour vos réponses !!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dygbahou89
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscriptionModérateurStatut 15 décembre 2014 Dernière intervention - 2 oct. 2012 à 10:14
0
Utile
Salut,

bizarre ton cas ...

Tu peux définir les colonnes dans la propriété columns mais aparemment, les colonnes aditionnées n' apparaissent pas toutes.

La seule alternative est de mettre la propriété Visible à false des champs que tu ne veux pas qu' ils s' affichent ...
A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscriptionModérateurStatut 27 mars 2018 Dernière intervention - 2 oct. 2012 à 16:42
0
Utile
Bonjour,

tu as plusieurs possibilités :

- soit tu n'affiches rien, ni ton query, ni dans ton grid
et dans ce cas, tous les champs s'afficheront

- soit tu places certains champs dans ton query ou dans ton grid
et tu ne verras que ceux-ci

tu peux aussi comme l'indique MAURICIO, placer tous les champs
dans le grid et gérer l'affichage de certains d'entre eux au coup par coup
grâce à la propriété visible (false ou true)
que tu peux bien entendu exploiter par programmation.

cantador
Commenter la réponse de cs_cantador
dygbahou89 - 2 oct. 2012 à 22:18
0
Utile
Merci a MAURICIO et cantador. En spécifiant dans ma requête SQL les colonnes qui m’intéressaient, tout a bien marché. Encore merci.

Mais j'ai un autre soucis alors permettez-moi de vous le soumettre ici en même temps.
voila, j'ai deux tables "voyage" et "voyagetermine". En cliquant sur le bouton valider, j'aimerais qu'un nouvel enregistrement s’opère dans la table "voyagetermine" et qu'au même moment, une mise a jour soit faite au niveau de la table "voyage". Dieu merci, j'arrive a insérer une nouvelle ligne dans la table "voyagetermine". J'aimerais cependant que vous m'aidiez a faire la mise a jour dans la table "voyage".

Voici le code qui permet inserer une nouvelle ligne dans la table "voyagetermine" :

with DM.VoyageTermine do
begin
Open;
Insert;
FieldByName('marque').AsString:=edMarque.Text;
FieldByName('immatriculation').AsString:=edImmatriculation.Text;
FieldByName('nomchauffeur').AsString:=edNomChauffeur.Text;
FieldByName('contactchauffeur').AsString:=edContactChauffeur.Text;
FieldByName('nomclient').AsString:=edNomChargeur.Text;
FieldByName('contactclient').AsString:=edContactChargeur.Text;
FieldByName('marchandise').AsString:=edDesignation.Text;
FieldByName('tonnage').AsString:=edTonnage.Text;
FieldByName('datedepart').AsString:=DateToStr(cbDateDepart.Date);
FieldByName('dateretour').AsString:=DateToStr(cbDateRetour.Date);
FieldByName('montant').AsString:=edSommeAPayer.Text;
FieldByName('avance').AsString:=edAvance.Text;
FieldByName('reste').AsString:=edReste.Text;
FieldByName('etat').AsString:=edTermine.Text;
Post;
DM.VoyageTermine.Refresh;
ShowMessage('Voyage terminé !');
end;
Close;

Merci pour votre aide !!
Commenter la réponse de dygbahou89
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscriptionModérateurStatut 15 décembre 2014 Dernière intervention - 3 oct. 2012 à 10:08
0
Utile
Salut,

le principe est le même: il faut utiliser la commande Edit à la place de Insert;
Biensûr, il faut se positionner sur l' enregistrement correct avant.


A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
dygbahou89 - 3 oct. 2012 à 12:18
0
Utile
Voici le code derrière le bouton en question :

with DM.VoyageTermine do //enregistrement dans la table "voyagetermine"
begin
Open;
Insert;
FieldByName('marque').AsString:=edMarque.Text;
FieldByName('immatriculation').AsString:=edImmatriculation.Text;
FieldByName('nomchauffeur').AsString:=edNomChauffeur.Text;
FieldByName('contactchauffeur').AsString:=edContactChauffeur.Text;
FieldByName('nomclient').AsString:=edNomChargeur.Text;
FieldByName('contactclient').AsString:=edContactChargeur.Text;
FieldByName('marchandise').AsString:=edDesignation.Text;
FieldByName('tonnage').AsString:=edTonnage.Text;
FieldByName('datedepart').AsString:=DateToStr(cbDateDepart.Date);
FieldByName('dateretour').AsString:=DateToStr(cbDateRetour.Date);
FieldByName('montant').AsString:=edSommeAPayer.Text;
FieldByName('avance').AsString:=edAvance.Text;
FieldByName('reste').AsString:=edReste.Text;
FieldByName('etat').AsString:=edTermine.Text;
Post;
DM.VoyageTermine.Refresh;
ShowMessage('Voyage terminé !');
end;
with DM.Voyage do //mise a jour dans la table "voyage"
begin
Open;
Edit; // J'ai mis Edit ici comme vous me l'avez suggéré
FieldByName('marque').AsString:=edMarque.Text;
FieldByName('immatriculation').AsString:=edImmatriculation.Text;
FieldByName('nomchauffeur').AsString:=edNomChauffeur.Text;
FieldByName('contactchauffeur').AsString:=edContactChauffeur.Text;
FieldByName('nomclient').AsString:=edNomChargeur.Text;
FieldByName('contactclient').AsString:=edContactChargeur.Text;
FieldByName('marchandise').AsString:=edDesignation.Text;
FieldByName('tonnage').AsString:=edTonnage.Text;
FieldByName('datedepart').AsString:=DateToStr(cbDateDepart.Date);
FieldByName('montant').AsString:=edSommeAPayer.Text;
FieldByName('avance').AsString:=edAvance.Text;
FieldByName('reste').AsString:=edReste.Text;
FieldByName('etat').AsString:='Terminé';
Post;
DM.Voyage.Refresh;
end;
Close;

Mais, rien ne se passe dans la table "voyage" !!
Commenter la réponse de dygbahou89
dygbahou89 - 3 oct. 2012 à 12:19
0
Utile
De plus, comment faire pour qu'apres un nouvel enregistrement, mon dbgrid se rafraichisse sans avoir a fermer le programme avant de voir apparaitre le nouvel enregistrement ???
Commenter la réponse de dygbahou89
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscriptionModérateurStatut 27 mars 2018 Dernière intervention - 3 oct. 2012 à 17:34
0
Utile
tout doux l'ami
une question à la fois..
merci

cantador
Commenter la réponse de cs_cantador
dygbahou89 - 3 oct. 2012 à 22:15
0
Utile
Toutes mes excuses, j'avais dis :
Merci a MAURICIO et cantador. En spécifiant dans ma requête SQL les colonnes qui m'intéressaient, tout a bien marché. Encore merci.

Mais j'ai un autre soucis alors permettez-moi de vous le soumettre ici en même temps.
voila, j'ai deux tables "voyage" et "voyagetermine". En cliquant sur le bouton valider, j'aimerais qu'un nouvel enregistrement s'opère dans la table "voyagetermine" et qu'au même moment, une mise a jour soit faite au niveau de la table "voyage". Dieu merci, j'arrive a insérer une nouvelle ligne dans la table "voyagetermine". J'aimerais cependant que vous m'aidiez a faire la mise a jour dans la table "voyage".

Voici le code qui permet inserer une nouvelle ligne dans la table "voyagetermine" :

with DM.VoyageTermine do
begin
Open;
Insert;
FieldByName('marque').AsString:=edMarque.Text;
FieldByName('immatriculation').AsString:=edImmatriculation.Text;
FieldByName('nomchauffeur').AsString:=edNomChauffeur.Text;
FieldByName('contactchauffeur').AsString:=edContactChauffeur.Text;
FieldByName('nomclient').AsString:=edNomChargeur.Text;
FieldByName('contactclient').AsString:=edContactChargeur.Text;
FieldByName('marchandise').AsString:=edDesignation.Text;
FieldByName('tonnage').AsString:=edTonnage.Text;
FieldByName('datedepart').AsString:=DateToStr(cbDateDepart.Date);
FieldByName('dateretour').AsString:=DateToStr(cbDateRetour.Date);
FieldByName('montant').AsString:=edSommeAPayer.Text;
FieldByName('avance').AsString:=edAvance.Text;
FieldByName('reste').AsString:=edReste.Text;
FieldByName('etat').AsString:=edTermine.Text;
Post;
DM.VoyageTermine.Refresh;
ShowMessage('Voyage terminé !');
end;
Close;

Merci pour votre aide !!





MAURICIO m'avait dit :
Salut,

le principe est le même: il faut utiliser la commande Edit à la place de Insert;
Biensûr, il faut se positionner sur l' enregistrement correct avant.


A+






Et moi, j'ai dis :
Voici le code derrière le bouton en question :

with DM.VoyageTermine do //enregistrement dans la table "voyagetermine"
begin
Open;
Insert;
FieldByName('marque').AsString:=edMarque.Text;
FieldByName('immatriculation').AsString:=edImmatriculation.Text;
FieldByName('nomchauffeur').AsString:=edNomChauffeur.Text;
FieldByName('contactchauffeur').AsString:=edContactChauffeur.Text;
FieldByName('nomclient').AsString:=edNomChargeur.Text;
FieldByName('contactclient').AsString:=edContactChargeur.Text;
FieldByName('marchandise').AsString:=edDesignation.Text;
FieldByName('tonnage').AsString:=edTonnage.Text;
FieldByName('datedepart').AsString:=DateToStr(cbDateDepart.Date);
FieldByName('dateretour').AsString:=DateToStr(cbDateRetour.Date);
FieldByName('montant').AsString:=edSommeAPayer.Text;
FieldByName('avance').AsString:=edAvance.Text;
FieldByName('reste').AsString:=edReste.Text;
FieldByName('etat').AsString:=edTermine.Text;
Post;
DM.VoyageTermine.Refresh;
ShowMessage('Voyage terminé !');
end;
with DM.Voyage do //mise a jour dans la table "voyage"
begin
Open;
Edit; // J'ai mis Edit ici comme vous me l'avez suggéré
FieldByName('marque').AsString:=edMarque.Text;
FieldByName('immatriculation').AsString:=edImmatriculation.Text;
FieldByName('nomchauffeur').AsString:=edNomChauffeur.Text;
FieldByName('contactchauffeur').AsString:=edContactChauffeur.Text;
FieldByName('nomclient').AsString:=edNomChargeur.Text;
FieldByName('contactclient').AsString:=edContactChargeur.Text;
FieldByName('marchandise').AsString:=edDesignation.Text;
FieldByName('tonnage').AsString:=edTonnage.Text;
FieldByName('datedepart').AsString:=DateToStr(cbDateDepart.Date);
FieldByName('montant').AsString:=edSommeAPayer.Text;
FieldByName('avance').AsString:=edAvance.Text;
FieldByName('reste').AsString:=edReste.Text;
FieldByName('etat').AsString:='Terminé';
Post;
DM.Voyage.Refresh;
end;
Close;

Mais, rien ne se passe dans la table "voyage" !!
Merci pour votre aide !!
Commenter la réponse de dygbahou89
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscriptionModérateurStatut 15 décembre 2014 Dernière intervention - 4 oct. 2012 à 10:25
0
Utile
La solution est dans ma réponse antérieure ...
A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
dygbahou89 - 4 oct. 2012 à 13:08
0
Utile
Bonjour,
le " Edit; " ne change rien. La colonne de la table que je souhaite modifier reste inchangée !!
Commenter la réponse de dygbahou89
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscriptionModérateurStatut 15 décembre 2014 Dernière intervention - 4 oct. 2012 à 13:11
0
Utile
Ce n' est qu' une partie de ma réponse ...


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
dygbahou89 - 4 oct. 2012 à 14:00
0
Utile
OK, merci de me donner l'autre partie alors, parce que j'ignore ce dont tu parles !!
Commenter la réponse de dygbahou89
dygbahou89 - 4 oct. 2012 à 14:22
0
Utile
Au fait, cela rajoute une nouvelle a la table. Moi je voudrais faire une mise a jour d'une ligne existante ou carrément supprimer la ligne entière !!
Commenter la réponse de dygbahou89
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscriptionModérateurStatut 27 mars 2018 Dernière intervention - 4 oct. 2012 à 14:45
0
Utile
Bonjour,

Comme l'a suggéré MAURICIO

au niveau de l'ajout la procédure insert
peut se lancer sans positionnement particulier de la table

en revanche, lorsque tu veux "modifier" ou "supprimer" un enregistrement
il est nécessaire de se caler dessus.

Pour réaliser sans peine, cette opération il existe une fonction:

LOCATE

function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;


Je te laisse le soin d'étudier l'aide (F1) et de consulter quelques
exemples..

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscriptionModérateurStatut 15 décembre 2014 Dernière intervention - 4 oct. 2012 à 15:08
0
Utile
"...
Biensûr, il faut se positionner sur l' enregistrement correct avant. "

C' est ce que je disais ....
Je n' ai écrit que 2 lignes et tu n' as lu que la 1ère.


D' une manière générale, il te manque de toute évidence les connaissances de base sur la gestion des curseurs.

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscriptionModérateurStatut 27 mars 2018 Dernière intervention - 4 oct. 2012 à 17:26
0
Utile
lire une ligne sur deux, c'est pas bon..

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscriptionModérateurStatut 15 décembre 2014 Dernière intervention - 4 oct. 2012 à 17:30
0
Utile
Certes

Il ne faut pas non plus sous-estimer l' importance de faire les recherches par soi-même car ç' est comme ça qu' on apprend des choses qui n' ont rien à voir avec ce que l' on cherchait ...


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscriptionModérateurStatut 27 mars 2018 Dernière intervention - 4 oct. 2012 à 17:41
0
Utile
c'est tellement vrai

cantador
Commenter la réponse de cs_cantador
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 4 oct. 2012 à 20:24
0
Utile
... C'est d'ailleurs souvent en trouvant aujourd'hui des choses qui n'ont rien à voir avec ce que l'on cherchait mais qu'on cherchera demain qu'on se prépare des lendemains peinards.
Commenter la réponse de Caribensila

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.