powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Медленное выполнение
3 сообщений из 3, страница 1 из 1
Медленное выполнение
    #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
Медленное выполнение
    #35147951
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял, это VB.BET. Попробуйте создать массив object (то что заменяет старый добрый Variant) и его отправить одной командой в ексель.
...
Рейтинг: 0 / 0
Медленное выполнение
    #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
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Медленное выполнение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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