< návrat zpět

MS Excel


Téma: SQL SELECT COUNT rss

Zaslal/a 18.7.2014 23:40

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!

Zaslat odpověď >

Strana:  1 2   další »
#020588
avatar
Nemyslíš náhodou:
Délka(A1)
zjištění počtů znaků v buňce.citovat
#020589
avatar

mikkinachtik napsal/a:

Nemyslíš náhodou:
Délka(A1)
zjištění počtů znaků v buňce.

Ne, to nemyslí ani náhodou.citovat
icon #020590
avatar
COUNT nie je nutný:Option Explicit
Sub GetNumberOfRecords()
Dim DbName As String, tblName As String, strSQL As String
Dim con As ADODB.Connection, rst As ADODB.Recordset

DbName = "C:\Users\al057494\Desktop\Test.accdb"
tblName = "tblTest"

Set con = New ADODB.Connection
con.Open "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" & DbName
Set rst = New ADODB.Recordset
strSQL = "SELECT * FROM " & tblName
rst.Open strSQL, con, adOpenStatic, adLockReadOnly
MsgBox rst.RecordCount
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End Sub
Pokiaľ by si chcel predsa len využiť COUNT, tak takto:Option Explicit
Sub GetNumberOfRecordsWithCount()
Dim DbName As String, tblName As String, strSQL As String
Dim con As ADODB.Connection, rst As ADODB.Recordset

DbName = "C:\Users\al057494\Desktop\Test.accdb"
tblName = "tblTest"

Set con = New ADODB.Connection
con.Open "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" & DbName
Set rst = New ADODB.Recordset
strSQL = "SELECT COUNT(*) FROM " & tblName
rst.Open strSQL, con, adOpenStatic, adLockReadOnly
MsgBox rst.GetString
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End Sub
Příloha: png20590_vystrizek.png (9kB, staženo 33x)
20590_vystrizek.png
citovat
icon #020591
avatar
Prípadne takto:Sub GetNumberOfRecordsDcount()
Access.OpenCurrentDatabase "C:\Users\al057494\Desktop\Test.accdb"
MsgBox DCount("*", "tblTest")
Access.CloseCurrentDatabase
End Sub
S príslušnou referenciou na objektovú knižnicu MS access (u mňa Microsoft Access 14.0 Object Library)citovat
#020592
avatar
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.citovat
icon #020593
avatar
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 DCount v tom prípade nefunguje? Neviem si úplne presne predstaviť, o čo sa snažíš a sám som v otázke VBA v Access zatiaľ veľký břídil. Inak klobúk dolu čo sa týka Tvojich pokrokov, mám za to, že si začal len pred pár dňami, mám pravdu?

edit: Pokiaľ máš nainštalovaný Access a máš problém so syntaxou dotazu vo VBA kóde, tak mne sa osvedčilo nasledujúce: Sám som si často neistý so správnou syntaxou dotazu, 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, reťazec prekopírujem do VBA a tam iba doupravím...citovat
#020594
avatar
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!citovat
icon #020595
avatar
A prečo máš 24 tabuliek miesto jednej? Nie je možné tie záznamy zlúčiť do jednej tabuľky pomocou Append Query (inštrukcia INSERT INTO) alebo vytvoriť zjednocovací dotaz (inštrukcia UNION ALL) a nad tým potom vytvoriť výberový dotaz, kde vyberieš len záznamy, u ktorých hodnota je väčšia než priemer?citovat
#020596
avatar
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.citovat
icon #020598
avatar
Stále nerozumiem. Každopádne, pokiaľ potrebuješ získať počet záznamov zo všetkých tabuliek, tak:Sub GetNumberOfRecordsInAllTables()
Dim dbs As CurrentData, AccObj As AccessObject, Celkom As Long
Access.OpenCurrentDatabase "C:\Users\al057494\Desktop\Test.accdb"
Set dbs = Access.CurrentData
For Each AccObj In dbs.AllTables
If Not AccObj.Name Like "MSys*" Then
Debug.Print "Tabulka:"; AccObj.Name; Tab(50); "Pocet zaznamov:"; DCount("*", AccObj.Name)
Celkom = Celkom + DCount("*", AccObj.Name)
End If
Next AccObj
Debug.Print "Pocet zaznamov vo vsetkych tabulkach:"; Celkom
Access.CloseCurrentDatabase
End Sub
Referencia na na objektovú knižnicu MS access (u mňa Microsoft Access 14.0 Object Library). Pokiaľ poznáš názvy tabuliek, tak cyklus si môžeš upraviť. Viac asi neporadím...citovat

Strana:  1 2   další »

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

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32

Čas od do

jarek1111 • 18.4. 8:31

Makro smyčka

MilanKop • 18.4. 7:18

Makro smyčka

elninoslov • 18.4. 0:18

Makro smyčka

MilanKop • 17.4. 21:33