[VB/SQL] VB komt met verkeerde resultaten

Pagina: 1
Acties:

  • MrDry
  • Registratie: December 2001
  • Laatst online: 01-09 14:13

MrDry

Desperados!

Topicstarter
Als ik het volgende SQL statement door de SQL Query Analyzer haal (SQL Server W2K) dan komen de juiste resultaten uit de Query.

SELECT [Adres], [Postcode], [Plaats], [Omschrijving] FROM [rietvink].[dbo].[Persoon2Adres] P2A INNER JOIN [rietvink].[dbo].[AdresType] AT ON AT.ID = P2A.AdresType_ID INNER JOIN [rietvink].[dbo].[Adres] A ON P2A.Adres_ID = A.ID WHERE Persoon_ID='3816' UNION SELECT [Adres], [Postcode], [Plaats],[Omschrijving] FROM [rietvink].[dbo].[Bedrijf2Adres] B2A INNER JOIN [rietvink].[dbo].[AdresType]AT ON AT.ID = B2A.AdresType_ID INNER JOIN [rietvink].[dbo].[Adres] A ON B2A.Adres_ID = A.ID WHERE Bedrijf_ID='4149'

Als ik deze Query in VB6 gebruik komt ie voor het veld [Omschrijving] steeds met het eerste veld uit de ge-joinde tabel [rietvink].[dbo].[AdresType] i.p.v. het resultaat wat de SQL Query Analyzer geeft.

De SQL server moet toch altijd het zelfde resultaat geven, ongeacht welk programma er om vraagt?
Heeft iemand anders zo iets ondervonde in VB6 of zit er gewoon een foutje in mijn SQL statement waar de SQL Query Analyzer overheen stapt?

Quod licet lovi, non licet bovi


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Zou volgens mij gelijk moeten zijn, mjah... :)
Wat ik meestal doe daarom is expliciet aangeven welk veld uit welke tabel ik wil hebben
select a.veld, b.veld
from tabel1 a, tabel2 b

Dan kunnen SQL Server of ADO lullen wat ze willen (:P) maar onduidelijkheid over welke velden ik nou bedoel kan er dan iig niet zijn. Probeer het eens en kijk of je dan wel de juiste resultaten krijgt. (en het is sowieso een must als je een veld selecteerd wat in 2 tabellen voorkomt).

Exact expert nodig?


  • MrDry
  • Registratie: December 2001
  • Laatst online: 01-09 14:13

MrDry

Desperados!

Topicstarter
Ik heb het SQL statement aangepast....eigenlijk het zelfde verhaal...gaat prima in de SQL Query Analyzer maar VB bakt er nix van....

Iemand een idee?

SQLStatement = "SELECT A.Adres, A.Postcode, A.Plaats, AdT.Omschrijving FROM [rietvink].[dbo].[Persoon2Adres] P2A INNER JOIN [rietvink].[dbo].[AdresType] AdT ON AdT.ID = P2A.AdresType_ID INNER JOIN [rietvink].[dbo].[Adres] A ON P2A.Adres_ID = A.ID WHERE Persoon_ID='" & rsPersoon.Fields("PersoonID") & "'" & " UNION SELECT A.Adres, A.Postcode, A.Plaats,AdT.Omschrijving FROM [rietvink].[dbo].[Bedrijf2Adres] B2A INNER JOIN [rietvink].[dbo].[AdresType]AdT ON AdT.ID = B2A.AdresType_ID INNER JOIN [rietvink].[dbo].[Adres] A ON B2A.Adres_ID = A.ID WHERE Bedrijf_ID='" & rsPersoon.Fields("Bedrijf_ID") & "'"

Quod licet lovi, non licet bovi


  • MrDry
  • Registratie: December 2001
  • Laatst online: 01-09 14:13

MrDry

Desperados!

Topicstarter
MrDry schreef op 15 augustus 2002 @ 11:56:
Ik heb het SQL statement aangepast....eigenlijk het zelfde verhaal...gaat prima in de SQL Query Analyzer maar VB bakt er nix van....

Iemand een idee?

Het ging overigens wel goed in VB voordat ik een UNION gebruikte...zou dat er iets mee te maken kunnen hebben?


SQLStatement = "SELECT A.Adres, A.Postcode, A.Plaats, AdT.Omschrijving FROM [rietvink].[dbo].[Persoon2Adres] P2A INNER JOIN [rietvink].[dbo].[AdresType] AdT ON AdT.ID = P2A.AdresType_ID INNER JOIN [rietvink].[dbo].[Adres] A ON P2A.Adres_ID = A.ID WHERE Persoon_ID='" & rsPersoon.Fields("PersoonID") & "'" & " UNION SELECT A.Adres, A.Postcode, A.Plaats,AdT.Omschrijving FROM [rietvink].[dbo].[Bedrijf2Adres] B2A INNER JOIN [rietvink].[dbo].[AdresType]AdT ON AdT.ID = B2A.AdresType_ID INNER JOIN [rietvink].[dbo].[Adres] A ON B2A.Adres_ID = A.ID WHERE Bedrijf_ID='" & rsPersoon.Fields("Bedrijf_ID") & "'"

Quod licet lovi, non licet bovi


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Dat was quote ipv edit :P
Mjah Union zou er wel wat mee te maken kunnen hebben, voor dit soort queries maak ik meestal een stored procedure aan. Hoewel het misschien wel een beetje vreemd zou zijn als union het probleem is, volgens mij stuurt ADO de query gewoon door aan sql server, en dan zou het gewoon goed moeten zijn. Maar ja dat is het dus niet ;)
Stop t eens in een stored procedure, en kijk of het dan wel goed werkt. Als het dan ook niet werkt, moet het toch ergens anders in zitten. En als het dan wel werkt doet ADO blijkbaar toch stiekum meer dan dat ik denk ;)

Exact expert nodig?


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Even een reformat zodat ik het kon lezen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SQLStatement = "
SELECT A.Adres
      ,A.Postcode
      ,A.Plaats
      ,AdT.Omschrijving
FROM   [rietvink].[dbo].[Persoon2Adres] P2A
       INNER JOIN [rietvink].[dbo].[AdresType] AdT ON AdT.ID = P2A.AdresType_ID
       INNER JOIN  [rietvink].[dbo].[Adres] A ON P2A.Adres_ID = A.ID
WHERE  Persoon_ID='" & rsPersoon.Fields("PersoonID") & "'" & "
UNION
SELECT A.Adres
      ,A.Postcode
      ,A.Plaats
      ,AdT.Omschrijving
FROM   [rietvink].[dbo].[Bedrijf2Adres] B2A
       INNER JOIN [rietvink].[dbo].[AdresType]AdT ON AdT.ID = B2A.AdresType_ID
       INNER JOIN [rietvink].[dbo].[Adres] A ON B2A.Adres_ID = A.ID
WHERE Bedrijf_ID='" & rsPersoon.Fields("Bedrijf_ID") & "'"

Het zo lezende zou je het ook kunnen oplossen met een subquery waarin je de adres_id's ophaalt. Het joinen met de type tabel laat je dan gewoon in de hoofdquery staan.

  • MrDry
  • Registratie: December 2001
  • Laatst online: 01-09 14:13

MrDry

Desperados!

Topicstarter
Inderdaad, het was een Quote i.p.v. een edit...vroeger was dat toch edit, toch???

Maaru...ik ben net nieuw in SQL dus ik hoor hier allemaal nieuwe termen

1) wat is een stored procedure?
2) wat bedoelen jullie met een sub query?

p.s. Bedankt voor de reformat! :)

Quod licet lovi, non licet bovi


  • MrDry
  • Registratie: December 2001
  • Laatst online: 01-09 14:13

MrDry

Desperados!

Topicstarter
Nog ff een update op mijn laatste bevindigen...

SELECT [Adres_ID] AS ID, [AdresType_ID] FROM [rietvink].[dbo].[Bedrijf2Adres] WHERE Bedrijf_ID='4149' UNION SELECT [Adres_ID] AS ID, [AdresType_ID] FROM [rietvink].[dbo].[Persoon2Adres] WHERE Persoon_ID='3816'

Bovenstaand SQL statement gaat wel goed...de UNION schijnt dus te werken maar de JOINs maken er blijkbaar een bende van.....

Ik heb gezocht in de SQL Server Books Online naar de SubQuery's maar als ik het onderstaande statement gebruik krijg ik een foutmelding....wat doe ik fout?

SELECT [ID], [Adres], [Postcode], [Plaats], [OldID] FROM [rietvink].[dbo].[Adres] WHERE IN (SELECT [Adres_ID] AS ID, [AdresType_ID] FROM [rietvink].[dbo].[Bedrijf2Adres] WHERE Bedrijf_ID='4149' UNION SELECT [Adres_ID] AS ID, [AdresType_ID] FROM [rietvink].[dbo].[Persoon2Adres] WHERE Persoon_ID='3816')

Quod licet lovi, non licet bovi


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Je eerste query moet er als volgt uitzien:

SELECT [ID], [Adres], [Postcode], [Plaats], [OldID]
FROM [rietvink].[dbo].[Adres]
WHERE Adres_ID IN (
SELECT [Adres_ID] AS ID, [AdresType_ID]
FROM [rietvink].[dbo].[Bedrijf2Adres]
WHERE Bedrijf_ID='4149'
)

Never underestimate the power of


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Schrijf de joins eens om naar
from tabel1 t1 , tabel2 t2 , tabel3 t3
where t1.key=t2.key and t1.type = t3.type

misschien dat het dan wel werkt

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

cameodski schreef op 16 augustus 2002 @ 15:30:
Je eerste query moet er als volgt uitzien:

SELECT [ID], [Adres], [Postcode], [Plaats], [OldID]
FROM [rietvink].[dbo].[Adres]
WHERE Adres_ID IN (
SELECT [Adres_ID] AS ID, [AdresType_ID]
FROM [rietvink].[dbo].[Bedrijf2Adres]
WHERE Bedrijf_ID='4149'
)
dit geeft een syntax error (of zou het moeten geven) de subselect levert 2 velden op en je vergelijkt met 1 veld

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Oh sorry, ik had even niet naar de subquery gekeken. Die moet inderdaad alleen Adres_ID teruggeven.

Never underestimate the power of

Pagina: 1