< návrat zpět

MS Excel


Téma: Microsoft.ACE.OLEDB - Jen 65536 řádků. rss

Zaslal/a 4.1.2014 23:44

Ahoj.

Zkoušel jsem externí zdroj pro KT a laboroval jsem s "Microsoft.ACE.OLEDB". Níže uvedený kod v Off 2007 nefunguje. Nakonec jsem problém našel v počtu řádku. Pokud místo 1048576 napíšu jen 65536, pak je kod funkční. Nevíte jak přinutit Off aby respektoval celých 1048576 řádků z tabulky ? Tabulku jsem zkoušel ve formátu .xlsm a .xlsb. R.

Office 2007 + Win 7/32 bit


Sub Test_v2()
Dim c As ADODB.Connection
Dim Rs As Recordset
Dim Book As String
Set c = New ADODB.Connection
c.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName & _
";Extended Properties=""Excel 12.0;HDR=Yes;"";"
Set Rs = New ADODB.Recordset
Rs.ActiveConnection = c
Rs.Open "SELECT * from [Capacity$B5:AS1048576] " & _
" UNION SELECT * from [Flats orders$B5:AS1048576]"
Debug.Print Rs.Fields.Item(2)
Rs.Close
Set Rs = Nothing
End Sub

Zaslat odpověď >

Strana:  1 2   další »
icon #017020
avatar
Teraz budem len tipovať: Zjednocovací dotaz, tak ako ho máš napísaný, môže v krajnom prípade vygenerovať 2x(1048576-4) záznamov. To v prípade DBMS (SQL server, MS Access) asi nie je problém, ale pokiaľ je počet riadkov v excel obmedzený na 1048576, tak počet väčší už asi problém je... Na vytvorenie KT ale zdrojové dáta môžu zostať ako externé, eventuálne by si mohol asi použiť power pivot.
Je to len tip, ako uvádzam hore, negarantujem, že dávam spoľahlivý návod, či vysvetlenie.

edit: Možnosťou by bolo i testovať najprv použité oblasti (počet riadkov) v listoch Capacity a Flats Orders a v dotaze sa potom neodkazovať na posledný riadok v danom liste, ale na posledný použitý riadok. Nepredpokladám, že máš použitých všetkých 1048576 riadkov...citovat
#017021
avatar
Ahoj ALe.
Díky za nápady. Stále jsem hledal něco v kompatibilitě a pod. Nakonec je chyba v připojování přes ADO. Stačí do řetězce nakonec dát "IMEX=1". Tím se může načítat 2x20b. Připojil jsem to i na kontingenční tabulku a načetl data "sám ze sebe". Bylo to bez problému ... jen se zaměnil zdroj dat. A tím jsem skončil. Soubor se nedaří uložit. Hlásí chybu ve sdílení. Pokud zapnu sdílení, tak mi nadává, že v sešitě je hodně modulů s makrama. Nyní potřebuji vědět, jak to obejít, aby Excel celý nepadal pokaždé, když vytvořím kontingenční tabulku.
Jinak díky za nápady.
Romancitovat
icon #017022
avatar
ohľadom powerpivotu som napísal nepravdu - ten je k dispozícii až pre excel 2010..
osobne by som skúsil obmedziť rozsah načítavaných záznamov v query na skutočne využitý počet riadkov v zdrojových listoch (opakujem sa). Sám mám ale v znalosti ADO veľké medzery, síce to poslednou dobou už občas používam, ale žiadny expert na to zatiaľ nie som. Čo som vedel, to som poradil, snáď nad tým svojim problémom nakoniec zvíťazíš..citovat
#017071
avatar
ja toto dost casto pouzivam a ked mam poradit tak ked je mozne tak DATA prehodte do MS Access z dovodu toho aby ste predosli problemom vznikajucim pri insertovani/updatovani alebo syntaxickym zapisom .... ten ado pre MS Excel je dobry ale nieje zatial uplne dokonaly

a len vystup zapisujte do MS excelcitovat
#017077
avatar
Co prosím znamená "Tím se může načítat 2x20b"?.
Nastavením IMEX=1 se řeší smíšené datové typy ve sloupci (tj. zabráníte poskytovateli hodnoty NULL) a ještě můžete počítat s nečekanými výsledky při případné aktualizaci. Co je cílem Vašeho kódu? Součit data ze dvou tabulek (listů) a předat je do KT?

Tomuto také nerozumím "Připojil jsem to i na kontingenční tabulku a načetl data "sám ze sebe". Bylo to bez problému ... jen se zaměnil zdroj dat. "citovat
#017088
avatar
Excel má nyní 1048576 řádků což je 1MB nebo 2x 20b nebo 2x1048576 nebo dvě na dvacátou atd. To mi ujelo z assembleru.
Vygooglil jsem řešení IMEX=1 a po vložení je to funkční až na problémy se sdílením - už jsem nepátral, co to přesně znamená. Pokud máš seznam všech možných argumentů prosím o inf.
V práci jsem to zkoušel na Excelu 2010 a jede to bez problémů se sdílením - žádná chyba. Doma jsem to bastlil na Excelu 2007. Dočetl jsem se i o balíčku opravy pro Excel 2007 s tím, že to neřeší všechny problémy. Zkoušel jsem jej nainstalovat a skončilo to chybou. Mám špatný pocit, že ta havarie Excelu při pokusech jej nějak poškodila. Projevilo se to i ve VBA, ke začala blbnout nápovědě - že ji nelze otevřít :(
"Připojil jsem to i na kontingenční tabulku a načetl data "sám ze sebe". Bylo to bez problému ... jen se zaměnil zdroj dat." Použil jsem v připojovacím řetězci ActiveWorkbook.FullName a tudíž provider "Microsoft.ACE.OLEDB" se připojil k sešitu z kterého vyšel požadavek. (sám na sebe). Ještě jsem laboroval se způsoby připojení, pro čtení apod, uložením souboru před spuštěním, ale na 2007 to padalo.
... a k aplikaci
Používám MySQL + vložené procedury k načítání dat z okolí (extrakty ze SAPu, Připojení k Oraclu apod.) a baťáky spouštěné plánovačem úloh. Celkem 5 datových zdrojů. Po načtení se zpracují souhrné tabulky a po příchodu do práce je načítám do Excelu. Nejdříve data do jednoho listu a z dat vyrobím pivot tabulky atd. V tomto problematickém reportu mám list, na které mám tři dimenze (kapacity, plány výroby a zakázky), které bych rád rozdělil do tří listů nad kterýma se bude lépe pracovat. V minulosti jsem toto řešil s Excelem 2003 a nepodařilo se mi namapovat spojení tří identických zdrojových struktůr jako jeden zdroj pro pivot tabulku.
Pokud Vás napadne jak to vyřešit jinak, prosím o Vaše nápady.citovat
#017089
avatar
ked som to dobre pochopil tak:
- vstupne zariadenie je z MySQL, ktore mate prepojene zo vsetkym moznym :) (co nieje az tak podstatne)
- vystup by mali byt pivot tabulky

tak a teraz nechapem preco sa pripajate na MS Excel a nie rovno na MySQL? kde syntax je uplne rovnakycitovat
#017092
avatar
Vlastně jsem to napsal. Nejdříve natáhnu data do listu a pak je použiji jako zdroj dat pro pivot tabulku. Pak v tom pracuji a nakonec spustím makro, které vytvoří nový soubor do kterého uloží zdrojové listy, pivot tabulky a uloží pod aktuálním datumem na disk do adresáře. Adresář je zpřístupněn v Apache .htaccess a přes http si uživatelé stáhnou co potřebují. Pokud bych ve zdroji nechal odkaz do MySQL, pak bych jej musel zpřístupnit ostatním apod, a to se mi nechce. Řešením by mohlo být vygenerovat cache pod apachem a zpřístupnit je přes php stránku. Pivot tabulka by nacucala již vygenerované sestavené data a nechodila by do MySQL. Ty data jsou stejná do doby než se znovu sestaví.citovat
#017093
avatar
Rozumím tomu, proč se Palooo ptá na otázku "preco sa pripajate na MS Excel a nie rovno na MySQL", přestože nesouhlasím s tím, že syntax je stejná.

Píšete, že "Nejdříve natáhnu data do listu".
Jak je natáhnete a odkud? A proč nepředáte sadu záznamů rovnou do paměti PT? Řešení mi taky přijde trochu krkolomné, ale neznám všechny souvislosti.

Zatím můžu nabídnout alespoň trochu teorie z praxe.

Jeden z vhodných způsobů je připojovat se přímo na server, protože takto přenecháte zátěž serveru. Ještě lépe je si v databázi na serveru vytvořit uloženou SQL proceduru nebo pohled, tím zajistíte určitou udržovatelnost a přistupujete k datům optimalizovaným způsobem. Uložené procedury mohou vracet i více záznamů, které lze zachytit pomocí metody NextRecordset objektu Recordset (ADODB). Ověříte zda je na počítači potřebný ovladač a vytvoříte DSN (Název datového zdroje. Tím zajistíte připojovací řetězec pro metodu Connection

Lze také připojit tabulky z databáze na serveru do MS Access a z excelu se pomocí ADO připojit, vytvořit sadu záznamů a tu předat do PT.

Možností je celá řadacitovat
#017107
avatar
Dík za odpovědi.
Data natahuji z MySQL do listu a nad listem je pověšená pivot tabulka. Vazba je na list a né na data v MySQL. Soubor, který se nakonec vytvoří je platný stav k aktuálnímu datu. Soubory jsou od roku 2009 po adresářích se jmeném adr. které představuje datum. V případě potřeby je možné vstoupit do určitého dne (adresáře) a otevřít tabulky/informace, které se k tomuto dni vztahovaly.
Další důvod je, že někdo vyžaduje pivot tabulky pro celkový pohled a jiný zase rád jen filtruje sloupce a kopíruje výseče, které potřebuje.
Z toho důvodů nepoužívám pro pivot tabulku MySQL jako zdroj, ale nazval bych to spíš statický přístup. Data se natáhnou do listu a nad něj se zavěsí pivot tabulky.
Zkusím obrátit, protože ta diskuze se dostala úplně jinde, než jsem očekával. Napadá Vás, jak namapovat tři listy se stejnou strukturou jako zdroj pro pivot tabulku ? Toto řešení mě trápí již několik let :( R.citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje