webForumDet fria alternativet

Räkna ifrån flera tabeller?

ASP

10 svar · 181 visningar · startad av Sammy

Medlem sedan maj 2000202 inlägg
Frågan#1

Hur räknar man poster ur flera tabeller?

Nu använder jag detta för att räkna ifrån en tabell:

  \<%
   Set Connect = Server.CreateObject("ADODB.Connection")
   MdbFilePath = Server.MapPath("../../db/databas.mdb")
   Connect.Open "Driver={Microsoft Access Driver (\*.mdb)}; DBQ=" & MdbFilePath & ";"

   SQL = "Select Count(IDNR) AS iCount from TABELL1"

   Set RS = connect.execute(SQL)

   Response.write RS("iCount")
  %\>

  \<%
   Connect.close
   Set Connect = nothing
  %\>

Min önskan är att kunna räkna poster ifrån 3 tabeller. (tabell1, tabell2 och tabell3)

------------------
/Sammy Swärd

Medlem sedan dec. 200012 464 inlägg
#2

Varför? Borde du inte slå ihop tabellerna i så fall?

select (select count(*) from tabell1) + (select count(*) from tabell2) + (select count(*) from tabell3)

Nu vet jag inte om Access tillåter att du utelämnar from. Det går ju att lösa med en distinct och vilket tabellnamn som helst där det finns (få) poster

------------------
essentitia preter non sans multiplicandum

Medlem sedan maj 2000202 inlägg
#3

<%
Set Connect = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("../../db/databas.mdb")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"

   SQL = "select (select count(\*) from tabell1) + (select count(\*) from tabell2) + (select count(\*) from tabell3)"

   Set RS = connect.execute(SQL)

   Response.write RS("count")
  %\>

  \<%
   Connect.close
   Set Connect = nothing
  %\>

Var det så du hade tänkt dig då eller? Det fungerade inte tyvärr...

------------------
/Sammy Swärd

Dator 1: Epox 8KHA+ | AMD T-Bird 1200/266 | ALPHA 8045T/TITAN 80x25 2500rpm | 350W Noise Control med PAPST 2050rpm | 256 DDR 266 Crucial | Gainward AGP GeForce2 Ti/500XP 64MB 4,0n | Plextor CD-RW 24/10/40 IDE | Samsung SyncMaster 19" 900SL+ (1600x1200 87Hz) | Logitech Cordless Mouseman Wheel | Windows XP Pro

Dator 2: AOpen AX59 Pro | AMD K6-II 450Mhz | 192Mb SDRAM | NVidia TNT2 32Mb | Sony CRX 145-S SCSI CD-RW | Soundblaster PCI 128 | Compaq 17" (1280x1024/85Hz) | Windows 98SE

[Redigerat av Sammy den 22 jan 2002]

Medlem sedan dec. 200012 464 inlägg
#4

Och vad får du för fel då?

Response.write RS("count")

fungerar inte då kolumnen inte har något namn i selectsatsen.

Du får använda

Response.write RS(0)

------------------
essentitia preter non sans multiplicandum

Medlem sedan maj 2000202 inlägg
#5

Nej.. det gick inte del heller?

------------------
/Sammy Swärd

Medlem sedan dec. 200012 464 inlägg
#6

Och vad får du för fel då?

------------------
essentitia preter non sans multiplicandum

Medlem sedan maj 2000202 inlägg
#7

<%
Set Connect = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("../../db/databas.mdb")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQL = "select (select count(*) from tabell1) + (select count(*) from tabell2) + (select count(*) from tabell3)"

Set RS = connect.execute(SQL)

Response.write RS(0)
%>

<%
Connect.close
Set Connect = nothing
%>

Fick som svar att det var ett odefinerat fel?

------------------
/Sammy Swärd

Medlem sedan maj 2000202 inlägg
#8

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access] Reserverat fel (|). Det finns inget meddelande för felet.

------------------
/Sammy Swärd

Medlem sedan dec. 200012 464 inlägg
#9

Imposant. Får du felet vid execute?

Om du testar så här då?

SQL = "select count(*) from 
(select 1 from tabell1 union all select 1 from tabell2 union all select 1 from tabell3) as s"

------------------
essentitia preter non sans multiplicandum

Medlem sedan maj 2000202 inlägg
#10

Nej, det fungerade inte heller...

Vet inte vart jag får felet men jag antar att det är vid execute?

Får nog ge upp med att försöka räkna alla poster ur tre olika tabeller? eller?

------------------
/Sammy Swärd

Medlem sedan dec. 200012 464 inlägg
#11

Det går väl på något sätt

Det finns en sån här lite tråkig variant.

sql = "select count(*) from tabell1 union all select count(*) from tabell2 union all select count(*) from tabell3"
set rs = connect.execute(sql)

count = 0
while not rs.eof
count = rs(0) + count
rs.movenext
wend

i värsta fall får du väl köra det som tre separata frågor.

------------------
essentitia preter non sans multiplicandum

255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)