Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Медленное выполнение / 3 сообщений из 3, страница 1 из 1
21.02.2008, 15:16
    #35147892
sp_eedo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное выполнение
Коллеги подскажите в чем может быть причина медленного выполнения всей апликухи?
запросы SQL используемые здесь выполняются по минуте,
все вместе жа выполняется минут 40.

--------------------------------------------------------------
Код: plaintext
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.
    Sub Main()
        Dim Root As String
        Root = "C:\Crypto\Crypto\"
        'Root = "C:\Crypto\Crypto\"
        Dim ExcelObj As Excel.Application = CreateObject("Excel.Application")
        Dim ExcelBook As Excel.Workbook = ExcelObj.Workbooks.Open(Root + "pat.xls")
        '-------Выгрузка отчета--------------------
        ExcelBook.Worksheets().Item( 2 ).Cells.Range("A4", "IV65536").ClearContents()
        Dim con As Object
        Dim rst As Object
        Dim Command1 As String
        Dim Command2 As String
        con = CreateObject("ADODB.Connection")
        rst = CreateObject("ADODB.Recordset")
        con.ConnectionTimeout =  0 
        con.CommandTimeout =  0 
        con.Open("Data Source=xxx;User Id=xxx;Password=xxx;QueryTimeout=0")
        '============SQL =========
        Command1 = "use reportdb SELECT * from CMP0513_GE_CONTACTS"
        '=========================
        rst = con.Execute(Command1)
        Dim Kolonka
        Dim i As Integer

        i =  2 
        Kolonka =  1 
        Do Until rst.EOF
            Kolonka =  1 
            Do Until Kolonka > rst.Fields.Count
                ExcelBook.Worksheets().Item( 2 ).Cells(i, Kolonka).Value = rst.Fields(Kolonka -  1 ).value.ToString
                Kolonka = Kolonka +  1 
            Loop
            i = i +  1 
            rst.MoveNext()
        Loop

        Try
            rst.Close()
            con.Close()
        Catch ex As Exception
        End Try
        ExcelBook.Worksheets().Item( 1 ).Cells.Range("A4", "IV65536").ClearContents()
        con = CreateObject("ADODB.Connection")
        rst = CreateObject("ADODB.Recordset")
        con.ConnectionTimeout =  0 
        con.CommandTimeout =  0 
        con.Open("Data Source=xxx;User Id=xxx;Password=xxx;QueryTimeout=0")
        '============SQL =========
        Command1 = "use reportdb SELECT * from GE_STATISTIC ORDER BY Дата "
        '=========================
        rst = con.Execute(Command1)
        i =  4 
        Do Until rst.EOF
            Kolonka =  1 
            Do Until Kolonka > rst.Fields.Count
                ExcelBook.Worksheets().Item( 1 ).Cells(i, Kolonka).Value = rst.Fields(Kolonka -  1 ).value.ToString
                Kolonka = Kolonka +  1 
            Loop
            i = i +  1 
            rst.MoveNext()
        Loop

        Try
            rst.Close()
            con.Close()
        Catch ex As Exception
        End Try
        '------------------------------------------
        Dim ExcelFileName As String
        ExcelFileName = Now().Day.ToString + "." + Now().Month.ToString + "." + Now().Year.ToString
        ExcelBook.SaveAs(Root + "OUT1\" + ExcelFileName + ".xls")
        ExcelBook.SaveAs(Root + "Archive\" + ExcelFileName + ".xls")
        Shell(Root + "out.bat")
        ExcelBook.Close()
        ExcelObj.Quit()
        ExcelBook = Nothing
        ExcelObj = Nothing
    End Sub
...
Рейтинг: 0 / 0
21.02.2008, 15:26
    #35147951
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное выполнение
Как я понял, это VB.BET. Попробуйте создать массив object (то что заменяет старый добрый Variant) и его отправить одной командой в ексель.
...
Рейтинг: 0 / 0
21.02.2008, 15:53
    #35148096
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное выполнение
на первый взгляд

1) зачем заново создавать объекты повторно
Код: plaintext
1.
2.
3.
4.
con = CreateObject("ADODB.Connection")
rst = CreateObject("ADODB.Recordset")
con.ConnectionTimeout =  0 
con.CommandTimeout =  0 
con.Open("Data Source=xxx;User Id=xxx;Password=xxx;QueryTimeout=0")
сделайте один раз и работайте

2) выгружайте сразу рекордсет, зачем бежать по столбцам и строкам?
Код: plaintext
1.
2.
ExcelBook.Worksheets().Item( 2 ).Range(i, Kolonka).CopyFromRecordset rst
...
ExcelBook.Worksheets().Item( 1 ).Range(i, Kolonka).CopyFromRecordset rst


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Медленное выполнение / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]