Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Sql-запрос в Excel / 8 сообщений из 8, страница 1 из 1
10.09.2015, 12:14
    #39047885
oms86
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
Добрый день!

Есть 2 файла .xlsx. В первом исходные данные, во втором таблица, которую я пытаюсь заполнить на основании данных из первого. При каждом выполнении макроса должны добавляьться новые строки с данными из запроса. Данный запрос выдает 2 строки, но в excel добавляетс я только первая. Подскажите пожалуйста, где я ошибся:

Код: vbnet
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.
Sub RUB()
    Dim i As Long
    
    Dim sPath As String, strSQL As String, objCon As Object, objRS As Object
  sPath = "C:\test\xxx.xlsx"
Set objCon = CreateObject("ADODB.Connection")
objCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & sPath & ";" & _
"Extended Properties=""Excel 12.0;HDR=No"";"
   
    With Worksheets("Лист1")
    
        i = 3
        Do While .Cells(i, 1) <> Empty
            i = i + 1
        Loop
        .Rows(i).Insert
        .Range(.Cells(i - 1, 1), .Cells(i - 1, 18)).Copy
        .Range(.Cells(i, 1), .Cells(i, 18)).PasteSpecial xlPasteFormats


        'Application.CutCopyMode = False
   

strSQL = "SELECT " _
& "SUM([tt].F6) AS [Сумма], " _
& "[tt].F7 AS [Валюта] " _
& "FROM [sheet1$A2:R30000]
& "WHERE [tt].F8 = (SELECT MIN(f8) AS [F8] FROM (SELECT * FROM [sheet1$A2:R30000] WHERE f7 LIKE '%RUB%' OR F11 LIKE '%RUB%') As[t]) " _
& "AND [tt].F1 NOT LIKE '&ID&' " _
& "GROUP BY [tt].F7 "   

 Set objRS = objCon.Execute(strSQL)


.Cells(i, 1).Value = objRS.Fields("Сумма")
.Cells(i, 2).Value = objRS.Fields("Валюта")


     Application.CutCopyMode = False
        
         End With
    
    objCon.Close: Set objCon = Nothing
End Sub
...
Рейтинг: 0 / 0
10.09.2015, 12:20
    #39047892
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
Код: vbnet
1.
2.
.Cells(i, 1).Value = objRS.Fields("Сумма")
.Cells(i, 2).Value = objRS.Fields("Валюта")

вот добавляется одна строка. А где тут код добавления второй? Что вас удивляет?

PS. Посмотрите в сторону CopyFromRecordset - это работает гораздо ыстрее
...
Рейтинг: 0 / 0
10.09.2015, 12:45
    #39047924
oms86
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
Shocker.Pro ,
спасибо за совет!

Почитал про CopyFromRecordset. Везде написано, что надо указывать диапазон вставки. Сразу возник вопрос, а можно ли с помощью CopyFromRecordset указывать не диапазон, а конкретные столбцы?

P.S. попробовал вставить через
Код: vbnet
1.
Range(.Cells(i, 1), .Cells(i, 6)).CopyFromRecordset objRS



последние 2 параметра преобразовываются из числа в дату, при том что в ьаблице данные столбцы указаны как числовые...
...
Рейтинг: 0 / 0
10.09.2015, 14:10
    #39048051
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
oms862 параметрачто такое параметр в вашем случае? может быть поля? Последние два поля - они же первые, их всего два у вас в запросе.oms86в ьаблицев какой таблице, в экселевской или в таблице БД?
...
Рейтинг: 0 / 0
10.09.2015, 14:30
    #39048101
oms86
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
извиняюсь, если не совсем однозначно выразился :)

В итоговом запросе у меня не 2, а 6 полей : число, текст, дата, дата, число, число.
На БД данный запрос отрабатывает корректно. В первоначальном варианте с
Код: vbnet
1.
.Cells(i, 1).Value = objRS.Fields("Имя поля") 


формат полей так же не нарушался при вставке строки в xlsx.
При вставке строки с помощью
Код: vbnet
1.
CopyFromRecordset



Последние 2 поля (числа) при вставке в xslx отображаются как даты со временем (07.03.1900 16:19:12 и т.д.)...
Формат данных полей перед вставкой указан как числовой...
...
Рейтинг: 0 / 0
10.09.2015, 14:35
    #39048111
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
oms86Последние 2 поля (числа)сдается мне, что это не числа, а текст, форматированный с ТОЧКОЙ в качестве десятичного разделителя.

Выкладывайте тестовые файлы
...
Рейтинг: 0 / 0
10.09.2015, 15:01
    #39048163
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
Shocker.Pro,
Похоже, проблема не нова: CopyFromRecordset corrupts cell formats for the whole excel workbook
...
Рейтинг: 0 / 0
10.09.2015, 16:00
    #39048260
oms86
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql-запрос в Excel
Пока обезличивал данные, помогла ссылка hclubmk :)

вставил

Код: vbnet
1.
2.
Columns(5).NumberFormat = "0.0000"
Columns(6).NumberFormat = "0.0000"



только не до, а после того как данные вставляются в строки excel. Формат полей меняется на нужный.

Спасибо всем!!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Sql-запрос в Excel / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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