powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Sql-запрос в Excel
8 сообщений из 8, страница 1 из 1
Sql-запрос в Excel
    #39047885
oms86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть 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
Sql-запрос в Excel
    #39047892
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
.Cells(i, 1).Value = objRS.Fields("Сумма")
.Cells(i, 2).Value = objRS.Fields("Валюта")

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

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

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

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



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

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


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



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

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

вставил

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



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

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


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