begin process at 2008 05 22 21:59:42
1 177 987 membres
633 nouveaux aujourd'hui
13 991 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

683 commentaire(s) de Delphiprog sur des sources sur tout CodeS-SourceS

Le : 20/05/2008 22:23:24
Source : JEU DE CHIFFRES
OK pour les modifs,mais pas pour les règles du jeu :
1- peut-on cliquer plusieurs fois sur une même case ?
2- comment sont calculés les points accumulés par chacun des joueurs ?
3- Quelles sont les stratégies de jeu, possibles ou à privilégier ?
4- etc.
Tu vois ? toutes ces petites choses qui font qu'on a envie d'essayer le jeu sans devoir lire le code source pour essayer de comprendre comment ça marche et, inversement, pour pouvoir vérifier que le code respecte les règles décrites :)
Alors, des règles écrites (un .txt suffit) et jointes à l'archive, ce serait bien. Je suis désolé de devoir insister.


Le : 14/05/2008 10:54:16
Source : GFACT - GESTION DE FACTURATION
@adelpro : une solution pour comprendre, http://translate.google.com.
(sélectionner la détection automatique de préférence).


Le : 11/05/2008 10:36:22
Source : UTILISATION DLL NETAPI32 POUR LISTER UTILISATEURS RESEAU ET GESTIONNAIRE DE SERVEUR DE FICHIERS
Ca a l'air propre et bien écrit mais l'absence de commentaires dans le code est pénalisante pour la compréhension.


Le : 11/05/2008 10:29:57
Source : GFACT - GESTION DE FACTURATION
Bonjour Adelpro : est-ce une nouvelle version des deux codes sources précédents ou quelque chose de vraiment nouveau ?

NB 1 : on retrouve les mêmes critiques que précédemment.

NB 2 : si les pharmaciens se mettent à faire de la programmation, il ne faut pas s'étonner que les épiciers veuillent vendre de la pharmacie !...(humour)

NB 3 : ne sois pas étonné que peu de gens s'intéressent à ton code car nous n'avons pas envie d'installer toute une batterie de nouveaux composants juste pour voir.


Le : 10/05/2008 17:59:37
Source : GRID AVEC PROPRIÉTÉS D'AFFICHAGE ET D'ÉDITION
Je me suis dit : super travail.
J'ai donc voulu voir à quoi ça ressemblait en fonctionnement et patatras, sous Delphi 7, au lancement de l'application :

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet DemoTThGrid.exe a provoqué une classe d'exception EConvertError avec le message ''' n'est pas une valeur en virgule flottante correcte'.  Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK   Aide  
---------------------------

sur la ligne 916 de l'unité thgrids.pas :
   if AValue <> '' then
      DrawCellValue(AValue, ACol, ARow, ARect, AState);

What's wrong ?


Le : 10/05/2008 17:12:52
Source : JEU DE CHIFFRES
Bravo, pas franchement de défaut hormis le fait de prendre le risque d'exposer un certain nombre de variables, dans la partie interface, à des modifications intempestives.
Il aurait été aussi souhaitable d'alléger le code à certains endroits par l'emploi de with...do begin...end.

Questions :
1- Serait-il possible de fournir les règles du jeu ?
2- Comment interrompre une partie avant la fin ?


Le : 10/05/2008 15:54:34
Source : GDC MANAGER
Effectivement, pour une première, c'est pas mal.
Voici néanmoins quelques remarques (constructives) :
1- Eviter de désactiver les messages d'erreur du compilateur qui ne sont pas là pour meubler le décor. Ainsi, les avertissements suivants sont à prendre au sérieux :
[Avertissement] AjoutContact.pas(256): La variable 'senderEdt' n'est peut-être pas initialisée
[Avertissement] AjoutContact.pas(267): La variable 'SenderEdt' n'est peut-être pas initialisée
[Avertissement] AjoutContact.pas(299): Le symbole 'fmShareDenyRead' est propre à une plate-forme
[Avertissement] ModifContact.pas(260): La variable 'senderEdt' n'est peut-être pas initialisée
[Avertissement] ModifContact.pas(271): La variable 'SenderEdt' n'est peut-être pas initialisée
[Avertissement] ModifContact.pas(312): Le symbole 'fmShareDenyRead' est propre à une plate-forme

Hormis l'avertissement concernant l'utilisation du symbole fmShareDenyRead, le reste peut poser de gros problèmes à l'exécution.

2- Il manque des contrôles à la suppression d'un contact : si on ne rentre aucune donnée et que l'on clique sur le bouton [ok], voici le beau message qui s'affiche :
---------------------------
Gestion Des Contacts
---------------------------
Base de données inconnue.

Alias: Contact.
---------------------------
OK  
---------------------------
A affiner, donc.

3- idem que ci-dessus lorsque l'on tente de visualiser un contact ou tous les contacts avec une base de données vide.

4- "Visualiser un contact", puis cliquer sur "visualiser", on obtient ceci :
---------------------------
Gestion Des Contacts
---------------------------
Violation d'accès à l'adresse 005263D0 dans le module 'GDCManager.exe'. Lecture de l'adresse 0000033C.
---------------------------
OK  
---------------------------

5- Au niveau du code, on trouve des redondances comme dans Timer1Timer et dans FormCreate (Accueil.pas) pour une simple mise à l'heure des différents composants. Place cette potion de code dans une procédure que tu appelles ensuite.
De même pour :
procedure TFenPrincipale.AjoutContact1Click(Sender: TObject);
begin
  TFajoutContact.Create(Self);
  ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
end;

{-------------------------------------------------------------------------}

procedure TFenPrincipale.Label11Click(Sender: TObject);
begin
  TFajoutContact.Create(Self);
  ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
end;
De plus, je dirai que c'est un peu maladroit qu'une fiche soit chargée de modifier le titre d'une autre fiche lorsque ce titre est statique.

6- Attention à la façon de nommer tes composants car cela peut prêter à confusion comme ici :
procedure TFenPrincipale.AjoutContact2Click(Sender: TObject);
begin
  TFsuppContact.create(self);
  ActiveMDIChild.Caption := 'Suppression d''un Contact';

end;
Le bouton AjoutContact a pour action d'afficher la fiche de suppression d'un contact !

7- Ce type de code fait un peu ringard de nos jours et me rappelle les applications des années 80 :
procedure TFenPrincipale.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if
    MessageDlg('Cette operation fermera l''application. Voulez-vous effectuer cette operation ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    Application.Terminate
  else
  begin
    Action := caNone;
  end;
end;
On alerte l'utilisateur uniquement si des données ont été modifiées et non sauvegardées. D'autre part, éviter l'utilisation de l'appel à Application.Terminate qui arrête brutalement l'application sans laisser le temps aux composants orientés données de vider leurs buffers.

8- Attention à vérifier l'existence d'un fichier avant de l'ouvrir comme dans :
procedure Tsplash.FormShow(Sender: TObject);
begin
  sprite := tbitmap.create;
  sprite.loadfromfile('1.bmp');

9- Privilégier l'utilisation de TDataModule pour centraliser la logique métier en matière de gestion des données. Cela aurait évité de multiplier les composants TQuery sur chaque fiche et de retrouver des requêtes identiques d'une fiche à l'autre. Lors de la maintenance d'une application, cela peut devenir critique et coûteux en temps avec des tests inutiles quand il faut revisiter chaque fiche de l'application (qui peut en contenir plusieurs centaines). La preuve :

E:\delphifr\GDC\GDC Manager\Acceuil.pas
    163 ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
    171 ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
    187 ActiveMDIChild.Caption := 'Recherche et Modification d''un Contact';
    195 ActiveMDIChild.Caption := 'Suppression d''un Contact';

E:\delphifr\GDC\GDC Manager\AjoutContact.pas
    173 query1.SQL.Add('insert into contact (civilite,Societe,Nom,Prenom,Adresse,CodePostal,Ville,Pays,Site,Email,telephone,Fax,Mobile,DateNaiss,Observation,photo) values (:ci,:s,:n,:p,:a,:c,:v,:pa,:si,:e,:t,:f,:m,:d,:o,:pho)');

E:\delphifr\GDC\GDC Manager\ModifContact.pas
    105 Query1.SQL.Add('select * from contact where nom = :p');
    198 Query1.SQL.Add('UPDATE contact SET civilite=:ci ,societe=:s,Nom=:n,Prenom=:p,Adresse=:a,CodePostal=:c,ville=:v,pays=:pa,Email=:e,site=:si,telephone=:t,fax=:f,mobile=:m,datenaiss=:d,observation=:o,photo=:pho WHERE nom=:pr');
    335 Query1.SQL.Add('SELECT Nom from contact where Nom LIKE :p Order by Nom Asc');

E:\delphifr\GDC\GDC Manager\SelectContact.pas
     64 Query1.SQL.Add('SELECT Nom from contact where Nom LIKE :p Order by Nom Asc');
     81 Query1.SQL.Add('select * from contact where nom = :p');

E:\delphifr\GDC\GDC Manager\SupprimerContact.pas
     54 Query1.SQL.Add('select prenom from contact where nom = :p ');
     86 Conf := MessageDlg(('Voulez-vous Vraiment supprimer le contact ' + combo.Text
     92 Query1.SQL.Add('Delete from Contact WHERE nom=:pr');
    116 Query1.SQL.Add('SELECT Nom from contact where Nom LIKE :p Order by Nom Asc');

Dans le code, on remarque aussi que tu ne vérifies aucune des données entrées par l'utilisateur et que tu ne prends même pas la précaution de "quoter" tes chaines. Rien de tel pour faire planter une requête si un contact s'appelle "Monsieur Archibald de l'archipel". Ta base de données est gravement exposée aux injections SQL.

Bon, je vais m'arrêter là et passer le relais aux autres. Tu as déjà de quoi occuper les quelques jours du long week-end qu'il te reste.
Mais, je le dis comme d'autres ici, pour une première c'est pas mal du tout.


Le : 19/04/2008 10:09:02
Source : AJOUT VALEUR CHAMP ENUM
tetechercheuse a écrit :
"L'intéret de cette source n'est pas pour l'administrateur du site qui bien évidemment peux changer les valeurs directement sur la base MySQl mais plutot pour l'utilisateur des pages qui va créer sa liste déroulante lui-même."
Alors, cela s'appelle une faute frave : si l'utilisateur lambda a tous les droits sur une base, y compris le droit ALTER, ça craint ! Et pourquoi pas les droits DROP DATABASE ? Les commandes CREATE USER et GRANT ne sont pas faites pour faire bien mais pour servir.

Et que se passe-t-il si l'utilisateur ajoute une valeur déjà existante ? Comme le fait si bien remarquer TheSin, une "ch'tite gestion d'erreur" serait la bienvenue.

Personnellement, j'ai même déjà vu des sites web en ligne où l'on se connecte en root et sans mot de passe à la base de données ! Si, je vous le jure. Et encore, je ne vous parle pas de la non vérification des entrées utilisateur dans les formulaires...

Pour en revenir au débat code/snippet, je ne pencherais ni pour l'un ni pour l'autre dans la mesure où l'intérêt réside uniquement dans la formulation de la requête SQL et qu'elle peut être saisie directement en ligne de commande.

A quand un snippet pour les champs de type SET ? :)


Le : 19/04/2008 08:46:34
Source : MLD D'UN BASE DE DONNÉES MYSQL OU SQLITE
Ah oui, aussi : le terme MLD est un peu galvaudé ici puisque les scripts ne font que de décrire le modèle physique des tables.
Appelons un chat un chat...


Le : 19/04/2008 08:44:09
Source : MLD D'UN BASE DE DONNÉES MYSQL OU SQLITE
Et les vues ? et les procédures stockées ? et les triggers ?
Une base de données digne de ce nom comme MySql et, dans une moindre mesure, SqlLite ne se limite pas au simple stockage de données.
Je suis d'accord avec Malalam pour dire que le HTML n'est absolument pas utile ici. Il n'y a pas besoin de faire "joli" mais uniquement de l'utile.

L'idée est bonne et mérite d'être encouragée.

Allez, encore un petit effort et tire la quintessence du schéma INFORMATION_SCHEMA de MySql.



Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS