#1 Thu 12 April 2001 22:31
- Vvestri
- Invité
Astérisque et SQL
Grenoble, le 12 avril 2001
Bonjour a tous,
J'utilise frequemment les requetes SQL avec des jointures de tables et
j'aurais une demande a leur propos.
Je possede une Table A (aucune carto associee) contenant une dixaine de
champs, une table B (carto associee) contenant 2 champs. Ces derniers ce
retrouvent a l'identique dans la table B et servent a la jointure.
Actuellement j'effectue une requete SQL avec laissant un asterisque dans la
zone colonnes afin de recuperer toutes les informations. Cependant
aujourd'hui je souhaiterai recuperer uniquement les champs de la table A
puisque ceux de la table B s'y trouvent deja.
Je precise que ce type de requete est developpe dans MapBasic et qu'a aucun
moment je ne sais de combien la table A se compose de champs alors que la
table B n'aura toujours que 2 champs.
Quelqu'un a t il deja eu a faire a ce genre de problematique ?
Merci d'avance pour toutes vos idees
Veronique VESTRI
Ingenieur SIG
vvestri@ atmo-rhonealpes.org
#2 Tue 17 April 2001 22:30
- Jacques Paris
- Invité
Re: Astérisque et SQL
Bonjour,
J’etais en visite a Toronto pour une conference MapInfo ce qui explique le
retard a vous repondre alors que n’ai encore vu aucune reponse sur
mapinfo_fr.
J’ai identifie trois solutions possibles a votre probleme. La premiere est
entierement manuelle : laissez faire (* dans la boite colonnes) et modifier
la structure pour faire sauter les deux colonnes incriminees. La deuxieme
implique de programmer la « destruction » avec « Alter Table table_resultat
Drop colonne1, colonne2 », colonneX est le nom de la colonne X de B
prolonge » par _2 (il vaudrait mieux verifier la facon precise avec
laquelle MI renomme une colonne dont le nom existe deja)
La troisieme est pure programmation et consiste a recreer un enonce qui
serait de la forme « select tableB.col1, tableB.col2, … where… ». pour cela
il faut connaitre ncols (nombre de colonnes dans table B, avec
tableinfo(tableB, tab_info_ncols) ) et en construisant l’enonce comme une
chaine : (tableB est une variable caractere du nom de la table)
dim comm as string
comm=”select “+tableB +” “ +tableB+”.col1”
for I = 2 to ncols
comm=comm+”, ”+tableB+”.col”+str(I)
next
comm=comm + “ where….”
run command comm.
Dans votre cas, je favoriserais la deuxieme solution, la plus compacte et
certainement la plus rapide, puisque que les colonnes a supprimer sont
toujours les memes.
En ce qui concerne l’utilisation du Control Check Box, il faut bien s’
assurer d’utiliser « INTO Icheck » ou Icheck est dimensionne comme une
variable logique. Par la suite, il devrait suffire de faire « If Icheck
then …. operations a faire si l’option est choisie .. end if»
Jacques PARIS
jacques@ paris-pc-gis.com