PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > nzn.fr.delphi > bloquer le déplacement sur un dataset
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
bloquer le déplacement sur un dataset

Réponse
 
LinkBack Outils de la discussion
Vieux 31/01/2008, 10h46   #1
Raphael Vivien
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut bloquer le déplacement sur un dataset

Bonjour,
Soit un dataset : dts (Tclientdataset ou TTable) déclaré en public

Voici ce que je voudrais faire :

procedure traite
begin
dts.locate('IDENTIFICATION', 12,[]);
ici bloquer la position de dts sur l'enregistrement courant
try // dans le bloc try finally ne pas pouvoir bouger
dans dts
fonction1 // dans fonction avoir accès à l'enregistrement en
lecture, edit, post
fonction2
......

finally
débloquer dts
end;
end;

En bref c'est d'être sur que dans fonction1 à ..... que l'on reste bien sur
le bonne enregistrement.
J'ai une première solution : c'est de mettre une clé unique sur dts et de
faire un dts.setrange([12],[12]);

Comment écrire cela au mieux.

Merci pour toute proposition.


--
Antoine Ostinelli
AZLAC Tél. 04 50 67 13 55 web : www.azlac.com

N'imprimez ce mail que si nécessaire






--
Raphaël Vivien


  Réponse avec citation
Vieux 01/02/2008, 12h54   #2
F
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset

> ici bloquer la position de dts sur l'enregistrement courant
bloquer le rafraichissement de l ecran , tu veux dires ???


  Réponse avec citation
Vieux 01/02/2008, 13h57   #3
Raphael Vivien
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset


"F" <ff@ff.com> a écrit dans le message de news:
mn.0b427d8233f46c27.24174@ff.com...
>> ici bloquer la position de dts sur l'enregistrement courant

> bloquer le rafraichissement de l ecran , tu veux dires ???
>

Non, bloquer le dataset sur l'enregistrement en question.
Les traitements contenus dans les fonctions se rapportent à un élément
particulier pointé par le dataset, je dois être sur que l'enregistrement
courant du dataset reste le même.
Les fonctions peuvent lire ou écrire dans l'enregistrement courrant.
Bloquer le dataset n'est peut être pas la bonne méthode, est il possible de
créer un objet style 'Record' contenant les mêmes champs que le dataset.
Le "record" est rempli avec les champs de l'enregistrement sélectionné.
Le "record" est passé en arguments var aux différentes fonctions.
A la fin le "record" est recopié dans le dataset à la place de
l'enregistrement d'origine.

Le" record" pourrait être traité comme un dataset :
record.fieldvalues['NOM_DU_CHAMP'] :=


Ma question est comment faire cela le mieux possible ?

R.V.


  Réponse avec citation
Vieux 01/02/2008, 14h00   #4
BigGrizzly
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset

Raphael Vivien a écrit :
> "F" <ff@ff.com> a écrit dans le message de news:
> mn.0b427d8233f46c27.24174@ff.com...
>>> ici bloquer la position de dts sur l'enregistrement courant

>> bloquer le rafraichissement de l ecran , tu veux dires ???
>>

> Non, bloquer le dataset sur l'enregistrement en question.
> Les traitements contenus dans les fonctions se rapportent à un élément
> particulier pointé par le dataset, je dois être sur que l'enregistrement
> courant du dataset reste le même.
> Les fonctions peuvent lire ou écrire dans l'enregistrement courrant.
> Bloquer le dataset n'est peut être pas la bonne méthode, est il possible de
> créer un objet style 'Record' contenant les mêmes champs que le dataset.
> Le "record" est rempli avec les champs de l'enregistrement sélectionné.
> Le "record" est passé en arguments var aux différentes fonctions.
> A la fin le "record" est recopié dans le dataset à la place de
> l'enregistrement d'origine.
>
> Le" record" pourrait être traité comme un dataset :
> record.fieldvalues['NOM_DU_CHAMP'] :=
>
>
> Ma question est comment faire cela le mieux possible ?
>
> R.V.
>
>

C'est quoi que tu crains ?... Qu'il bouge tout seul une fois sélectionné
par un Locate ?
  Réponse avec citation
Vieux 01/02/2008, 14h29   #5
michael
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset

> Bonjour,
> Soit un dataset : dts (Tclientdataset ou TTable) déclaré en public
>
> Voici ce que je voudrais faire :
>
> procedure traite
> begin
> dts.locate('IDENTIFICATION', 12,[]);
> ici bloquer la position de dts sur l'enregistrement courant
> try // dans le bloc try finally ne pas pouvoir bouger dans
> dts
> fonction1 // dans fonction avoir accès à l'enregistrement en
> lecture, edit, post
> fonction2
> ......
>
> finally
> débloquer dts
> end;
> end;
>
> En bref c'est d'être sur que dans fonction1 à ..... que l'on reste bien sur
> le bonne enregistrement.
> J'ai une première solution : c'est de mettre une clé unique sur dts et de
> faire un dts.setrange([12],[12]);
>
> Comment écrire cela au mieux.
>
> Merci pour toute proposition.
>
>
> --
> Antoine Ostinelli
> AZLAC Tél. 04 50 67 13 55 web : www.azlac.com
>
> N'imprimez ce mail que si nécessaire


et si tu ouvre qu'un seul enregistrement?

--
Michael


  Réponse avec citation
Vieux 01/02/2008, 14h39   #6
Raphael Vivien
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset


"BigGrizzly" <bigENLEVERCECIgrizzly@zoo-loETCAgique.org> a écrit dans le
message de news: fnv8me$c0a$1@sd-6836.dedibox.fr...
> Raphael Vivien a écrit :
>> "F" <ff@ff.com> a écrit dans le message de news:
>> mn.0b427d8233f46c27.24174@ff.com...
>>>> ici bloquer la position de dts sur l'enregistrement courant
>>> bloquer le rafraichissement de l ecran , tu veux dires ???
>>>

>> Non, bloquer le dataset sur l'enregistrement en question.
>> Les traitements contenus dans les fonctions se rapportent à un élément
>> particulier pointé par le dataset, je dois être sur que l'enregistrement
>> courant du dataset reste le même.
>> Les fonctions peuvent lire ou écrire dans l'enregistrement courrant.
>> Bloquer le dataset n'est peut être pas la bonne méthode, est il possible
>> de créer un objet style 'Record' contenant les mêmes champs que le
>> dataset.
>> Le "record" est rempli avec les champs de l'enregistrement sélectionné.
>> Le "record" est passé en arguments var aux différentes fonctions.
>> A la fin le "record" est recopié dans le dataset à la place de
>> l'enregistrement d'origine.
>>
>> Le" record" pourrait être traité comme un dataset :
>> record.fieldvalues['NOM_DU_CHAMP'] :=
>>
>>
>> Ma question est comment faire cela le mieux possible ?
>>
>> R.V.

> C'est quoi que tu crains ?... Qu'il bouge tout seul une fois sélectionné
> par un Locate ?

Pas exactement tout seul, mais dans les fonctions de traitement une erreure
de programmation peut conduire à un déplacement de l'enregistrement courant.
Si j'ai un système qui me garanti de ne pas pouvoir faire l'erreur c'est
mieux.

RV


  Réponse avec citation
Vieux 01/02/2008, 14h57   #7
BigGrizzly
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset

Raphael Vivien a écrit :
> "BigGrizzly" <bigENLEVERCECIgrizzly@zoo-loETCAgique.org> a écrit dans le
> message de news: fnv8me$c0a$1@sd-6836.dedibox.fr...
>> Raphael Vivien a écrit :
>>> "F" <ff@ff.com> a écrit dans le message de news:
>>> mn.0b427d8233f46c27.24174@ff.com...
>>>>> ici bloquer la position de dts sur l'enregistrement courant
>>>> bloquer le rafraichissement de l ecran , tu veux dires ???
>>>>
>>> Non, bloquer le dataset sur l'enregistrement en question.
>>> Les traitements contenus dans les fonctions se rapportent à un élément
>>> particulier pointé par le dataset, je dois être sur que l'enregistrement
>>> courant du dataset reste le même.
>>> Les fonctions peuvent lire ou écrire dans l'enregistrement courrant.
>>> Bloquer le dataset n'est peut être pas la bonne méthode, est il possible
>>> de créer un objet style 'Record' contenant les mêmes champs que le
>>> dataset.
>>> Le "record" est rempli avec les champs de l'enregistrement sélectionné.
>>> Le "record" est passé en arguments var aux différentes fonctions.
>>> A la fin le "record" est recopié dans le dataset à la place de
>>> l'enregistrement d'origine.
>>>
>>> Le" record" pourrait être traité comme un dataset :
>>> record.fieldvalues['NOM_DU_CHAMP'] :=
>>>
>>>
>>> Ma question est comment faire cela le mieux possible ?
>>>
>>> R.V.

>> C'est quoi que tu crains ?... Qu'il bouge tout seul une fois sélectionné
>> par un Locate ?

> Pas exactement tout seul, mais dans les fonctions de traitement une erreure
> de programmation peut conduire à un déplacement de l'enregistrement courant.
> Si j'ai un système qui me garanti de ne pas pouvoir faire l'erreur c'est
> mieux.
>
> RV
>
>

Tu pourrais par exemple : Lancer une exception ou un abort dans
BeforeScroll ? Utiliser la propriété Filter pour ne conserver que
l'enregistrement qui te convient ?

Si vraiment tu veux t'equiquiner la vie, tu peux avoir un VirtualDataset
qui contient seulement ton enregistrement...

Ceci dit... Si tu penses que le dataset va bouger tout seul, vaut mieux
cesser de suite de "croire" en l'informatique... Si je devais partir du
postulat que mes datasets vont bouger alors qu'ils ne le sont pas
supposés, j'avoue que ça m'augmenterait grandement mes heures de
développement... ... ...
  Réponse avec citation
Vieux 03/02/2008, 08h10   #8
handman
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset

filtre ton dataset sur une clé, même apres close open il restera sur
l'enregistrement
le problème se pose si la clé n'est crée qu'après, au moment de la première
édition
là nous avons un enregistrement avec une clé vide encours jusqu'au post
commit
si plusieurs utilisateurs font de même la valeur renvoyer apres le commit de
la basse peut être n'importe quoi
sur un nombre d'utilisateur, j'ai trié ma table en ordre croissant et
j'appelle le dernier enregistrement

mais maintenant que je connais les guid,
je prendrais une clé a chaque nouvel enregistrement avant de le poster et je
pourrai filtré sur ma clé.
ainsi quoi qu'il arrive je reste sur la valeur de ma clé
si vraiment j'ai peur arret du pc, du serveur etc, tu peux mettre la cle
dans un fichier texte pour la recuper apres que l'application soir éteinte

enfin j'espère ne pas être trop nébuleux

handman

"BigGrizzly" <bigENLEVERCECIgrizzly@zoo-loETCAgique.org> a écrit dans le
message de news:fnvc03$dg3$1@sd-6836.dedibox.fr...
> Raphael Vivien a écrit :
>> "BigGrizzly" <bigENLEVERCECIgrizzly@zoo-loETCAgique.org> a écrit dans le
>> message de news: fnv8me$c0a$1@sd-6836.dedibox.fr...
>>> Raphael Vivien a écrit :
>>>> "F" <ff@ff.com> a écrit dans le message de news:
>>>> mn.0b427d8233f46c27.24174@ff.com...
>>>>>> ici bloquer la position de dts sur l'enregistrement courant
>>>>> bloquer le rafraichissement de l ecran , tu veux dires ???
>>>>>
>>>> Non, bloquer le dataset sur l'enregistrement en question.
>>>> Les traitements contenus dans les fonctions se rapportent à un élément
>>>> particulier pointé par le dataset, je dois être sur que
>>>> l'enregistrement courant du dataset reste le même.
>>>> Les fonctions peuvent lire ou écrire dans l'enregistrement courrant.
>>>> Bloquer le dataset n'est peut être pas la bonne méthode, est il
>>>> possible de créer un objet style 'Record' contenant les mêmes champs
>>>> que le dataset.
>>>> Le "record" est rempli avec les champs de l'enregistrement sélectionné.
>>>> Le "record" est passé en arguments var aux différentes fonctions.
>>>> A la fin le "record" est recopié dans le dataset à la place de
>>>> l'enregistrement d'origine.
>>>>
>>>> Le" record" pourrait être traité comme un dataset :
>>>> record.fieldvalues['NOM_DU_CHAMP'] :=
>>>>
>>>>
>>>> Ma question est comment faire cela le mieux possible ?
>>>>
>>>> R.V.
>>> C'est quoi que tu crains ?... Qu'il bouge tout seul une fois sélectionné
>>> par un Locate ?

>> Pas exactement tout seul, mais dans les fonctions de traitement une
>> erreure
>> de programmation peut conduire à un déplacement de l'enregistrement
>> courant.
>> Si j'ai un système qui me garanti de ne pas pouvoir faire l'erreur c'est
>> mieux.
>>
>> RV
>>
>>

> Tu pourrais par exemple : Lancer une exception ou un abort dans
> BeforeScroll ? Utiliser la propriété Filter pour ne conserver que
> l'enregistrement qui te convient ?
>
> Si vraiment tu veux t'equiquiner la vie, tu peux avoir un VirtualDataset
> qui contient seulement ton enregistrement...
>
> Ceci dit... Si tu penses que le dataset va bouger tout seul, vaut mieux
> cesser de suite de "croire" en l'informatique... Si je devais partir du
> postulat que mes datasets vont bouger alors qu'ils ne le sont pas
> supposés, j'avoue que ça m'augmenterait grandement mes heures de
> développement... ... ...


  Réponse avec citation
Vieux 04/02/2008, 11h35   #9
Raphael Vivien
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bloquer le déplacement sur un dataset

Merci pour vos différentes suggestions, finallement je retiens une solution
ultra simple :
le dataset est placé en private.
En public j'ai :
procedure DatasetEcrit(champ_: string; val_:variant);
function DatasetLit(champ_ : string): variant;

A l'extérieur de l'objet je ne peux que lire et écrire l'enregistrement
courant.
Avantage de cette méthode par rapport au dataset en public, elle oblige dans
le code à respecter la structure de l'application.

R.V.

"handman" <handman@tiscali.fr> a écrit dans le message de news:
fo3suk$iqe$1@sd-6836.dedibox.fr...
> filtre ton dataset sur une clé, même apres close open il restera sur
> l'enregistrement
> le problème se pose si la clé n'est crée qu'après, au moment de la
> première édition
> là nous avons un enregistrement avec une clé vide encours jusqu'au post
> commit
> si plusieurs utilisateurs font de même la valeur renvoyer apres le commit
> de la basse peut être n'importe quoi
> sur un nombre d'utilisateur, j'ai trié ma table en ordre croissant et
> j'appelle le dernier enregistrement
>
> mais maintenant que je connais les guid,
> je prendrais une clé a chaque nouvel enregistrement avant de le poster et
> je pourrai filtré sur ma clé.
> ainsi quoi qu'il arrive je reste sur la valeur de ma clé
> si vraiment j'ai peur arret du pc, du serveur etc, tu peux mettre la cle
> dans un fichier texte pour la recuper apres que l'application soir
> éteinte
>
> enfin j'espère ne pas être trop nébuleux
>
> handman
>
> "BigGrizzly" <bigENLEVERCECIgrizzly@zoo-loETCAgique.org> a écrit dans le
> message de news:fnvc03$dg3$1@sd-6836.dedibox.fr...
>> Raphael Vivien a écrit :
>>> "BigGrizzly" <bigENLEVERCECIgrizzly@zoo-loETCAgique.org> a écrit dans le
>>> message de news: fnv8me$c0a$1@sd-6836.dedibox.fr...
>>>> Raphael Vivien a écrit :
>>>>> "F" <ff@ff.com> a écrit dans le message de news:
>>>>> mn.0b427d8233f46c27.24174@ff.com...
>>>>>>> ici bloquer la position de dts sur l'enregistrement courant
>>>>>> bloquer le rafraichissement de l ecran , tu veux dires ???
>>>>>>
>>>>> Non, bloquer le dataset sur l'enregistrement en question.
>>>>> Les traitements contenus dans les fonctions se rapportent à un élément
>>>>> particulier pointé par le dataset, je dois être sur que
>>>>> l'enregistrement courant du dataset reste le même.
>>>>> Les fonctions peuvent lire ou écrire dans l'enregistrement courrant.
>>>>> Bloquer le dataset n'est peut être pas la bonne méthode, est il
>>>>> possible de créer un objet style 'Record' contenant les mêmes champs
>>>>> que le dataset.
>>>>> Le "record" est rempli avec les champs de l'enregistrement
>>>>> sélectionné.
>>>>> Le "record" est passé en arguments var aux différentes fonctions.
>>>>> A la fin le "record" est recopié dans le dataset à la place de
>>>>> l'enregistrement d'origine.
>>>>>
>>>>> Le" record" pourrait être traité comme un dataset :
>>>>> record.fieldvalues['NOM_DU_CHAMP'] :=
>>>>>
>>>>>
>>>>> Ma question est comment faire cela le mieux possible ?
>>>>>
>>>>> R.V.
>>>> C'est quoi que tu crains ?... Qu'il bouge tout seul une fois
>>>> sélectionné par un Locate ?
>>> Pas exactement tout seul, mais dans les fonctions de traitement une
>>> erreure
>>> de programmation peut conduire à un déplacement de l'enregistrement
>>> courant.
>>> Si j'ai un système qui me garanti de ne pas pouvoir faire l'erreur c'est
>>> mieux.
>>>
>>> RV
>>>
>>>

>> Tu pourrais par exemple : Lancer une exception ou un abort dans
>> BeforeScroll ? Utiliser la propriété Filter pour ne conserver que
>> l'enregistrement qui te convient ?
>>
>> Si vraiment tu veux t'equiquiner la vie, tu peux avoir un VirtualDataset
>> qui contient seulement ton enregistrement...
>>
>> Ceci dit... Si tu penses que le dataset va bouger tout seul, vaut mieux
>> cesser de suite de "croire" en l'informatique... Si je devais partir du
>> postulat que mes datasets vont bouger alors qu'ils ne le sont pas
>> supposés, j'avoue que ça m'augmenterait grandement mes heures de
>> développement... ... ...

>



  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 05h07.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,22326 seconds with 17 queries