< návrat zpět

MS Excel


Téma: ADO v DAO rss

Zaslal/a 2.7.2014 23:00

Ahoj lidi. Zajímal by mě Váš názor na vhodnost=rychlost přístupu do xl* souborů. Mám celkem hodně souborů po cca 3MB a potřebuji v nich co nejrychleji přečíst a přepsat vždy jednu buňku. Těch přístupů je v daném okamžiku cca 1000. Standart metoda Open-Close je pomalá a tak se ptám. Pomůžu si SQL? A který mám používat ADO, nebo DAO? Nemám s tím zkušenosti a nechce se mi to testovat. Na Gg jsem se dočet, že snad DAO je rychlejší, ale jakou zkušenost máte Vy. Nebo je snad jiný, lepší způsob?

Zaslat odpověď >

icon #020333
avatar
V rámci svojich malých skúseností s touto problematikou mám skôr zažité ADO (komunikácia Excel-Access riadená z Excelu, t.j. VBA písané v Exceli). Ale ber to s rezervou, pokiaľ má niekto iný názor, prieť sa nebudem, ako píšem, až také skúsenosti, aby som mohol fundovane argumentovať, nemám... Okrem toho, ja cez ADO nalievam data z Excel do Access, čiže je to zrejme opačný smer toku dát (push), než riešiš Ty (pull). Každopádne, ADO v mnou popisovanom prípade bez problémov, čo sa týka rýchlosti, spracovanie prebieha v podstate okamžite, z Excelu na lokále, do Accessu na serveri.citovat
#020360
avatar
Ahoj. Nejsem expert ... jen úvaha. ADO i DAO nebo ADOX nepodporují přímý přístup k OLEDB driveru. A následně ... někdo ten soubor musí otevřít, vložit zapis a zavřít, protože jinak se dále se souborem pracovat nedá - případně zhavaruje další přístup. Xlsx soubory nejsou databaze a driver k nim jen přistupuje "jako, že je to databaze". Nebo vytvořit kompilovanou DLL knihovnu, která Ti ty soubory bude obsluhovat. A zase, v knihovně budeš asi přistupovat přes interface/typovou knihovnu do Excelu ... otvírat soubor, zapsat, uložit a odejít. Myslím, že nejrychlejší by mohlo být makro ve VBA :-D a případně otevření několika souborů.
Nevím na co to máš, a jak to používáš ale obvykle pokládám jednoduchou otázku vzhledem k obrovským možnostem jediného souboru. "Jsi si jistý, že potřebuješ skutečně tak mnoho souborů ?" Nevyřeší Tvůj problém třeba konsolidace dat a obyčejný vzoreček ? R.citovat
#020365
avatar
3MB a 1000 přístupů - to mi nepřijde jako řešení pro excel.
Co se ze všech souborů vzorcem odkazovat do jediného souboru, kde budete hodnoty měnit?

DAO používat pro vytváření desktopových aplikací v MS Access. ADO pro ostatní přístup. Samo, že existují vyjímky. Rychlost je sporná a závislá případ od případu - můžete vyzkoušet.

Otvírání souborů patří k nejpomalejším procesům.citovat
#020366
avatar
No jo, začal jsem špatně. Pokusím se to napravit. Mám 24*10^6 možných položek, každá obsahuje dvě čísla. První číslo je něco jako jméno položky (není pořadové) a druhé je její měnící se hodnota. V daném čase chci u cca 1000 položek změnit hodnotu. Nejdříve ji přečíst a pak změnit(+1). Tyto položky můžu adresovat buď jménem (bude přiděleno při první změně hodnoty), nebo pořadovým číslem v rámci celého rozsahu položek. Jde o to, že hodnota některým položkám nebude nikdy přiřazena. Následně budu získávat nějaké statistické výstupy. Vše se bude dělat v EXCEL2010. Můj záměr byl ty položky rozdělit do několika sešitů.xlsx a přistupovat k nim pomocí pořadového čísla. Když teď ale pátrám jak to udělat co nejefektivněji, neustále narážím na ACCESS, k čemuž jsou ADO-DAO určeny, jak Vy sami výše uvádíte. Asi to fakt bude lepší než do xlsx. No s tím ale nemám zkušenosti. Nevím kolik položek můžu exportovat do ACCESS, jak celý rozsah rozdělit a adresovat. Hlavní kritéria jsou rychlost a spolehlivost. Jinak jsem se dočetl, že když chci pracovat s celou databází je rychlejší ADO, když s její částí tak DAO. Kdyby jste měli někdo v záloze nějaký ukázkový VBA kód Import-Export z-do ACCESS, moc by mě to potěšilo. Díky za reakce.citovat
#020411
avatar
Pohybujete se na obecné rovině. Pokud chcete přejít na access je třeba si uvědomit, že je to databáze.
Tzn. normalizace, sql, integrita, klíče, indexace atd... Zkuste vyhledat na netu a něco si přečíst/zkusit.
Ukázek i hotových řešení ohledně modelů ADO i DAO je na netu velké množství.
DAO je starší technologie než ADO. Po nástupu ADO se o DAO mluvilo jako o mrtvé techn. Pamatuji si jak komunita upozorňovala, že při vytváření desktopových aplikací se mnohem více hodí DAO. Dá se říci, že s příchodem MS Access 2007 a strojem ACE se vrátilo DAO zpět do hry. ADO používám pro připojení do jiných databází atp.
Import z excelu do accessu provádím přes textové soubory a specifikaci importu, abych si mohl určit vlastní datové typy polí (a další) a nenechal to na stroji, který u excelu určuje datové typy podle několika prvních řádků. V excelu si pak pro získání dat můžete vytvořit QueryTable. Tím vším můžete pro začátek začít.citovat
#020439
avatar
Ano, jsem si vědom, že access je dtb. Ano dočetl jsem se na netu, že od MS2007 je DAO rychlejší, protože načítá pouze část báze na rozdíl od ADO. Podle toho se dá vybrat jejich použití. Budu používat oba. No a já teď řeším v prvním případě situaci, kdy mám 24M možných záznamů. Každý má dvě pole. První (klíč) je neměnné číslo identifikující záznam, druhé je měnící se číselná hodnota. V reálu jich bude možná max 15M, ale to já dopředu nevím. Zapisovat se budou různě do celého rozsahu po jednom (v daný čas 1000x). Prvně zkontrolovat zda už je záznam v dtb uvedený, pak hodnotu přepsat (+1), nebo záznam poprvé zaznamenat s identifikací a počáteční hodnotou 1. To znamená, že v jednom kroku budu pracovat s jediným záznamem v dtb. Ale někde na netu jsem zaznamenal doporučení, že jedna tabulka v dtb by mněla mít max 100000 záznamů. Je to tak? Měl bych teda založit dtb s odpovídajícím počtem tabulek? Už si ty vzorové kódy stahuju a seznamuju se s nimi, ale nevím jak tu dtb strukturovat vzhledem k předpokládanému rozsahu. Napsal jsem si VBA funkci pro výpočet pozice z toho identifikátoru. To jsem ještě předpokládal, že to budu mít uloženo v xlsx. Do access bych mohl tou Fci určit tabulku, ve které se daný záznam bude vyskytovat. A v tabulce přistupovat k záznamu přes identifikátor (klíč). No mám teď z toho v hlavě trochu segedin. Měl bych to udělat jak popisuju, nebo
jsem mimo?citovat

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

Vynásobit hodnoty kurzem - Power Query

Alfan • 26.4. 7:56

Relativní cesta - zdroje Power Query

Alfan • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

elninoslov • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

lubo • 25.4. 19:18

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 15:12

Relativní cesta - zdroje Power Query

Alfan • 25.4. 15:08

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 14:21