Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DAO.Recordset, Fields(i).Caption
 
 автор: Lukas   (13.03.2009 в 01:09)   личное сообщение
 
 

Имею такую тормозилку:

Public Sub TestCaption()
    Dim rst As DAO.Recordset
    Dim i As Integer
    Dim strCaption As String
    
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM sqlListOrderCurrent WHERE False", , dbReadOnly)
    
    Debug.Print apiTimeGetTime, "Start"
    With rst
        For i = 1 To .Fields.Count - 1
'            strCaption = .Fields(i).Properties("Caption")  '48487000-Start  48488234-Finish    Итого: 1234 (до 1400)
            strCaption = .Fields(i).Name                    '48390500-Start  48390500-Finish    Итого: 0 (до 5)
        Next i
        .Close
    End With
    Set rst = Nothing
    Debug.Print apiTimeGetTime, "Finish"
End Sub


То есть, имена полей считываются за доли секунды, а подписи - с заметным тормозом.
Почему, более - менее понятно.

Вопрос: как-бы ускориться?

Ну не переходить-же опять на русские имена полей!

  Ответить  
 
 автор: Анатолий (Киев)   (13.03.2009 в 11:37)   личное сообщение
 
 

Возможно быстее будет цикл по Fields объекта QueryDef или ADODB.Recordset.
А где вам это нужно? Если запрос предназначен для экспорта, то укажите в нем псевдонимы для полей.

  Ответить  
 
 автор: Lukas   (13.03.2009 в 12:05)   личное сообщение
 
 


цикл по Fields объекта QueryDef


Пробовал, у меня получается медленнее, чем через rst.


ADODB.Recordset


Попробую.


укажите в нем псевдонимы для полей


Хороший вариант, но работы добавит. (Запросов много)

Спасибо Анатолий.

  Ответить  
 
 автор: Lukas   (13.03.2009 в 12:27)   личное сообщение
 
 

Применение алиасов не увеличило время по сравнению с именами полей, так что результат вполне приличный.
Еще раз спасибо.

  Ответить  
 
 автор: Lukas   (16.03.2009 в 02:47)   личное сообщение
 
 

Резюме:

Пошел по компромисному пути, подсмотренному у ......, - добавил табличку соответствия таблица+поле=подпись. Заодно добавил в нее несколько сервисных полей.
Суммарное время выполнения сократилось в 2.5 раза.

  Ответить  
 
 автор: KrukVN   (16.03.2009 в 11:12)   личное сообщение
 
 

мало ли...
если вдруг Вы обращаетесь к таблице на mssql сервере, то подписи можно узнать через ado.
как-то так:

    Set rs = con.Execute("SELECT TABLE_NAME, COLUMN_NAME, IsNull(c_descr.value,'') AS FDescr, DATA_TYPE " & _
        "FROM information_schema.Columns " & _
        "LEFT join sysproperties c_descr ON id = OBJECT_ID(TABLE_NAME) and smallid = ORDINAL_POSITION " & _
        "WHERE (TABLE_NAME IN (" & LstTbl & ")) AND (name='MS_Description')")

и работает быстро

  Ответить  
 
 автор: Lukas   (16.03.2009 в 13:32)   личное сообщение
 
 

Спасибо Валерий Николаевич, я пока палубные приложения терзаю.
На сервер только одним глазом из-за угла иногда посматриваю.
Так-что пока:
"Любимый сервер может спать спокойно..."

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList