
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:

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


0