Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  10 11 12 13 14 15 16 17 18   další » ... 24

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?

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.

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?

Ahoj! V tomto případě bez ohledu na logiku musí vzorec vrátit chybu "Cyklický odkaz". Nějak jsem to tu nikde nezaregistroval.

Zápis toho tvého vzorce by mohl vypadat nějak takto:Range("C1") = WorksheetFunction.Max(WorksheetFunction.Min(IIf(Range("B1") < Range("A1"), 1, Range("B1")), 0.25) - WorksheetFunction.Max(Range("A1"), 0), 0)
Ale vzhledem k tomu, že není funkční mohl bys použít např. v Modulu tuto Funkci:Function NOCNI(nDatA As Double, nDatB As Double)
Dim nCasA As Double, nCasB As Double
nDatA = nDatA + 1 / 12
nCasA = ((nDatA + (nDatA > 1)) < 1 / 3) * -(nDatA + (nDatA > 1))
If nCasA > 0 Then nCasA = 1 / 3 - nCasA
nDatB = nDatB + 1 / 12
nCasB = ((nDatB + (nDatB > 1)) < 1 / 3) * -(nDatB + (nDatB > 1))
NOCNI = Abs(nCasA + nCasB)
End Function

Do Tab si dej vzorec:
=KDYŽ(A(JE.ČISLO(RC1);JE.ČISLO(RC2));NOCNI(RC1;RC2);"")

Vlastně máš pravdu. Pokud nejsou žádné změny v sešitě, tak se při zavírání nepokouší uložit. To znamená, že stačí v Workbook_BeforeSave otázka zda uložit Origo, nebo Zálohu a Workbook_BeforeClose vůbec neřešit. To znamená ani Workbook_SheetChange.

A jak zjistím v Workbook_BeforeSave, že byl sešit změněn?

Nevím jestli je nějaká Fce, která by zjistila zda od uložení sešitu byly provedeny nějaké změny. Dalo by se zaznamenat pomocí "Workbook_SheetChange".
Posílám nějakou inspiraci.

Jojo, máš pravdu! Bezhlavě jsem zkopíroval kód od Opičáka a toho "Selection" jsem si vůbec nevšiml.
I s tím druhým máš samo taky pravdu.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range(Columns(1), Columns(2))) Is Nothing Then Exit Sub
Dim n%
n = Target.Row
If Not IsNumeric(Cells(n, 1)) Or IsEmpty(Cells(n, 1)) Then Exit Sub
Application.EnableEvents = False
Cells(n, "C") = Cells(n, "A") + Cells(n, "B")
Application.EnableEvents = True
End Sub

Zkus záznamník makra; Data - Import XML. Snad ti napoví.

Včera horkou jehlou, trochu jsem to pročistil.

No taky si přidám.

Možná je nastavena Barva výplně = Bílá.
Zkus Barva výplně = Bez výplně

třeba takto:Dim FilePath As String, xFile As String, FileSpec As String
FilePath = "C:\ABC\"
FileSpec = "*.xlsx"
xFile = Dir(FilePath & FileSpec)
Do Until xFile = vbNullString
If Left(xFile, 1) = "A" Then Workbooks.Open (FilePath & xFile)
xFile = Dir
Loop


Strana:  1 ... « předchozí  10 11 12 13 14 15 16 17 18   další » ... 24

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