Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с перекрестным запросом в vba 
:(
    Опции темы
dizzy1984
Дата 2.3.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: нет
Всего: 25



Пишу запрос к бд ms access из vba.
Такой код
Код

' Записываем данные платежей в отчет "Исходные данные"
Sub FillPaymentData(ws As Worksheet, LastColumn As Long, LastRow As Long)
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    If cn Is Nothing Then
        Exit Sub
    End If
    Dim rs As Object
    Set rs = CreateObject("ADODB.Recordset")
    If rs Is Nothing Then
        Exit Sub
    End If
        
    cn.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb); DefaultDir=C:/tmp; DBQ=C:/tmp/ptks.mdb"
    On Error GoTo Catch
    ' Подключаемся к пткс
    cn.Open
    Dim QueryString As String
    QueryString = _
             "TRANSFORM SUM(STH_PAYMENT.PAY_SUM) " _
           & "SELECT i.INS_REG_NUM, STH_PAYMENT.PAY_INSURER_NAME, PAYDC_KBK, pd.PAYDC_KBK as PAY_SUM_TOTAL " _
           & "FROM STH_PAY_DOCUMENT AS pd INNER JOIN (STH_PAYMENT INNER JOIN STH_INSURER AS i ON STH_PAYMENT.INS_ID=i.INS_ID) ON STH_PAYMENT.PAYDC_ID=pd.PAYDC_ID " _
           & "WHERE (((STH_PAYMENT.PAY_BANK_OUT)>=#2/12/2010# And (STH_PAYMENT.PAY_BANK_OUT)<=#2/17/2010#)) " _
           & "GROUP BY i.INS_REG_NUM, STH_PAYMENT.PAY_INSURER_NAME, pd.PAYDC_KBK " _
           & "PIVOT STH_PAY_DOCUMENT.KBK"
    ' Запрашиваем данные о платежах
    Call rs.Open(QueryString, cn, adOpenDynamic, adLockReadOnly, adCmdText)
    If rs.EOF Then
        Exit Sub
    End If
    
    '...

    rs.Close
    cn.Close
    
    Exit Sub
Catch:
    For Each ADOErr In cn.Errors
        Debug.Print ADOErr.Number
        Debug.Print ADOErr.Description
    Next
    If cn.State = adStateOpen Then
        cn.Close
    End If
    If rs.State = adStateOpen Then
        rs.Close
    End If
End Sub

В результате получается объект ADODB.Recordset с нужным количеством полей, но поля, получающиеся в результате инструкции PIVOT содержат пустые значения.
Аналогичный запрос из ms access отображается совершенно нормально.
Проблему решил так : убрал две инструкции ("TRANSFORM" и "PIVOT") и добавил дополнительное поле в GROUP BY. После чего обрабатывал получившиеся группы вручную. 
Что увеличило объем кода.
Вопрос - почему так происходит.
PM MAIL   Вверх
Akina
Дата 2.3.2010, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(dizzy1984 @  2.3.2010,  18:08 Найти цитируемый пост)
Аналогичный запрос из ms access отображается совершенно нормально.

Создай его как статический (в БД) и открой через ADO. Должно всё быть на местах.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.