Power Builder - Ayuda con DW Externo y Excel

   
Vista:

Ayuda con DW Externo y Excel

Publicado por Frank P. (50 intervenciones) el 16/12/2013 15:16:37
Hola compañeros, que tal!, aquí nuevamente con un problema en PB, les muestro el script de una función que transporta los registros de un DW externo a un archivo excel, hago uso de este script debido a que los archivos excel tienen un límite de 1048576 registros, pero el select genera un reporte a fin de año de casi 2kk de registros, además hago esto porque los usuarios necesitan esta Data en un archivo Access, y buscando y buscando la única manera que me resulta es importando un archivo excel a un nuevo archivo access mediante una DLL que hice en VB6, y es por tal que necesito generar ese archivo excel.

Cabe resaltar que el script funciona (en teoría), pero sólo me permite generar el archivo excel sólo cuando el reporte presenta 510000 registros, si quiero generar un excel desde 510001 registros a más, me sale un mensaje de error y el PB se cierra por completo, la verdad no sé a que se debe o es que este script no va y hay una manera mas productiva de ralizar lo que deseo, espero su gran apoyo y espero haber explicado bien, he aquí el script y adjunto la imagen del mensaje por si ayuda a solucionarlo:

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
oleobject myoleobject
integer rc, i, count, j, colcount, rep
string mydata, colname, colnames, ls_select, ls_dwsyntax, ls_err, el
 
rep = truncate(dw_2.rowcount()/1048575,0)
if mod(dw_2.rowcount(),1048575) > 0 then rep = rep +1
myoleobject = CREATE oleobject
rc = myoleobject.ConnectToNewObject("Excel.Application")
IF rc <> 0 THEN
MessageBox ( "Error", String ( rc ) )
Return
END IF
 
ls_select = string(dw_2.object.datawindow.table.select)
ls_dwsyntax = SQLCA.SyntaxFromSQL( ls_select, "Style(Type=tabular)", ls_err)
dw_3.Create (ls_dwsyntax, ls_err)
 
IF ls_err <> '' THEN
MessageBox ("error - Sintaxis", ls_err)
else
dw_3.SetTransObject (SQLCA)
end if
 
try
myoleobject.Application.Visible = false
myoleobject.Workbooks.Add()
 
for i = 1 to rep
  myoleobject.activeworkbook.sheets(i).name = as_tabla+string(i)//"reporte"+string(i)
  dw_3.reset()
  dw_2.RowsCopy(((1048574 * (i - 1)) + i), (1048575 * i), Primary!, dw_3, 1, Primary!)
  colcount = integer(dw_3.object.DataWindow.column.count)
  for j = 1 to colcount
   colname = dw_3.describe("#"+string(j)+".Name")
   choose case j
    case 1
     colnames = colname
    case else
     colnames = colnames + '~t' + colname
   end choose
  next
 
  colnames = colnames + "~r~n"
  mydata = dw_3.object.datawindow.data
  clipboard(colnames + mydata)
  myoleobject.activeworkbook.sheets(i).paste()
next
  //////
for i = 1 to myoleobject.activeworkbook.sheets.count()
  el = myoleobject.activeworkbook.sheets(i).name
  if  el <> as_tabla+string(i) then exit
next
 
if i = 2 then
  myoleobject.activeworkbook.sheets(2).Delete
  myoleobject.activeworkbook.sheets(2).Delete
elseif i = 3 then
  myoleobject.activeworkbook.sheets(3).Delete
end if
  //////
myoleobject.activeworkbook.saveas(as_destino)
myoleobject.activeworkbook.close()
myoleobject.Application.quit
myoleobject.DisconnectObject()
catch ( exception e )
MessageBox ( "Error", e.GetMessage() )
finally
Destroy myoleobject
end try

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Marco Antonio

Ayuda con DW Externo y Excel

Publicado por Marco Antonio (24 intervenciones) el 30/07/2014 06:10:39
Disculpen, pero viendo esta pregunta, y existiendo variadas alternativas, un idea sería, generar un SP para recuperar los datos, y generarlo directamente a un archivo Access, a través de sintaxis SQL, o bien, la otra alternativa, a través de un PIPELINE entre el Source(SQL) y Destino(ACCESS), de modo de que se ejecuta directo desde PB,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar