Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1024to1028
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PivotCache

PivotCache
25.11.2008 17:12:39
Mario
Hallo Leute,
ich wechsle die Datenbank meines PivotCache mit folgenden code:
ActiveWorkbook.PivotCaches(lngcache_index).CommandText=strsql
'Ermittlung SQL
strsql = "SELECT Column " _
& "FROM " & strdb_path & strdb_name & ".tmp_table tmp_table"
'Ermittlung cacheindex
lngcache_index = ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table).CacheIndex
Ziel ist es die Datenbank im Hintergrund gegen eine andere auszutauschen, die die selbe Struktur aber einen anderen Speicherort am Fileserver hat.
Wenn ich nun den Pfad in strdb_path ändere, sagt mir Excel er kann den Pfad nicht von und bringt mir dann den ursprünglich zugewiesenen Pfad in der Fehlermeldung. Sehe ich mir hingegen den Wert der Variable strdb_path im Debugger an, hat dieser bereits den neuen Pfad.
Kann mir hier bitte wer weiterhelfen.
danke
lg Mario

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PivotCache
26.11.2008 13:05:19
fcs
Hallo Mario,
mit folgender Syntax hat es bei mir funktioniert.
Dabei wird am Dateinamen die Erweiterung weggelassen und Pfad + Name müssen noch in spezielle Anführungszeichen gesetzt werden.
Gruß
Franz

'SQL String
'1. Datenquelle
strdb_path = "\\S040A0025\S014123$\"
strdb_name = "Test_2008-11-26" 'Dateiname "Test_2008-11-26.mdb" ohne Dateiendung
strsql = "SELECT Tabelle1.Feld01, Tabelle1.Feld02" _
& " FROM `" & strdb_path & strdb_name & "`.Tabelle1 Tabelle1" _
& " WHERE (Tabelle1.Feld01 Like '%B%') OR (Tabelle1.Feld01 Like 'C')" _
& " ORDER BY Tabelle1.Feld01"
'Datenquelle Pivottabelle aktualisieren
ActiveWorkbook.PivotCaches(lngcache_index).CommandText = strsql


Anzeige
AW: PivotCache
27.11.2008 13:46:00
Mario
Leider hat das nicht funktioniert. Ich habe im Forum eine alternative Lösung gefunden. Sie sollte jedoch anstelle eines neuen Pivot Tables generieren die Daten einen bestehenden Pivot Table übergeben. Nur wie?
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
danke
lg Mario
Anzeige
AW: PivotCache
27.11.2008 15:03:27
fcs
Hallo Mario,
mit ADODB und den dann erforderlichen Parametern kenn ich mich leider nicht aus.
Bei funktionieren jedenfalls die beiden nachfolgenden Beispiele.
im 1. beispiel habe ich per Makrorecorder externe Daten aus ACCESS importiert und mit dem Assisstenten dann eine Pivot-Tabelle erstellt. Den aufgezeichneten Code hab ich dann entsprechend umgesárbeitte.
Beim 2. Code hab ich via externe daten importieren eine Abrage erstellt und dann zum schluss im Assistenten den Pivotbericht erstellt.
Arbeitetz man die Makros im Schrittmodus ab, dann sieht man wie sich die Daten im Picot ändern, wenn die Datenquelle gewechselt wird.
Gruß
Franz

Sub DB_Pivot2()
'externe Datenquelle eines Excel-Pivottabellen-Berichtes via SQL anpassen
'Microsoft Office 2003 Professional
'Test Zeilen definition von Tabellenblatt und Pivottabele
stractive_sheet_name = ActiveWorkbook.Worksheets(2).Name
strpivot_table = ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(1).Name
'Ermittlung cacheindex
lngcache_index = ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table). _
CacheIndex
'SQL String
'1. Datenquelle
strdb_path = "\\S040A0025\S014123$\"
strdb_name = "Test_2008-11-26" 'Dateiname "Test_2008-11-26.mdb" ohne Dateiendung
strsql = "SELECT Tabelle1.DatsatzNr, Tabelle1.Feld01, Tabelle1.Feld02" _
& " FROM `" & strdb_path & strdb_name & "`.Tabelle1 Tabelle1" _
& " ORDER BY Tabelle1.Feld01"
'Datenquelle Pivottabelle aktualisieren
ActiveWorkbook.PivotCaches(lngcache_index).CommandText = strsql
'2. Datenquelle
strdb_path = "C:\Lokale Daten\Test\"
strdb_name = "Test" ' Dateiname "Test.mdb" ohne Dateiendung
strsql = "SELECT Tabelle1.Feld01, Tabelle1.Feld02" _
& " FROM `" & strdb_path & strdb_name & "`.Tabelle1 Tabelle1" _
& " ORDER BY Tabelle1.Feld01"
'Datenquelle Pivottabelle aktualisieren
ActiveWorkbook.PivotCaches(lngcache_index).CommandText = strsql
End Sub
Sub DB_Pivot1()
'externe Datenquelle eines Excel-Pivottabellen-Berichtes anpassen
'Microsoft Office 2003 Professional
' OLE-Datenconnection zu einer ACCESS-Datenbank
'1. Teil des Connection Strings
strCon1 = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";"
strCon1 = strCon1 & "User ID=Admin;"
'2. Teil ist variabel mit Dateiname der Datenbank
'3. Teil des Connection Strings
strCon3 = "Mode=Share Deny Write;"
strCon3 = strCon3 & "Extended Properties="""";"
strCon3 = strCon3 & "Jet OLEDB:System database="""";"
strCon3 = strCon3 & "Jet OLEDB:Registry Path="""";"
strCon3 = strCon3 & "Jet OLEDB:Database Password="""";"
strCon3 = strCon3 & "Jet OLEDB:Engine Type=5;"
strCon3 = strCon3 & "Jet OLEDB:Database Locking Mode=0;"
strCon3 = strCon3 & "Jet OLEDB:Global Partial Bulk Ops=2;"
strCon3 = strCon3 & "Jet OLEDB:Global Bulk Transactions=1;"
strCon3 = strCon3 & "Jet OLEDB:New Database Password="""";"
strCon3 = strCon3 & "Jet OLEDB:Create System Database=False;"
strCon3 = strCon3 & "Jet OLEDB:Encrypt Database=False;"
strCon3 = strCon3 & "Jet OLEDB:Don't Copy Locale on Compact=False;"
strCon3 = strCon3 & "Jet OLEDB:Compact Without Replica Repair=False;"
strCon3 = strCon3 & "Jet OLEDB:SFP=False"
'Test Zeilen definition von Tabellenblatt und Pivottabele
stractive_sheet_name = ActiveWorkbook.Worksheets(1).Name
strpivot_table = ActiveWorkbook.Worksheets(1).PivotTables(1).Name
'Ermittlung cacheindex
lngcache_index = ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table). _
CacheIndex
'SQL String
'1. Datenquelle
strdb_path = "\\S040A0025\S014123$\"
strdb_name = "Test_2008-11-26.mdb"
strsql = "SELECT Tabelle1.Feld01, Tabelle1.Feld02 FROM Tabelle1" _
& " ORDER BY Tabelle1.Feld01;"
strCon2 = "Data Source=" & strdb_path & strdb_name & ";" 'variabler Teil Connection-String
'Datenquelle Pivottabelle aktualisieren
With ActiveWorkbook.PivotCaches(lngcache_index)
.Connection = strCon1 & strCon2 & strCon3
.CommandText = strsql
End With
ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table).RefreshTable
'2. Datenquelle
strdb_path = "C:\Lokale Daten\Test\"
strdb_name = "Test.mdb"
strsql = "SELECT Tabelle1.Feld01, Tabelle1.Feld02 FROM Tabelle1" _
& " ORDER BY Tabelle1.Feld01;"
strCon2 = "Data Source=" & strdb_path & strdb_name & ";" 'variabler Teil Connection-String
'Datenquelle Pivottabelle aktualisieren
With ActiveWorkbook.PivotCaches(lngcache_index)
.Connection = strCon1 & strCon2 & strCon3
.CommandText = strsql
End With
ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table).RefreshTable
End Sub


Anzeige
AW: PivotCache
27.11.2008 17:43:20
Mario
danke,
funktioniert, wie kann ich nun die Connection wieder beenden. Nach dem nachfolgenden Code greife ich nochmals auf die Datenbank zu.
ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table).RefreshTable
nur leider ist die Datenbank dann noch in einem gesperrten Modus.
danke
lg Mario
AW: PivotCache
28.11.2008 09:00:07
fcs
Hallo Mario,
folgende Ergänzung solte die Verbindung zur Datenbank nach dem aktualisieren des Cach sofort wieder schliessen.
Gruß
Franz

'Datenquelle Pivottabelle aktualisieren
With ActiveWorkbook.PivotCaches(lngcache_index)
.Connection = strCon1 & strCon2 & strCon3
.CommandText = strsql
.MaintainConnection = False
End With
ActiveWorkbook.Worksheets(stractive_sheet_name).PivotTables(strpivot_table).RefreshTable


Anzeige
AW: PivotCache
28.11.2008 09:55:32
Mario
super super super
vielen Dank und ein schönes Weekend
lg mario
AW: PivotCache
27.11.2008 13:43:00
Mario
das funktioniert leider nicht. Ich hab in Forum ein anderes Beispiel gefunden. Anstelle, dass ich jedoch eine neue Pivot-Table generiere, möchte ich einer bestehenden Pivot Table die Daten übergeben. Nur wie?
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
danke
lg Mario
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige