#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