Ahoj lidi! Z Excl(off.2010) ukládám data do Access.
"Dim RsAdo As ADODB.Recordset"
"RsAdo.Open strSQL, CnnAdo, adOpenKeyset, adLockBatchOptimistic, adCmdTable"
Prosím Vás je to tak, že "RsAdo.UpdateBatch" lze použít jen pro změny ve stávajících záznamech, ne pro přidávání nových záznamů "RsAdo.AddNew"?
Ahoj! VBA -> F1 -> XlBuiltInDialog -> seznam všech vestavěných dialogů.
Prostě se jedná o sledování výskytu nějakých kombinací.
Protože to zatím zkouším v DAO a mám k dispozici záznamy z cca 1000 dní, slepil jsem tuto prc.'Reference
'Microsoft Access 14.0 Object Library
'Microsoft Office 14.0 Access Database Engine Object Library
Private Sub Vyber_Test_11()
Const nTab As Byte = 24
Dim fxDB As String
Dim dbAcc As DAO.Database, rsTab As DAO.Recordset, strSQL As String
Dim kodID As Double, nXK As Integer, sumKombi As Double
Dim xTab As Byte, rsRd As Long, rsSl As Byte
fxDB = ThisWorkbook.Path & "\" & "NewDB.accdb"
Set dbAcc = OpenDatabase(fxDB)
'COUNT -------------------------------------------------------------------
strSQL = vbNullString
For xTab = 1 To nTab
strSQL = strSQL & " Union All SELECT XK FROM " & xTab
Next xTab
strSQL = Mid(strSQL, 12) & ";"
Set rsTab = dbAcc.OpenRecordset(strSQL)
With rsTab
.MoveLast
rsRd = .RecordCount
.Close
End With
'SUMA --------------------------------------------------------------------
sumKombi = 15500 * 1000 '(jeden den 15500) * (zatim dnu 1000) jen jako priklad
'AVG ---------------------------------------------------------------------
nXK = Round(sumKombi / rsRd, 0)
'IMPORT ------------------------------------------------------------------
strSQL = vbNullString
For xTab = 1 To nTab
strSQL = strSQL & " Union All SELECT * FROM " & xTab & " WHERE XK>=" & nXK
Next xTab
strSQL = Mid(strSQL, 12) & " ORDER BY XK DESC, ID ASC;"
Set rsTab = dbAcc.OpenRecordset(strSQL)
With rsTab
.MoveLast
rsRd = .RecordCount
If rsRd = 0 Then 'Pokud žádné záznamy, exit.
MsgBox "Zadny vyhovujici Zaznam"
Else
If rsRd > 1000 Then rsRd = 1000
.MoveFirst
Sheets("List1").Cells(1).Resize(rsRd, 2) = WorksheetFunction.Transpose(.GetRows(rsRd))
End If
.Close
End With
dbAcc.Close
Set rsTab = Nothing
Set dbAcc = Nothing
End Sub
Tato prc. je funkční. Pokračuji v dalším testování. Nepotřebuji to pro žádné šéfy, je to jen moje kůň. Al moc díky.
ps.
CurrentDb.DCount je v cyklu pomalejší než rs.RecordCount
To je předmětem testu. Záměrně jsem to rozdělil do více tabulek z důvodu snad rychlejší indexace. Teď vytvořím dva DB. Jeden s jedinou tabulkou a druhý s více tabulkami. Pak budu testovat rychlost práce s oběma. V daném čase, jednou denně, proběhne 15 tisíc přístupů (z 24M možných). Tzn. kontrola zda je daná položka již uvedena, v tom případě změna její hodnoty (+1), nebo pokud uvedena není tak jí do DB přidat s počáteční hodnotou (1). Můj předpoklad je, že práce v DB rozděleném do více tabulek bude rychlejší. Pokud však rozdíl rychlosti bude nevýznamný, pak budu samozřejmě pracovat s DB s jedinou tabulkou.
V tom případě DCount vrací chybu "Vyhrazená chyba 2950".
Ano před pár dny. Zatím jsem používal jen ImpEx do textových souborů Open, Input, Write.
A teď chci z Excel v Access sledovat vývoj nějakých položek (cca 24M). Zatím testuju DAO. DB mám rozdělený do 24tab s identickou strukturou po 1M záznamů. No a v tomto případě chci do Recordset načíst záznamy z celého DB tzn. z 24tab, které mají hodnotu vyšší než je průměrná. No a s tím si teď hraju. Netuším jak bych mohl zjistit AVG v celém DB, ale znám celkový SUM, no a po zjištění COUNT si ten AVG dopočítám. Pak mohu tuto hodnotu vložit do dotazu pro Recordset z celého DB.
No a s tím získáváním syntaxe přímo v Access je to tak, že už jsem to někde dočet, ale vůbec netuším jak naložit s "v takom prípade si ho cvične postavím v návrhovom zobrazení priamo v prostredí Access, následne sa prepnem do SQL zobrazenia".
Až budu mít trochu víc času, tak se pokusím seznámit.
Dík!
AL díky. Ten první "rst.RecordCount" znám. Ten třetí by se mi hodil nejvíc. Ale problém je v tom, že už "Test.accdb" mám otevřený "OpenDatabase" (ne Current). A teď bych potřeboval získat "COUNT" pro sestavení sql dotazu pro "OpenRecordset". Asi budu muset ten "rst" načíst dvakrát.
Ahoj lidi! Nevíte někdo náhodou jak v EXCEL2010 VBA použít SQL Fci "SELECT COUNT" na zjištění počtu záznamů v "x.accdb"? Nějak se do té syntaxe nemůžu trefit. Dík!
Test: pokusů(x) => chyb(0). Díky.
Ahoj lidi! Nevěděl by někdo, proč tato proc někdy končí chybou? Jak tomu předejít?Sub Copy_Ace_Table()
Dim objAcc As Object
Dim dbAcc As String
Dim nTab As Long
dbAcc = ThisWorkbook.Path & "\" & "NewDB.accdb"
'Object ACCESS
Set objAcc = CreateObject("Access.Application")
'Otevrit databázi
objAcc.OpenCurrentDatabase (dbAcc)
'Kopie TAB
For nTab = 2 To 11
objAcc.DoCmd.CopyObject , nTab, acTable, 1
Next nTab
'Application.Wait (Now + TimeValue("0:00:05"))
CurrentDb.Close 'tady Chyba 462 pocitac je nedostupny
objAcc.Quit
Set objAcc = Nothing
MsgBox "HOTOVO", , "Copy_Ace_Table"
End Sub
Aha! Špatně jsem pochopil zadání. A ty pole mě překvapily. Dingo funguje. Omlouvám se.
No pokud ano, tak je to snadné. Myslím, že adresa středník obsahovat nemůže. Potom tedy Instr(), Trim(Left()), Mid() a je to.
Co to je "bodkouciarkou"? Myslíš buď tečkou, nebo čárkou ? Nebo tečkou a zároveň čárkou ".,"? Nebo středník, nebo co ?
Řekl bych, že s těmi poli jsi trochu mimo.Sub Vypis_2()
Dim rdR As Long, rdW As Long
Dim xRow As Long, yRow As Long
Dim xCol As Long, yCol As Long
Dim xyCols As Range, sumCols As Integer
xRow = 3: yRow = 1745
xCol = 5: yCol = 495
sumCols = yCol - xCol + 1
rdW = yRow + 3
With ActiveSheet
Set xyCols = .Range(.Columns(xCol), .Columns(yCol))
For rdR = xRow To yRow
If WorksheetFunction.CountIf(Intersect(.Rows(rdR), xyCols), 1) = sumCols Then
rdW = rdW + 1
.Cells(rdW, 1) = .Cells(rdR, 1)
End If
Next rdR
End With
Set xyCols = Nothing
End Sub
Ahoj! Chci v DB nakopírovat Tabulky, ale příkazDoCmd.CopyObject , "TabCopy", acTable, "Tab"hlásí chybu na "acTable" Variable Not Defined! Nevíte proč? Nepomůže ani použití hodnoty "0".
Ahoj! VBA zakládám "Novy.accdb". Zatím OK. V něm zakládám Tabulky.dbNew.Execute "CREATE TABLE Tab1" _
& "(ID DOUBLE PRIMARY KEY, XK INTEGER);"
Proč, když mám ve druhém poli volbu INTEGER je nastavený LONG?
A jak mám nastavit "Počet desetinných míst = 0".
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.