Avatar billede duno Nybegynder
05. februar 2005 - 08:46 Der er 6 kommentarer og
1 løsning

hent to tal og træk fra hinanden

jeg har 2 tabeller, og jeg vil hente et tal fra begge tabeller og trække dem fra hinanden, det gør jeg på følgende måde

først henter jeg * fra tabel1 hvor id er lig med et sæt valgte tal, eks 1,4,6,8,11,24

dernæst henter jeg * fra tabel2 hvor id er lig med et sæt valgte tal, eks 1,4,6,8,11,24

og så sætningen

if tabel1.Fields.Item("antal") - tabel2.Fields.Item("antal") = "1" then .. . .... . . .

det virker fint, men hvad hulen gør jeg hvis der mangler et tal i tabel 2, så kan den jo ikke sige - noget fra tabel 2, og så får jeg fejl.

Hilsen

Duno
Avatar billede eagleeye Praktikant
05. februar 2005 - 09:51 #1
Du kan hente fra begge tabeller i samme SQL sætning ved at lave en JOIN.

SQL = "select tabel1.antal as t1antal, tabel2.antal as t2antal from tabel1 left join tabel2 on tabel1.id=tabel2.id where tabel1.id="&idlist

Så kan du tjekke som t2antal er Null og så lade være med at trække fra.
og så rette din if sætning:

udregning = rs("t1antal")
if not isNull(rs("t2antal")) then udregning = udregning - rs("t2antal")
if udregning = "1" then .. . .... . . .


Alternativt kan man lave udregningen i SQL sætningen men hvis antal i tabel2 er tom vil udringen også give en tom tilbage og ikke tallet i tabel1. Så man må putte en IIF (Access) ind i SQL sætningen som tjekker om tabel2 er tom og hvis den er ligger et 0 ind.

Eks på SQL sætningen:

SQL = "select (tabel1.antal-IIf(IsNull(tabel2.antal), 0, tabel2.antal)) as antal from tabel1 left join tabel2 on tabel1.id = tabel2.id where tabel1.id="&idlist

Så kan din if sætning skrives som:

if rs("antal") = "1" then .. . .... . . .
Avatar billede duno Nybegynder
05. februar 2005 - 10:49 #2
hvad mener du med det her??

="&idlist
Avatar billede eagleeye Praktikant
05. februar 2005 - 10:53 #3
Du skriver du henter eks 1,4,6,8,11,24 så det din where del som henter det du har behov for.
Avatar billede duno Nybegynder
05. februar 2005 - 11:02 #4
en anden ting.. nu er min liste ret lang, hvis jeg bruger nedenstående eksempel

udregning = rs("t1antal")
if not isNull(rs("t2antal")) then udregning = udregning - rs("t2antal")
if udregning = "1" then .. . .... . . .

viser den så ikke samme resultat ud for alle posterne???
Avatar billede eagleeye Praktikant
05. februar 2005 - 11:06 #5
Den viser det for dem som er valgt i where delen.

Den where del du bruger til at lave de to recordset tabel1 og tavel2 i koden fra spørgsmålet kan bruges i den nye SQL sætning så den tager de samme med.

hvis de to SQL sætningener til tabel1 og tabel2 ser sådan her:
SQL_tabel1 = "select * from tabel1 where id in (1,4,6,8,11,24)"
SQL_tabel2 = "select * from tabel2 where id in (1,4,6,8,11,24)"

Så kan den nye SQL sætning se sådan her ud:

SQL = "select tabel1.antal as t1antal, tabel2.antal as t2antal from tabel1 left join tabel2 on tabel1.id=tabel2.id where tabel1.id in (1,4,6,8,11,24)"
Avatar billede duno Nybegynder
26. april 2005 - 19:42 #6
Damn jeg er dårlig til at acceptere et svar, du er accepteret nu :-)

Hilsen

Duno
Avatar billede duno Nybegynder
25. maj 2005 - 19:03 #7
Stik mig et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester