EXEMPLE DE LOGICIEL DE BBD ACCESS AVEC ADOCONNECTION

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 28 janv. 2009 à 12:36
lord948 Messages postés 34 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 19 mai 2009 - 29 janv. 2009 à 11:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49092-exemple-de-logiciel-de-bbd-access-avec-adoconnection

lord948 Messages postés 34 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 19 mai 2009
29 janv. 2009 à 11:25
Bonjours,
juste quelque suggestion :

1. pour la chaine de connexion :
procedure TForm1.FormCreate(Sender: TObject);
begin
With ADOConnection1 do
begin
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
ExtractFilePath(Application.ExeName)+'Base de données1.mdb;Persist Securit'+
'y Info=False';
Connected := True;
ADOQuery1.Open
end;
end;

2. pour les
form2.Edit1.Text:='';
...
Form2.Edit1.Clear;

3. la Form2 et le bitbtn2 tu initialise la propiete ModalResult avec MrCancel tu na pas besoin du Close; la form est en showmodal

4. le méthode Value et un peut lourde essaie de précise le type.

5. pour ce genre d'exemple tu na pas vraiment besoin du TADOConnection, vue que tu utilise une seul table (Aucune relationnel)donc, la ConnectionString du TADOQuery suffit.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 janv. 2009 à 10:32
Starnouf a probablement une version de Delphi supérieure à la tienne (8 ou 9), ce qui empêche la lecture.
Ne te plains pas moi j'ai la version 6.

Cordialement, Bacterius !
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
29 janv. 2009 à 10:16
Bonjour,
En supprimant GIFImg la compilation trouve une erreur
identificateur non déclaré "MainFormOnTaskbar"

En supprimant
Application.MainFormOnTaskbar := True;
J'ai l'erreur :
---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet ListeDS.exe a provoqué une classe d'exception EReadError
avec le message 'La propriété NumbersOnly n'existe pas'.
Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------
ceci n'est pas compatible avec DELPH7 !!
Dommage je ne peux aller plus loin.

Salutations
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 janv. 2009 à 09:52
DoubleBuffered : pas grave, vous avez pas la même version.
Edit1.NumbersOnly : pas grave, mais tu feras gaffe à n'entrer que des nombres.
MainFormOnTaskbar : pas grave.

Supprime juste les instructions qui beugent.

Cordialement, Bacterius !
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
29 janv. 2009 à 08:59
Bonjour,
Cela progresse mais j'ai quelques erreurs :
BitBtn1.DoubleBuffered
la propriété DoubleBuffered n'existe pas

Edit1.NumbersOnly
la propriété NumbersOnly n'existe pas

en supriment GIFImg j'ai
identificateur non déclaré "MainFormOnTaskbar"

Salutations
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 janv. 2009 à 16:56
Ah au fait, il ne faut pas reposter : tout en haut de la page avec le source, il y a un libellé 'modifier ce code'. Clique dessus, et refais comme avant, en améliorant le source.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 janv. 2009 à 16:55
Ah oui effectivement, il faut inclure Unit1.dfm (le fichier de la fiche Form1), et pour GifImg, ce n'est peut-être pas nécessaire, mais au vu de ta capture d'écran, si.
Ah au passage, pense toujours à laisser les composants standard de Delphi dans tes sources, ou alors inclut les fichiers du composant, ou un lien pour le télécharger. Ici, tu aurais pu utiliser des BitBtn et mettre des bitmaps en BitBtn.Glyph.

Continue :)

Cordialement, Bacterius !
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
28 janv. 2009 à 13:38
Bonjour,
il manque :
Unit1.dfm
GIFImg.dcu

Jai DELPH 7
quelle version as-tu ?

Salutations
Starnouf Messages postés 2 Date d'inscription samedi 1 mars 2003 Statut Membre Dernière intervention 10 avril 2009
28 janv. 2009 à 13:13
Merci Bacterius, ce programme etant mon tout premier, bien qu'il fonctionne je me doutais qu'il y aurait certaines erreurs ou ameliorations de codes à apporter. En plus de partager, le but de ce 1er post etait egalement de recevoir de commentaires ou suggestions utiles à mon apprentissage :)
Je ne connaissais pas "with do" ni Case, et il est vrai que le code parait beaucoup moins fastidieux à lire. J'essaierait tout ca ce soir après le boulot, ainsi que renomer plus explicitement les composants.

Ensuite, conseillez vous le repost de la source modifiée, ou la laisser avec les commentaires des membres afin que chacun puisse voir un original avec les commentaires d'ameliorations ?

Cordialement, Starnouf
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 janv. 2009 à 12:36
Dommage, je ne peux pas tester, je n'ai pas les composants DB et ADO.
Je vais juste lire le code, et je te dis ce que j'en pense.
Juste un truc : n'est-il-pas possible de faire une base de données juste un petit peu moins lourde ? (genre 400Ko).

Alors ...

1) inutile de mettre les méthodes qui ne contiennent aucun code (Edit1Change, FormCreate).

2) utilise un bloc with-do. Il a la particularité de passer en référence du bloc l'objet que tu désires :

form2.Caption:='Modifier';
form2.Edit1.Text:=ADOQuery1.fieldbyname('Numero').AsString;
form2.Edit2.Text:=ADOQuery1.fieldbyname('Titre').AsString;
form2.ComboBox1.Text:=ADOQuery1.fieldbyname('Region').AsString;
form2.ComboBox2.Text:=ADOQuery1.fieldbyname('Sauvegarde').AsString;
form2.combobox3.Text:=ADOQuery1.fieldbyname('Taille').AsString;
form2.Edit3.Text:=ADOQuery1.fieldbyname('Catégorie').AsString;
form2.Memo1.Text:=ADOQuery1.fieldbyname('URL').Value;
form2. CheckBox1.Checked:=ADOQuery1.fieldbyname('Possède').Value;
form2.Show;

peut se remplacer plus lisiblement par

with Form2 do
begin
Caption:='Modifier';
Edit1.Text:=ADOQuery1.fieldbyname('Numero').AsString;
Edit2.Text:=ADOQuery1.fieldbyname('Titre').AsString;
ComboBox1.Text:=ADOQuery1.fieldbyname('Region').AsString;
ComboBox2.Text:=ADOQuery1.fieldbyname('Sauvegarde').AsString;
combobox3.Text:=ADOQuery1.fieldbyname('Taille').AsString;
Edit3.Text:=ADOQuery1.fieldbyname('Catégorie').AsString;
Memo1.Text:=ADOQuery1.fieldbyname('URL').Value;
CheckBox1.Checked:=ADOQuery1.fieldbyname('Possède').Value;
Show;
end;

Idem pour tous les autres blocs avec Form2 un peu plus haut, et avec les blocs qui contiennent 3 instructions à AdoQuery1.

3) Ceci est un peu lourd. Tu peux le remplacer par un case..of :

var
buttonSelected : Integer;
begin
// Afficher la boîte de dialogue
buttonSelected := MessageDlg('Voulez-vous supprimer cette fiche?',mtConfirmation, mbOKCancel, 0);
// Action suivant le bouton selectionné
if buttonSelected = mrOK then AdoQuery1.Delete;
if buttonSelected = mrCancel then close;
end;

Voilà :

begin
case MessageDlg('Voulez-vous supprimer cette fiche?',mtConfirmation, mbOKCancel, 0) of
mrOK: AdoQuery1.Delete;
mrCanceled: Close;
end;
end;

En fait, ce bloc case-of regarde la valeur renvoyée par la boîte de dialogue, puis vérifie s'il s'agit de mrOK ou de mrCanceled, et effectue l'instruction adaptée.

4) Pense à renommer tes composants d'une façon explicite, c'est une bonne habitude à prendre depuis le début.

En tout cas, tu mets des commentaires utiles, c'est bien. Mais il faut en mettre partout.

Voilà, c'est bien, continue.
Peut-être nourrir un petit peu plus ton application, en ajoutant des fonctionnalités plus étendues ?

Cordialement, Bacterius !
Rejoignez-nous