#1 Tue 05 April 2005 15:58
- Virginie Girault
- Invité
Un update qui ne fonctionne pas
De: Virginie.Girault
Bonjour,
J'ai une table qui contient un code postal depart et un autre d'arrivee. Je rajoute des champs X1, Y1 et X2, Y2 respectivement pour le code postal 1 et le code postal 2 afin que ceux-ci recuperent les coordonnees des centroides de chaque code postaux. C'est le code postal de depart qui fait office d'objet de la table ....
Je reussi a remplir les champx X1 et Y1 par MB. C'est une toute autre affaire pour X2 et Y2. c'est la qu'intervient mon code que je soumet a vos lumieres....
Les declarations de variables :
Code:
Dim sCmd, Champ1, Champ2, Champ3, Champ4, ntbW as string Dim Alias_pipocd2, Alias_outil, FX1OUTIL, FY1OUTIL, Alias_XF2, Alias_YF2 as alias Dim cd1, cd2, XF1, YF1, XF2, YF2, count, rang, rpipo as integer
L'algo :
Code:
Fetch first from pipo Do while not EOT(pipo) 'prendre la variable CODGEO_B 'On recupere le ROWID de PIPO rpipo = pipo.ROWID Alias_pipocd2 = pipo & . & Name_c2 cd2 = Alias_pipocd2 Select * from outil where Val(Alias_outil)=cd2 cd1 = Val(Alias_outil) 'Le ROWID de OUTIL rang = outil.ROWID FX1OUTIL = outil & . & Champ1 XF1 = FX1OUTIL 'note XF1 : +XF1 FY1OUTIL = outil & . & Champ2 YF1 = FY1OUTIL Fetch first from outil Do While not EOT(outil) If cd2 = Val(Alias_outil) then XF2 = XF1 'note XF2 : +XF2 YF2 = YF1 'Ne copie pas les bonnes donnees !!! Update outil set X2 = XF2 where rang = rpipo Update outil set Y2 = YF2 where rang = rpipo Commit Table outil 'XF2=0 'YF2=0 End if Fetch next from outil loop 'STOP Fetch next from pipo loop
Et bien a la premiere ligne ou je fais allusion a Update, Mb signale que le resultat de l'expression n'est pas un nom de table ou de colonne
X2 est bien un champ de la table outil
...et outil est bien le nom de la table a modifier
XF2 est un entier qui recupere la variable qui sert justement a initialiser X2
Je ne comprend pas.... Si vous avez des idees, elles sont les bienvenues.... Merci beaucoup
#2 Tue 05 April 2005 17:03
- Francois Biju-Duval
- Invité
Re: Un update qui ne fonctionne pas
Admettant votre algorithme comme bon, je ne regarde que la syntaxe des
lignes Update.
_a._ rang est une zone dimensionnee. Je vous propose de la remplacer par
rowid.
_b._ Aussi, Si jamais MapBasic est susceptible sur XF2 , YF2 et rpipo
donnees par reference , je vous propose de taper une chaine de commande
pour ecrire en dur leurs valeurs :
Code:
Dim CommandString as string CommandString = Update outil set X2 = & XF2 & where rowid = & rpipo Run Command CommandString CommandString = Update outil set Y2 = & YF2 & where rowid = & rpipo Run Command CommandString
Pouvez-vous me tenir au courant. Merci.
#3 Wed 06 April 2005 11:06
- Virginie Girault
- Invité
Re: Un update qui ne fonctionne pas
De: V. Girault
Oh ! MERCI !
Formidable ! La solution b. fonctionne a merveille ! Il suffisait juste effectivement de constituer une chaine de commande et de l'executer.... MB est vraiment susceptible...
Quant au ROWID passe dans la variable rang, ca tient quand meme la route.
Merci beaucoup
#4 Wed 06 April 2005 11:06
- Virginie Girault
- Invité
Re: Un update qui ne fonctionne pas
De: V.GIRAULT
Bonjour,
J'apprends une nouvelle chose par rapport a ce que vous dites la, mais apres essai de la solution b. proposee par Francois Biju-Duval, je n'ai en fait passe ma commande Update que par une chaine de commande reconstituee et l'update s'execute parfaitement sur le test du ROWID de la table 1(rang) compare au ROWID de la table 2 (rpipo).
Ca fonctionne tres bien....
Donc, dans ce cas, on peut passer le ROWID par variable et effectivement, en passant la commande en language naturel MB, ca n'est pas possible.
Merci beaucoup.