banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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.

 

Pied de page des forums

Powered by FluxBB