Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сводная табл. в Excel на основе рекордсета / 25 сообщений из 28, страница 1 из 2
09.08.2004, 12:56:44
    #32640743
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Открываю рекордсет. Дальше идет сводная. в SourceData:= что писать. Писал просто имя рекордсета ругается.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDAORecordSet, _
    SourceData:="?????").CreatePivotTable TableDestination:="", _
    TableName:="СводнаяТаблица1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells( 5 ,  1 )
    ActiveSheet.Cells( 5 ,  1 ).Select
    ActiveSheet.PivotTables("СводнаяТаблица1").SmallGrid = False
    ActiveSheet.PivotTables("СводнаяТаблица1").AddFields RowFields:=Array( _
        "Группа", "Товар"), ColumnFields:="Дата", PageFields:="Марка"
    ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Заявка").Orientation = _
        xlDataField
...
Рейтинг: 0 / 0
09.08.2004, 13:39:43
    #32640860
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
люди помогите кто-нибудь или хотя бы ссылку дайте. На форуме по поиску ничего на эту тему не нашел.
...
Рейтинг: 0 / 0
09.08.2004, 13:54:40
    #32640902
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
SourceData Property

Returns the data source for the PivotTable report, as shown in the following table. Read-write Variant.

Data source Return value
Microsoft Excel list or database The cell reference, as text.
External data source An array. Each row consists of an SQL connection string with the remaining elements as the query string, broken down into 255-character segments.
Multiple consolidation ranges A two-dimensional array. Each row consists of a reference and its associated page field items.
Another PivotTable report One of the above three kinds of information.

Remarks
This property is not available for OLE DB data sources.

Example
Assume that you used an external data source to create a PivotTable report on Sheet1. This example inserts the SQL connection string and query string into a new worksheet.

Set newSheet = ActiveWorkbook.Worksheets.Add
sdArray = Worksheets("Sheet1").UsedRange.PivotTable.SourceData
For i = LBound(sdArray) To UBound(sdArray)
newSheet.Cells(i, 1) = sdArray(i)
Next i
...
Рейтинг: 0 / 0
09.08.2004, 14:02:24
    #32640925
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
т.е это не то что тебе нужно.
Спроси как надо на форуме по OLAP.
...
Рейтинг: 0 / 0
09.08.2004, 14:07:34
    #32640944
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
родной
это делается не так

или
ты создаешь в Access форму с лежащей на ней сводной таблицей (вкладка формы - новая - из списка мастеров выбираешь сводную)
и потом просто жмакаешь по табличке этой ОБНОВИТЬ и радуешься
при этом все у тебя лежит в базе Access

или
ты руками перекачиваешь сначала на специально отведенный для этого лист в ОТДЕЛЬНОМ от базы mdb файлике Excel весь свой рекордсет
а потом командуешь Excel обновить твою таблу
когда будешь командовать, не забудь, что диапазон выгруженных
данных может быть БОЛЬШЕ, чем ты задавал при разработке
...
Рейтинг: 0 / 0
09.08.2004, 14:09:25
    #32640949
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
PavelSourceData Property

Returns the data source for the PivotTable report, as shown in the following table. Read-write Variant.

Data source Return value
Microsoft Excel list or database The cell reference, as text.
External data source An array. Each row consists of an SQL connection string with the remaining elements as the query string, broken down into 255-character segments.
Multiple consolidation ranges A two-dimensional array. Each row consists of a reference and its associated page field items.
Another PivotTable report One of the above three kinds of information.

Remarks
This property is not available for OLE DB data sources.

Example
Assume that you used an external data source to create a PivotTable report on Sheet1. This example inserts the SQL connection string and query string into a new worksheet.

Set newSheet = ActiveWorkbook.Worksheets.Add
sdArray = Worksheets("Sheet1").UsedRange.PivotTable.SourceData
For i = LBound(sdArray) To UBound(sdArray)
newSheet.Cells(i, 1) = sdArray(i)
Next i
спасибо что откликнулся. Правда с английским у меня туго. пример посмотрел, но если не ошибаюсь там говориться о данных с другого листа Excel. У меня же рекордсет берет данные из базы и вставляет в Excel. Тут еще порылся и понял, что код в качестве примера выгрузил не правильный (он подходит для выгрузки данных с другого листа). Для рекордсета будет немного по другому. Сейчас буду рекордсет засовывать в массив и на основе массива делать сводную. Подскажи может чего получше есть?
...
Рейтинг: 0 / 0
09.08.2004, 14:11:45
    #32640960
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Alexus12или
ты руками перекачиваешь сначала на специально отведенный для этого лист в ОТДЕЛЬНОМ от базы mdb файлике Excel весь свой рекордсет
а потом командуешь Excel обновить твою таблу
когда будешь командовать, не забудь, что диапазон выгруженных
данных может быть БОЛЬШЕ, чем ты задавал при разработке

А без перекачки на другой лист не ужто не реально? Как то через одно место получается
...
Рейтинг: 0 / 0
09.08.2004, 14:13:01
    #32640968
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
а без перекачки - как билли прописал
(формы - сводная таблица)
...
Рейтинг: 0 / 0
09.08.2004, 14:21:35
    #32640998
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Да я думаю можно и программно, только гемора больше.
Посмотри метод PivotTableWizard.
...
Рейтинг: 0 / 0
09.08.2004, 14:31:36
    #32641028
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
PavelДа я думаю можно и программно, только гемора больше.
Посмотри метод PivotTableWizard.
Я тут просто воспользовался авт. написанием макроса в Excel и он мне дал следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Макрос5()
    With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
        .Connection = Array(Array( _
        "ODBC;DSN=База данных MS Access;DBQ=C:\Work\База\001.mdb;DefaultDir=C:\Work\База;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTim" _
        ), Array("eout=5;PWD=Вася;UID=admin;"))
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT Месяц.Область, Месяц.Фирма, Месяц.Марка, Месяц.Группа, Месяц.Товар, Месяц.Дата, Месяц.`Sum-Продано_кг`, Месяц.`Sum-Продано_руб`" & Chr( 13 ) & "" & Chr( 10 ) & "FROM `C:\Work\База\001`.Месяц Месяц" _
        )
        .CreatePivotTable TableDestination:=Range("A3"), TableName:= _
        "СводнаяТаблица2"
    End With
    ActiveSheet.PivotTables("СводнаяТаблица2").SmallGrid = ЛОЖЬ
    ActiveSheet.PivotTables("СводнаяТаблица2").AddFields RowFields:=Array( _
        "Группа", "Товар"), ColumnFields:="Дата", PageFields:="Марка"
    ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Sum-Продано_кг"). _
        Orientation = xlDataField
End Sub
И я так думаю, что если за место ODBC и прочего пропишу рекордсет, то по уму все должно работать
...
Рейтинг: 0 / 0
09.08.2004, 15:03:01
    #32641104
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
если вместо ODBC - ничего не заработает
поелику Excel одбцшным драйвером в Access ходит
что и видишь ты макрос записав

подправь SELECT на нужный тебе - и счастлив будешь
...
Рейтинг: 0 / 0
09.08.2004, 15:38:59
    #32641187
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Alexus12если вместо ODBC - ничего не заработает
поелику Excel одбцшным драйвером в Access ходит
что и видишь ты макрос записав

подправь SELECT на нужный тебе - и счастлив будешь
веришь нет, но нашел в хэлпе вариант с рекордсетом, только рекорсет ADODB, а мне нужно DAO. И так его пробовал и сяк, а нифига не получается. Может поможете?
Хэлп:
Код: 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.
Dim cnnConn As ADODB.Connection
Dim rstRecordset As ADODB.Recordset
Dim cmdCommand As ADODB.Command

 ' Open the connection. 
Set cnnConn = New ADODB.Connection
With cnnConn
    .ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0"
    .Open "C:\perfdate\record.mdb"
End With

 ' Set the command text. 
Set cmdCommand = New ADODB.Command
Set cmdCommand.ActiveConnection = cnnConn
With cmdCommand
    .CommandText = "Select Speed, Pressure, Time From DynoRun"
    .CommandType = adCmdText
    .Execute
End With

 ' Open the recordset. 
Set rstRecordset = New ADODB.Recordset
Set rstRecordset.ActiveConnection = cnnConn
rstRecordset.Open cmdCommand

 ' Create a PivotTable cache and report. 
Set objPivotCache = ActiveWorkbook.PivotCaches.Add( _
    SourceType:=xlExternal)
Set objPivotCache.Recordset = rstRecordset
With objPivotCache
    .CreatePivotTable TableDestination:=Range("A3"), _
        TableName:="Performance"
End With

With ActiveSheet.PivotTables("Performance")
    .SmallGrid = False
    With .PivotFields("Pressure")
        .Orientation = xlRowField
        .Position =  1 
    End With
    With .PivotFields("Speed")
        .Orientation = xlColumnField
        .Position =  1 
    End With
    With .PivotFields("Time")
        .Orientation = xlDataField
        .Position =  1 
    End With
End With

 ' Close the connections and clean up. 
cnnConn.Close
Set cmdCommand = Nothing
Set rstRecordSet = Nothing
Set cnnConn = Nothing
Мой рекордсет:
Код: 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.
Sub Макрос3()
    
    Dim dbAccess As Database
    Dim TestTable As DAO.Recordset
    Dim Sql_String As String
    Dim a, b As Date
    Dim c As Integer
    
    On Error GoTo ErrorsDB
    
    Set dbAccess = OpenDatabase("\\ws228\A_Milk\База\0030.mdb")
    Sql_String = "SELECT [003].Дата, [2_Группы].Группа, [3_ Марки].Марка, [2_Ассортимент1].Товар, Sum([003].Продано_кг) AS Заявка" & _
    " FROM [3_ Марки] INNER JOIN (2_Группы INNER JOIN (2_Виды INNER JOIN ((2_Ассортимент INNER JOIN 2_Ассортимент1 ON [2_Ассортимент].Ключ = [2_Ассортимент1].Ключ) INNER JOIN 003 ON [2_Ассортимент1].Ключ = [003].Ассортимент) ON [2_Виды].Ключ = [2_Ассортимент].Вид) ON [2_Группы].Ключ = [2_Виды].Группа) ON [3_ Марки].Ключ = [2_Ассортимент].Марка" & _
    " GROUP BY [003].Дата, [2_Группы].Группа, [3_ Марки].Марка, [2_Ассортимент1].Товар;"

    Set TestTable = dbAccess.OpenRecordset(Sql_String)
    
    If (TestTable.RecordCount >  0 ) Then
        Cells( 2 ,  1 ).CopyFromRecordset TestTable
        intFildCount = TestTable.Fields.Count -  1 
        For intI =  0  To intFildCount
        Cells( 1 , intI +  1 ).Value = TestTable.Fields(intI).Name
        Next intI
    Else: MsgBox "Not Found"
    End If

    TestTable.Close
    GoTo Ends
        
ErrorsDB:
    MsgBox "Произошла ошибка"
Ends:

End Sub

...
Рейтинг: 0 / 0
09.08.2004, 16:13:26
    #32641280
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
...
Рейтинг: 0 / 0
09.08.2004, 16:30:49
    #32641316
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Alexus12чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
дело в том, что смотрю я на этот пример, ну уж больно он большой. Уверен на 99,9%, что его можно укоротить чуть ли не вдвое. А в связи с тем, что я только начинающий хотелось бы начинать писать кратко, но точно. а с ADO просто не работал. начал писать рекорсеты с DAO, так и пишу.
...
Рейтинг: 0 / 0
09.08.2004, 17:38:45
    #32641457
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Люди ну помогите пожалуйста засунуть этот DAO.Recordset напрямую в PivotTable в Excell без всяких побочных выгрузок. Ведь на сто процентов уверен, что это реально
...
Рейтинг: 0 / 0
09.08.2004, 18:45:45
    #32641608
v-metallic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
К сему цепляю мдб-шник с реально работающим модулем експорта в ексель

Влад
...
Рейтинг: 0 / 0
10.08.2004, 09:00:58
    #32641961
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
v-metallicК сему цепляю мдб-шник с реально работающим модулем експорта в ексель

Влад
спасибо конечно, но где вставка в сводную таблицу? Экспортировать в Excel при помощи рекордсета для меня проблем не составляет
...
Рейтинг: 0 / 0
10.08.2004, 09:49:09
    #32642054
v-metallic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Свводную таблицу вы формируете а Аксессе. Вернее, запрос.
Приведенный мною пример создает Ексель-файл с нуля, а данные в него вставляются из рекордсета.
Возможно вам следовало бы сделать аналогично: создаете Ексель файл и вставляете в него данные из рекордсета, который, в свою очередь, сделан на базе т.н. "сводного" запроса.
...
Рейтинг: 0 / 0
10.08.2004, 10:01:25
    #32642080
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
v-metallicСвводную таблицу вы формируете а Аксессе. Вернее, запрос.
Приведенный мною пример создает Ексель-файл с нуля, а данные в него вставляются из рекордсета.
Возможно вам следовало бы сделать аналогично: создаете Ексель файл и вставляете в него данные из рекордсета, который, в свою очередь, сделан на базе т.н. "сводного" запроса.
1.Что есть "сводный" запрос? Обыкновенный запрос в базе данных?
2.Мне нужна выгрузка DAO.Recordset напрямую в PivotTable(Сводная таблица)
3.Создать из базы xls файл, выгрузить в него рекордсет на основе запроса в базе НЕ ПРОБЛЕМА.
ПРОБЛЕМА В PivotTable
...
Рейтинг: 0 / 0
10.08.2004, 10:38:37
    #32642157
гостик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
NikP Alexus12чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
дело в том, что смотрю я на этот пример, ну уж больно он большой. Уверен на 99,9%, что его можно укоротить чуть ли не вдвое. А в связи с тем, что я только начинающий хотелось бы начинать писать кратко, но точно. а с ADO просто не работал. начал писать рекорсеты с DAO, так и пишу.

- хочу собрать мерседес, что нужно?
- запчасти от мерседеса
- есть запчасти от запорiжца, хочу из них, как?
- сходить на завод мерседес и переплавить на его запчасти, больше никак
...
Рейтинг: 0 / 0
10.08.2004, 10:40:53
    #32642166
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
гостик NikP Alexus12чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
дело в том, что смотрю я на этот пример, ну уж больно он большой. Уверен на 99,9%, что его можно укоротить чуть ли не вдвое. А в связи с тем, что я только начинающий хотелось бы начинать писать кратко, но точно. а с ADO просто не работал. начал писать рекорсеты с DAO, так и пишу.

- хочу собрать мерседес, что нужно?
- запчасти от мерседеса
- есть запчасти от запорiжца, хочу из них, как?
- сходить на завод мерседес и переплавить на его запчасти, больше никак
А по конкретнее?
...
Рейтинг: 0 / 0
10.08.2004, 13:11:03
    #32642541
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Ау! Help me please
...
Рейтинг: 0 / 0
10.08.2004, 13:48:10
    #32642637
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
1. ну не занимаются здесь люди сводными таблицами Ёксель-мокселя, что ты хочешь?

2. как можно сделать - тебе подсказали многожды
и даже сам ты нашел пример
но почему-то хочешь сделать все старьем-DAO вместо свежака ADO
это как вылезти сейчас в DOS Shell запускать mkdir
вместо аналога из VBA - для мдбшки пройдет, а подрастешь - упрешься в свой ДАОсизм как в ворота

3. ты пробовал заменить SELECT в макросе, записанном тобой же
(где ODBC в коннекте прописан?)
не пробовал?
думаешь, за тебя попробуют?
тогда смотри п.1
...
Рейтинг: 0 / 0
10.08.2004, 14:05:07
    #32642688
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
Alexus121. ну не занимаются здесь люди сводными таблицами Ёксель-мокселя, что ты хочешь?

2. как можно сделать - тебе подсказали многожды
и даже сам ты нашел пример
но почему-то хочешь сделать все старьем-DAO вместо свежака ADO
это как вылезти сейчас в DOS Shell запускать mkdir
вместо аналога из VBA - для мдбшки пройдет, а подрастешь - упрешься в свой ДАОсизм как в ворота

3. ты пробовал заменить SELECT в макросе, записанном тобой же
(где ODBC в коннекте прописан?)
не пробовал?
думаешь, за тебя попробуют?
тогда смотри п.1
Ну шо могу сказать. Спасибо на добром слове. Хотя бы за то, что надежды развеял. А то все жду чего-то жду.
...
Рейтинг: 0 / 0
11.08.2004, 12:35:53
    #32644328
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная табл. в Excel на основе рекордсета
С ADODB пример работает и все делает нормально. Но возник вопрос. Почему если rstRecordset
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 ' Open the recordset. 
Set rstRecordset = New ADODB.Recordset
Set rstRecordset.ActiveConnection = cnnConn
rstRecordset.Open cmdCommand

 ' Create a PivotTable cache and report. 
Set objPivotCache = ActiveWorkbook.PivotCaches.Add( _
    SourceType:=xlExternal)
Set objPivotCache.Recordset = rstRecordset
With objPivotCache
    .CreatePivotTable TableDestination:=Range("A7"), _
        TableName:="СводнаяТаблица1"
End With
Заменяю на TestTable
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Set TestTable = dbAccess.OpenRecordset(Sql_String)
Set objPivotCache = ActiveWorkbook.PivotCaches.Add( _
    SourceType:=xlExternal)
Set objPivotCache.Recordset = TestTable
With objPivotCache
    .CreatePivotTable TableDestination:=Range("A7"), _
        TableName:="СводнаяТаблица1"
End With
Он ругается
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сводная табл. в Excel на основе рекордсета / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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