Avatar billede bemula55 Nybegynder
03. januar 2007 - 17:07 Der er 9 kommentarer og
1 løsning

Exists i VB.net

Hej

Jeg har et problem der giver med grå hår og håber virkelig i kan hjælpe.

Jeg har opbygget en forespørgsel i Access som benytte Exists og et par subqueries. Efter at forespørgslen var færdig og jeg havde testen at den virkede som forventet i access kopierede jeg den direkte over i VB.net hvor jeg egentlig skulle bruge den. Problemet er bare at når jeg kører SQL'en fra VB.net får jeg en record ud, og når jeg kører den i access (2 sek. efter) får jeg nul records ud (det sidste er det korrekte).

Nogen forslag til hvad årsagen til dette kan være... Jeg er dybt forvirret...
Avatar billede terry Ekspert
03. januar 2007 - 17:18 #1
Exists?
Can we see the SQL please?

You could also try selecting directly from the query in your .NET program. If your query in Access is named qrySelect then you can use

SELECT * from qrySelect
Avatar billede terry Ekspert
03. januar 2007 - 17:21 #2
Dont know much at all about .NET but the problem may be because the SQL is being interpreted differently by the dB driver.
Avatar billede bemula55 Nybegynder
03. januar 2007 - 17:28 #3
The SQL is quite nasty but here it is

SELECT *
FROM [SELECT Opgaver.Ansvarlige,Opgaver.Overskrift, Maanedsseddel.UdførtAf FROM Maanedsseddel LEFT JOIN Opgaver ON Maanedsseddel.Opgave = Opgaver.Id WHERE(((Maanedsseddel.DatoSenest) = date()) AND Maanedsseddel.UdførtAf IS NULL)

]. AS A
WHERE EXISTS (SELECT * FROM (


SELECT Logins.Initialer, Format(Last([Tid]),'dd/mm/yyyy') AS Dato FROM(Logins) GROUP BY Logins.Initialer HAVING (Format(Last([Tid]),'dd/mm/yyyy')=Format(date(),'dd/mm/yyyy'))


) AS B WHERE A.Ansvarlige LIKE '*' & B.Initialer & '*')=false;

I have alredy tried calling the query directly... same result :-(
Avatar billede bemula55 Nybegynder
03. januar 2007 - 17:29 #4
http://www.firstsql.com/iexist3.htm

Maaby this helps u to solving it... i dont really understand it
Avatar billede terry Ekspert
03. januar 2007 - 18:04 #5
Not easy to understand the SQL here, but is it possible to use IN instead of EXISTS?

I've had a very quick look at the link you gave, and as far as I can make out EXISTS can produce the wrong results if a column can return NULL.
Avatar billede bemula55 Nybegynder
03. januar 2007 - 18:11 #6
but as far as i can see i don't have any null's in my testdata... i have tried using IN but can't figure out how to do it... maybe its not posible
Avatar billede terry Ekspert
03. januar 2007 - 19:34 #7
Not easy to make suggestions when I dont know fo rsure what your trying to do.

When you use IN you must only select one field which normally will be a unique value for example the primary key. There is an example in the like you gave earlier.

WHERE  pno = 'P1'
AND    sno NOT IN
      ( SELECT sno
        FROM  sp
        WHERE  pno = 'P1'
        AND    qty = 1000) ;

The Sub select just selects all of the sno which the outer selects sno must NOT be in
Avatar billede terry Ekspert
03. januar 2007 - 19:38 #8
You could also try each sub select to see if you can find out which one returns the incorrect result. Then maybe it will be easier to find the poroblem which may not be EXISTS
Avatar billede bemula55 Nybegynder
13. februar 2007 - 13:12 #9
Problemet var at Access bruger * i like-sætninger og vb.net bruger %
Avatar billede terry Ekspert
13. februar 2007 - 16:59 #10
but in your example you alreday used *!!!!

" .....AS B WHERE A.Ansvarlige LIKE '*' & B.Initialer & '*')=false; ...."
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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