Paradox

alexyou Messages postés 14 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 17 octobre 2009 - 18 mars 2007 à 11:22
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 - 19 mars 2007 à 19:44
bonjour
j'ai créer une base de donnée paradox, et j'ai rempli les champs via la fiche,et quand j'ai essaié de modifier les données via mon code j'ai un message d'erreur(Table1: l'ensemble de données n'est pas en mode Edition ou Insertion)
je ne sais pas comment rendre ma table en mode insertion! Merci de votre aides.

4 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
18 mars 2007 à 11:52
Salut,

Pour modifier un enregistrement :
   Table1.Edit;  // place la table en mode édtition
   //....
   Table1.Post; // pour valider les modifications
   // ou Table1.Cancel pour annuler les modifications

Pour ajouter un enregistrement :
   Table1.Append; // place la table en mode insertion
   //...
   Table1.Post; // ou Cancel

Un conseil : lis l'aide de Delphi concernant l'emploi de base de données...

A +
Thierry 
0
alexyou Messages postés 14 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 17 octobre 2009
18 mars 2007 à 23:51
Merci de votre réponse,j'ai aussi un problème : j'ai choisi un nombre aléatoirement par random et je me positionne sur l'enregistrement numéro (le nombre aléatoire)mais toujours je me trouve au dérnier enregistrement,un enregistrement est composé de 3 champs un identifiant numérique,un string(c'est le mot=>dictionnaire)et un entier intialiser a 0 pour marquer si le mot a été déja choisie ou pas voila mon code  
     Randomize;
     repeat
     choix :=random(TAILLE_TOTAL)+1;
     Table1.MoveBy(choix);
     if (Table1.Fields[2].AsInteger=0)then MotCherche:=Table1.Fields[1].AsString;
     until (Table1.Fields[2].AsInteger=0);
     Table1.Fields[3].AsInteger:=1;//marquer Ce mot pr ne pas être l'utilisé
j'essaie de trouver une solution mais si vous m'aidez je serai reconnaissant.
0
alexyou Messages postés 14 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 17 octobre 2009
19 mars 2007 à 00:16
j'ai trouver la réponse je crois que juste j'ai oublier de mettre Table1.First; mais je ne sais pas si ma logique de  programmation  de la boucle et bonne ou pas pour choisir qu'une seule fois un mot.
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
19 mars 2007 à 19:44
Salut,

Une boucle avec un random n'est pas, à mon avis, la meilleure solution. 
Imagine que ta table a 200 mots et que 198 ont déjà été choisis. Il va falloir quelques random avant de tomber sur les 2 libres !

Pourquoi ne filtres-tu pas la table sur les mots non choisis ?
Je suppose que ton fields[2] s'appelle "Used".

function ChercheMot: string; 
var
  N: integer;
begin
   Table1.Filter:= 'USED < 1';  // on prend les 0 et les ''
   Table1.Filtered:= true;   N:Table1.RecordCount;  // nombre d'enregistrements avec Used 0
   if N > 0 then
   begin
         Randomize;
        Table1.MoveBy(Random(N +1);
         Result:= Table1.Fields[1].asString;
         Table1.Edit;
         Table1.Fields[2].asInteger:= 1;
         Table1.Post;
   end
   else
         Result:= '';
   Table1.Filtered:= false;
end;

A +
Thierry
0
Rejoignez-nous