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 Fri 01 October 2004 12:08

Jean-francois Pele
Invité

Jointure table Oracle par programmation

Bonjour,

Sous document Arcmap, nous souhaitons depuis une base Oracle, faire une jointure avec la table attributaire d'un fichier de couches, de facon transparente pour l'utilisateur.
A savoir : etablir la connexion a l'ouverture du document, puis creer la jointure, le tout de facon programmee.
Actuellement, nous savons comment etablir la connexion en s'appuyant sur ADO, et en integrant une requete de selection ramenant que les colonnes dont nous souhaitons recuperer l'information (+ colonnes communes pour la jointure).
D'autre part, dans le document PDF « Exploring_Arcobjects », il est presente un exemple de jointure sur lequel nous nous appuierons.
Par contre, nous ne savons pas comment transferer les donnees depuis le recordset ADO (en faut-il un ?) vers une table de travail a recreer a chaque ouverture du document.
Quelles sont les pistes a explorer ? Quelles solutions preconisez vous ?

Merci
Jean-Francois Pele

 

#2 Fri 01 October 2004 13:59

Olivier GUYOT-DE-LA-POMMERAYE
Invité

Re: Jointure table Oracle par programmation

Bonjour,

Pour ma part je vois deux pistes possibles:

- creation d'une Vue Oracle reprenant le contenu de votre jointure par une ADODB.Command, puis ouverture comme une StandAloneTable dans la TOC d'ArcMap (Ultra simple avec ArcSDE, mais jamais fait avec OLEDB). Si vous devez faire des calculs ou des mises a jour sur cette table, alors il faudra ensuite faire un ExportTable depuis l'objet ITable instancie plus haut.

- creation d'une Vue Oracle reprenant le contenu de votre jointure par une ADODB.Command, puis ouverture avec ADO et parcours afin de mettre chaque ligne dans une nouvelle table DBF.

La seconde approche est peu etre plus simple que la premiere, mais risque d'etre plus lente.

Cordialement,

Olivier Guyot de La Pommeraye

 

#3 Fri 01 October 2004 15:43

Dcray
Invité

Re: Jointure table Oracle par programmation

Bonjour,
Voici un example ... Il etait creer pour ArcView 3.x, mais on peut faire les changements comme on veut.

Code:

'########################################################################
'Purpose: To preload Oracle data for coding access
'     Create tables dynamically at startup of project
'
'Note: This code was written for ArcView 3.x. It is called by the
'   startup procedure for the project.
'
'   In order to ensure the data is up to date, if the table exists
'    already in the project another script is called, prior to this,
'    to delete the table. The information loaded from ORACLE is then
'    JOINED, by running another script, which checks for joins, to delete
'    the existing join, and join this new table with the spatial data.
'########################################################################
'
theCon = SQLCon.Find( swis ) 'ORACLE Instance
sqlList = {}
sqlList = { sewr_str_prof_nonpipes , sewr_str_prof_pipes }
' ---Establish whether or not table exists, removes it so no duplicates exist
i = 0
while (i nil) then
else
tblConfirm = MsgBox.YesNo( Table [ +sqlString.UCASE+ ] missing from Project file. ++
Can always be executed later. Download the required information? +NL+NL+
*** (NOTE: Could take a while to download information) *** ,
Table [ +sqlString.UCASE+ ] missing ,
FALSE)
if (NOT tblConfirm) then
else

' ---Set up connection to SQL table with arguments passed from calling program
if (sqlString = sewr_str_prof_nonpipes ) then
anSQL = Select * from ++ sqlString ++ where swis.sewr_str_prof.ssc_str_cd 'PS'
theVTab=VTab.MakeSQL(theCon, anSQL)
myTable = Table.Make(theVtab)
av.GetProject.AddDoc(mytable)
mytable.setname(sqlString)
else
anSQL = Select * from ++ sqlString ++ where swis.sewr_str_prof.ssc_str_cd ='PS'
theVTab=VTab.MakeSQL(theCon, anSQL)
myTable = Table.Make(theVtab)
av.GetProject.AddDoc(mytable)
mytable.setname(sqlString)
end
end
end
i = i + 1
end

'/end of script

J'espere qu'il donne une piste a suivre.

Cordialement,

Duncan RAY

 

Pied de page des forums

Powered by FluxBB