c'est un petit code qui sert à afficher les données d'une table dans excel
j'ai en entrée le nom d'une table (:global.tab)
j'ai affiché dans une tree les differents champs de cette table('tree')
des champs de la table(que je ne connais pas forcement), un sera selectionné(:global.champ) auquel je devrais soumettre une condition avant d'afficher la table dans excel
pour avoir le nom des champs de la table je les ai stoqué dans un tableau(tab1)
voila le code que j ai pu faire(pour le transfert des donnees), il se bloque sur oo.tab1(i) et il me donne référence de variable "oo" non valide j'espere que qlqu'un saura m'aider
merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 PROCEDURE transfert IS
	 MyApplication    CLIENT_OLE2.OBJ_TYPE;
	 args  CLIENT_OLE2.LIST_TYPE;
 	 wbs   CLIENT_OLE2.OBJ_TYPE;    
   wb    CLIENT_OLE2.OBJ_TYPE; 
   wss   CLIENT_OLE2.OBJ_TYPE; 
   cell  CLIENT_OLE2.OBJ_TYPE;
   args1 CLIENT_OLE2.LIST_TYPE; 
 
   htree ITEM;
   node FTREE.NODE;
 
   TYPE TYP_IND_TAB is table of varchar(2) index by binary_integer ;
   tab1 TYP_IND_TAB;
 
   TYPE ref_cur IS REF CURSOR;
   c_cur ref_cur;
 
   tab varchar2(40);
   oo ref_cur;
 
 
  c1 number(4);
  c2 number(4);
  i  number(4);
 
 
BEGIN
 
   tab:=:global.tab;
 
    OPEN c_cur FOR
    SELECT * from tab
    where :global.champ=:T2; 
 
   htree := FIND_ITEM('tree');
   :global.node_count := FTREE.GET_TREE_PROPERTY(htree, FTREE.NODE_COUNT);
  for i in 1..:global.node_count loop
   	    node:= Ftree.Find_Tree_Node(htree, '');
   	    tab1(i):= FTREE.GET_TREE_NODE_PROPERTY('TREE',node,FTREE.NODE_label);
        Ftree.Delete_Tree_Node(htree,node);
 
   end loop ; 
 
 
 	MyApplication  := CLIENT_OLE2.CREATE_OBJ('Excel.Application');
	 CLIENT_OLE2.SET_PROPERTY(MyApplication , 'Visible',1);
	 wbs := CLIENT_OLE2.GET_OBJ_PROPERTY(MyApplication ,'Workbooks');
	 wb := CLIENT_OLE2.INVOKE_OBJ(wbs,'Add');
   wss := CLIENT_OLE2.GET_OBJ_PROPERTY(MyApplication ,'ActiveSheet');
 	CLIENT_OLE2.SET_PROPERTY(wss , 'Value','Sheet1');  
 
i:=1;
c1:=2;		
LOOP
 
 
c2:=1;
 
 
	fetch c_cur into oo;
	exit when c_cur%NOTFOUND;	
 
if c2=:global.node_count then exit;
end if;		
loop 
 
args := CLIENT_OLE2.CREATE_ARGLIST; 
 
CLIENT_OLE2.ADD_ARG(args, c1);
CLIENT_OLE2.ADD_ARG(args, c2);
cell := CLIENT_OLE2.GET_OBJ_PROPERTY(wss,'Cells', args);
CLIENT_OLE2.SET_PROPERTY(cell, 'Value', oo.tab1(i));
CLIENT_OLE2.DESTROY_ARGLIST(args);
CLIENT_ole2.release_obj(cell);
 
args := CLIENT_OLE2.CREATE_ARGLIST; 
CLIENT_OLE2.ADD_ARG(args, 1);
CLIENT_OLE2.ADD_ARG(args, c2);
cell := CLIENT_OLE2.GET_OBJ_PROPERTY(wss,'Cells', args);
CLIENT_OLE2.SET_PROPERTY(cell, 'Value',tab1(i));
CLIENT_OLE2.DESTROY_ARGLIST(args);
CLIENT_ole2.release_obj(cell);
 
c2:=c2+1;
i:=i+1;
END LOOP;
c1:=c1+1;
 
 
 
END LOOP;
 
CLOSE c_cur;
 
 
 
CLIENT_OLE2.DESTROY_ARGLIST(args);
 
args1 := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.ADD_ARG(args1,:global.filename);
CLIENT_OLE2.INVOKE(wb, 'SaveAs', args1);
CLIENT_OLE2.DESTROY_ARGLIST(args1);
--CLIENT_OLE2.INVOKE(wb,'CLOSE');
--CLIENT_ole2.invoke(MYApplication,'Quit');
 
CLIENT_ole2.release_obj(wb);
CLIENT_ole2.release_obj(wbs);
CLIENT_ole2.release_obj(wss);
CLIENT_ole2.release_obj(wss);
CLIENT_ole2.release_obj(wb);
 
CLIENT_OLE2.RELEASE_OBJ(MyApplication);
 
END;