|
|
--------------------------------------------------------------------------------
Quick Links | Home | Worldwide
Search Microsoft.com for:
Microsoft Discussion Groups Home | Communities Home | Communities Worldwide
Bekend: Volgorde niet juist bij queries in Access via ODBC? in SQL Server
| | Help
Search For: Select Discussion Group or set of Discussion Groups to
search In: Arabic Bulgarian Chinese - PRC Chinese - Hong Kong S.A.R.
Chinese - Taiwan Czech Danish Dutch Servers Servers algemeen
Exchange Server IIS ISA Sharepoint Smallbiz SMS SQL
Server English Finnish French - Belgium French German Greek Hebrew Hungarian
Italian Japanese Korean Latvia Lithuania Nordic Norwegian Polish Portuguese -
Brazil Portuguese - Portugal Romanian Russian Slovenia Spanish Swedish
Switzerland Thai Turkish Ukraine Urdu Test
Jos 11/14/2006 3:03 AM PST
Question
Hallo,
Normaal stel ik mijn vragen bij Office/Access, maar dit lijkt mij meer een
SQL server vraag. Ons personen pakket draait op een SQL 2000 Server database
en de makers van dat pakket hebben ons verwezen naar Access voor het maken
van queries.
De laatste tijd konstateer ik echter dat soms (vooral de eerste keer) de
ORDER BY niet (of niet goed) is uitgevoerd bij een Select statement. Hierdoor
hebben personen niet op een lijst gestaan, die daar wel op hadden moeten
staan en hangt ons een boete van €100.000,- boven het hoofd.
Is dit probleem bekend of is dit de eerste keer?
--
Jos
Was this post helpful to you?
Reply Top
Hugo Kornelis 11/27/2006 3:06 PM PST
On Tue, 14 Nov 2006 03:04:02 -0800, Jos wrote:
>Hallo,
>
>Normaal stel ik mijn vragen bij Office/Access, maar dit lijkt mij meer een
>SQL server vraag. Ons personen pakket draait op een SQL 2000 Server database
>en de makers van dat pakket hebben ons verwezen naar Access voor het maken
>van queries.
>De laatste tijd konstateer ik echter dat soms (vooral de eerste keer) de
>ORDER BY niet (of niet goed) is uitgevoerd bij een Select statement. Hierdoor
>hebben personen niet op een lijst gestaan, die daar wel op hadden moeten
>staan en hangt ons een boete van €100.000,- boven het hoofd.
>Is dit probleem bekend of is dit de eerste keer?
Beste Jos,
Sorry dat je vraag zo lang onbeantwoord is gebleven.
Dit is geen bekend probleem. Kun je wellicht iets meer informatie geven?
(Liefst een compleet repro script, dus een CREATE TABLE opdracht, een
aantal INSERT opdrachten en dan de SELECT opdracht die de resultaten in
de ongewenste volgorde laat zien).
--
Hugo Kornelis, SQL Server MVP
Did this post answer the question?
Reply Top
Jos 11/27/2006 11:35 PM PST
Hugo,
Ik heb een van mijn queries nader onderzocht en volgens mij gevonden,
wanneer het fout gaat.
Function VolgOrdeFout()
Dim Rcd As Long
Dim Con As DAO.Recordset
Set Con = CurrentDb.OpenRecordset("Select prh_prs_id, prh_begin,
prh_einde, prs_id, prs_iw3nummer" & _
", prs_achternaam, prs_voorletters, vrv_omschrijving,
prs_roepnaam" & _
" From H_Persoon, Persoon" & _
" Where prh_Consulent_prs_id
= prs_id" & _
" Order By prh_prs_id, prh_begin desc;")
PrintRecord Con, "Na Open"
Stop
End Function
Function VolgOrdeGoed()
Dim Rcd As Long
Dim Con As DAO.Recordset
Set Con = CurrentDb.OpenRecordset("Select prh_prs_id, prh_begin,
prh_einde, prs_id, prs_iw3nummer" & _
", prs_achternaam, prs_voorletters, vrv_omschrijving,
prs_roepnaam" & _
" From H_Persoon, Persoon" & _
" Where prh_Consulent_prs_id
= Persoon.prs_id" & _
" Order By prh_prs_id, prh_begin desc;")
PrintRecord Con, "Na Open"
Stop
End Function
Public Function PrintRecord(Rcs As DAO.Recordset, Txt As String) As Boolean
Dim J As Integer
For J = 0 To Rcs.Fields.Count - 1
Debug.Print Txt, Rcs.AbsolutePosition, J, Rcs.Fields(J).Name,
Rcs.Fields(J).Value
Next J
End Function
Resultaat Window Direkt na aanroep VolgordeFout():
Na Open 0 0 prh_prs_id 2469
Na Open 0 1 prh_begin 01-07-01
Na Open 0 2 prh_einde 09-09-2999
Na Open 0 3 prs_id 4908
Na Open 0 4 prs_iw3nummer 100002
Na Open 0 5 prs_achternaam Bruin
Na Open 0 6 prs_voorletters Ton
Na Open 0 7 vrv_omschrijving de
Na Open 0 8 prs_roepnaam
Resultaat Window Direkt na aanroep VolgordeGoed():
Na Open 0 0 prh_prs_id 2457
Na Open 0 1 prh_begin 01-02-01
Na Open 0 2 prh_einde 09-09-2999
Na Open 0 3 prs_id 4908
Na Open 0 4 prs_iw3nummer 100002
Na Open 0 5 prs_achternaam Bruin
Na Open 0 6 prs_voorletters Ton
Na Open 0 7 vrv_omschrijving de
Na Open 0 8 prs_roepnaam
Zoals te zien is, is na aanroep VolgordeFout() het eerste record ongelijk
(hoger) dan na aanroep VolgordeGoed() (lager).
Het enige verschil is de kwalificatie Persoon.prs_id bij VolgordeGoed(), die
ontbreekt bij VolgordeFout().
Je zou natuurlijk kunnen zeggen: altijd kwalificeren, probleem opgelost.
Maar het punt is dat ik had het niet verwacht en je zou tenminste een
foutmelding moeten krijgen.
Als meer informatie nodig is, kan en wil ik dat graag horen.
--
Jos
"Hugo Kornelis" wrote:
Click to show or hide original message or reply text.
> On Tue, 14 Nov 2006 03:04:02 -0800, Jos wrote:
>
>
> Beste Jos,
>
> Sorry dat je vraag zo lang onbeantwoord is gebleven.
>
> Dit is geen bekend probleem. Kun je wellicht iets meer informatie geven?
> (Liefst een compleet repro script, dus een CREATE TABLE opdracht, een
> aantal INSERT opdrachten en dan de SELECT opdracht die de resultaten in
> de ongewenste volgorde laat zien).
>
> --
> Hugo Kornelis, SQL Server MVP
>
Was this post helpful to you?
Reply Top
Hugo Kornelis 11/28/2006 12:38 PM PST
On Mon, 27 Nov 2006 23:36:02 -0800, Jos wrote:
>Hugo,
>
>Ik heb een van mijn queries nader onderzocht en volgens mij gevonden,
>wanneer het fout gaat.
(knip)
Hoi Jos,
Goed, dat geeft een mooi startpunt. Als ik de VB (?) code weglaat en
alleen de queries bekijk, dan heb ik deze query die een verkeerde
volgorde geeft:
SELECT prh_prs_id, prh_begin, prh_einde, prs_id, prs_iw3nummer,
prs_achternaam, prs_voorletters, vrv_omschrijving, prs_roepnaam
FROM H_Persoon, Persoon
WHERE prh_Consulent_prs_id
= prs_id
ORDER BY prh_prs_id, prh_begin DESC;
En deze query die een goede volgorde geeft:
SELECT prh_prs_id, prh_begin, prh_einde, prs_id, prs_iw3nummer,
prs_achternaam, prs_voorletters, vrv_omschrijving, prs_roepnaam
FROM H_Persoon, Persoon
WHERE prh_Consulent_prs_id
= Persoon.prs_id
ORDER BY prh_prs_id, prh_begin DESC;
Het enige verschil is de kwalificatie van Persooon.prs_id. Nu is sowieso
mijn advies om in elke query die twee of meer tabellen gebruikt altijd
alle kolommen te kwalificeren (bij voorkeur via een mnemonische alias
voor de tabel, om onnodig tikwerk en onleesbare code te voorkomen), maar
ik zie niet hoe dat in dit geval tot een andere sortering kan leiden.
Om te beginnen wil ik je vragen de twee bovenstaande queries via knippen
en plakken in Query Analyzer (SQL Server 2000) of SQL Server Management
Studio (SQL Server 2005) over te nemen en dan uit te voeren. Hoe zien de
resultaten er uit? Zoals verwacht? Een foutmelding? Of krijg je nu
dezelfde verkeerde volgorde te zien?
Als de queries in QA/SSMS wel werken zoals jij dat wilt, dan kan de fout
alleen maar liggen in de middleware of in jouw code. Ik weet zelf vrij
weinig van VB, dus ik kan je dan niet verder helpen. Wellicht kun je in
dat geval je licht eens opsteken op de Forums van VBcentral; je komt
daar via www.vbcentral.nl, en dan klikken op "Forums".
Herhaalt het probleem zich in QA of SSMS, dan is het dus wel een SQL
probleem en dan kan ik het vrijwel zeker oplossen - maar alleen als je
de repro code post waar ik in mijn vorige antwoord al om vroeg.
Graag hoor ik het resultaat van je!
--
Hugo Kornelis, SQL Server MVP
Did this post answer the question?
Reply Top
Jos 11/29/2006 3:55 AM PST
Hallo Hugo,
Ik heb gedaan wat je gevraagd hebt: ik heb deze query in QA geplakt:
Database: iw3_test
SELECT prh_prs_id, prh_begin, prh_einde, prs_id,
prs_iw3nummer,
prs_achternaam, prs_voorletters,
vrv_omschrijving, prs_roepnaam
FROM VHPersoon, VDPersoon
WHERE prh_Consulent_prs_id
= prs_id
ORDER BY prh_prs_id, prh_begin DESC;
Reslutaat: Juiste volgorde: (Export uit QA)
2457,2001-02-01 00:00:00.000,2999-09-09
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2457,1899-12-31 00:00:00.000,2001-02-01
00:00:00. 000,4908,100002,Brui
n,Ton,de,
.......
2465,1999-01-01 00:00:00.000,2999-09-09
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2465,1993-06-03 00:00:00.000,1999-01-01
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2465,1899-12-31 00:00:00.000,1993-06-03
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2467,2005-09-01 00:00:00.000,2999-09-09
00:00:00. 000,4929,100036,Scha
rbay,A.E.,,Audrey
2467,2004-06-01 00:00:00.000,2005-09-01
00:00:00. 000,4925,100032,Rode
nhuis,Linda,,
2468,2004-06-01 00:00:00.000,2999-09-09
00:00:00. 000,4968,100079,Laar
,Melanie,van,
2468,2003-01-01 00:00:00.000,2004-06-01
00:00:00. 000,4925,100032,Rode
nhuis,Linda,,
2468,2000-07-01 00:00:00.000,2003-01-01
00:00:00. 000,4925,100032,Rode
nhuis,Linda,,
2468,1999-01-01 00:00:00.000,2000-07-01
00:00:00. 000,4925,100032,Rode
nhuis,Linda,,
2468,1899-12-31 00:00:00.000,1999-01-01
00:00:00. 000,4925,100032,Rode
nhuis,Linda,,
2469,2001-07-01 00:00:00.000,2999-09-09
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2469,1999-01-01 00:00:00.000,2001-07-01
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2469,1899-12-31 00:00:00.000,1999-01-01
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2471,2003-01-01 00:00:00.000,2999-09-09
00:00:00. 000,4908,100002,Brui
n,Ton,de,
2471,2002-11-07 00:00:00.000,2003-01-01
00:00:00. 000,4925,100032,Rode
nhuis,Linda,,
2471,2002-07-01 00:00:00.000,2002-11-07
00:00:00. 000,4925,100032,Rode
nhuis,Linda,,
Als ik met de cursor over de (gekoppelde) tabel H_Persoon beweeg zie ik:
ODBC;DATABASE=iw3_te
st;DSN=iw3_test;TABL
E=dbo.VHPersoon
en bij tabel Persoon:
ODBC;DATABASE=iw3_te
st;DSN=iw3_test;TABL
E=dbo.VDPersoon
Daarna het de query in Access nogmaals uitgevoerd (om te kijken of ook nu de
fout weer optrad) en het resultaat is nog steeds gelijk (dus foute volgorde)
Mijn eerste voorzichtig vermoeden is dat het dan misschien (toch wee) aan de
ODBC koppeling ligt.
Enkele jaren geleden was er een ODBC koppeling aan (een oudere versie van
Iw3) de FoxPro database van het personen pakket.
Hierbij waren ook problemen, die volgens MicroSoft niet meer opgelost
(konden) worden, maar zouden problemen met SQL 2000 en Access koppeling zich
niet voordoen.
Mijn baas wil weten of en hoe wij (een deel van) de boete kunnen verhalen
Wat is hierbij uw advies?
--
Jos
"Hugo Kornelis" wrote:
Click to show or hide original message or reply text.
> On Mon, 27 Nov 2006 23:36:02 -0800, Jos wrote:
>
> (knip)
>
> Hoi Jos,
>
> Goed, dat geeft een mooi startpunt. Als ik de VB (?) code weglaat en
> alleen de queries bekijk, dan heb ik deze query die een verkeerde
> volgorde geeft:
>
> SELECT prh_prs_id, prh_begin, prh_einde, prs_id, prs_iw3nummer,
> prs_achternaam, prs_voorletters, vrv_omschrijving, prs_roepnaam
> FROM H_Persoon, Persoon
> WHERE prh_Consulent_prs_id
= prs_id
> ORDER BY prh_prs_id, prh_begin DESC;
>
> En deze query die een goede volgorde geeft:
>
> SELECT prh_prs_id, prh_begin, prh_einde, prs_id, prs_iw3nummer,
> prs_achternaam, prs_voorletters, vrv_omschrijving, prs_roepnaam
> FROM H_Persoon, Persoon
> WHERE prh_Consulent_prs_id
= Persoon.prs_id
> ORDER BY prh_prs_id, prh_begin DESC;
>
> Het enige verschil is de kwalificatie van Persooon.prs_id. Nu is sowieso
> mijn advies om in elke query die twee of meer tabellen gebruikt altijd
> alle kolommen te kwalificeren (bij voorkeur via een mnemonische alias
> voor de tabel, om onnodig tikwerk en onleesbare code te voorkomen), maar
> ik zie niet hoe dat in dit geval tot een andere sortering kan leiden.
>
> Om te beginnen wil ik je vragen de twee bovenstaande queries via knippen
> en plakken in Query Analyzer (SQL Server 2000) of SQL Server Management
> Studio (SQL Server 2005) over te nemen en dan uit te voeren. Hoe zien de
> resultaten er uit? Zoals verwacht? Een foutmelding? Of krijg je nu
> dezelfde verkeerde volgorde te zien?
>
> Als de queries in QA/SSMS wel werken zoals jij dat wilt, dan kan de fout
> alleen maar liggen in de middleware of in jouw code. Ik weet zelf vrij
> weinig van VB, dus ik kan je dan niet verder helpen. Wellicht kun je in
> dat geval je licht eens opsteken op de Forums van VBcentral; je komt
> daar via www.vbcentral.nl, en dan klikken op "Forums".
>
> Herhaalt het probleem zich in QA of SSMS, dan is het dus wel een SQL
> probleem en dan kan ik het vrijwel zeker oplossen - maar alleen als je
> de repro code post waar ik in mijn vorige antwoord al om vroeg.
>
> Graag hoor ik het resultaat van je!
>
> --
> Hugo Kornelis, SQL Server MVP
>
Was this post helpful to you?
Reply Top
Hugo Kornelis 12/5/2006 2:33 PM PST
Answer
On Wed, 29 Nov 2006 03:56:00 -0800, Jos wrote:
>Hallo Hugo,
>
>Ik heb gedaan wat je gevraagd hebt: ik heb deze query in QA geplakt:
>Database: iw3_test
(knip)
>Reslutaat: Juiste volgorde: (Export uit QA)
(knip)
>Als ik met de cursor over de (gekoppelde) tabel H_Persoon beweeg zie ik:
> ODBC;DATABASE=iw3_te
st;DSN=iw3_test;TABL
E=dbo.VHPersoon
>en bij tabel Persoon:
> ODBC;DATABASE=iw3_te
st;DSN=iw3_test;TABL
E=dbo.VDPersoon
>
>Daarna het de query in Access nogmaals uitgevoerd (om te kijken of ook nu de
>fout weer optrad) en het resultaat is nog steeds gelijk (dus foute volgorde)
>
>Mijn eerste voorzichtig vermoeden is dat het dan misschien (toch wee) aan de
>ODBC koppeling ligt.
>Enkele jaren geleden was er een ODBC koppeling aan (een oudere versie van
>Iw3) de FoxPro database van het personen pakket.
>Hierbij waren ook problemen, die volgens MicroSoft niet meer opgelost
>(konden) worden, maar zouden problemen met SQL 2000 en Access koppeling zich
>niet voordoen.
Hoi Jos,
Het lijkt inderdaad een probleem met de koppeling, en ik zou je dan ook
zeker adviseren eens een berichtje achter te laten in een groep die meer
op ODBC (al dan niet in combinatie met Access en/of SQL Server) gericht
is. Je moet dan wel uitwijken naar Engelstalige groepen. Een paar
suggesties (ik heb geen idee hoe actief ze zijn; ik heb ze gevonden door
te zoeken op "odbc" in een lijst met groepen):
microsoft.public.access.odbcclientsvr
microsoft.public.data.odbc
microsoft.public.sqlserver.odbc
Overigens durf ik op grond van de informatie in deze thread ook niet
voor 100% zeker uit te sluiten dat er toch iets aan de hand is in jullie
code, al kan ik niet bedenken wat dat dan is. (Bij sorteringsproblemen
denk ik zelf vaak aan sortering op een naar string geconverteerde waarde
in plaats van op de waarde zelf; dit kan sorteringen op datums of op
numerieke waardes behoorlijk overhoop gooien - hebben jullie daar al
naar gekeken?)
>Mijn baas wil weten of en hoe wij (een deel van) de boete kunnen verhalen
>Wat is hierbij uw advies?
Dat moet je aan een advocaat vragen. Ik ben geen advocaat.
--
Hugo Kornelis, SQL Server MVP
Did this post answer the question?
Reply Top
Jos 12/6/2006 6:55 AM PST
Hoi Hugo,
Ik dank je voor het trouw beantwoorden.
Ik zal de vraag op de jouw voorgestelde sites deponeren.
Ik ben ook geen advocaat, maar als ik het vergelijk met een auto: je koopt
legaal een nieuwe auto bij een autodealer en er blijkt schade voortgekomen
uit een constructie fout, dan is de maker van de auto toch ook aansprakelijk
voor de schade?
--
Jos
"Hugo Kornelis" wrote:
Click to show or hide original message or reply text.
> On Wed, 29 Nov 2006 03:56:00 -0800, Jos wrote:
>
> (knip)
> (knip)
>
> Hoi Jos,
>
> Het lijkt inderdaad een probleem met de koppeling, en ik zou je dan ook
> zeker adviseren eens een berichtje achter te laten in een groep die meer
> op ODBC (al dan niet in combinatie met Access en/of SQL Server) gericht
> is. Je moet dan wel uitwijken naar Engelstalige groepen. Een paar
> suggesties (ik heb geen idee hoe actief ze zijn; ik heb ze gevonden door
> te zoeken op "odbc" in een lijst met groepen):
> microsoft.public.access.odbcclientsvr
> microsoft.public.data.odbc
> microsoft.public.sqlserver.odbc
>
> Overigens durf ik op grond van de informatie in deze thread ook niet
> voor 100% zeker uit te sluiten dat er toch iets aan de hand is in jullie
> code, al kan ik niet bedenken wat dat dan is. (Bij sorteringsproblemen
> denk ik zelf vaak aan sortering op een naar string geconverteerde waarde
> in plaats van op de waarde zelf; dit kan sorteringen op datums of op
> numerieke waardes behoorlijk overhoop gooien - hebben jullie daar al
> naar gekeken?)
>
>
> Dat moet je aan een advocaat vragen. Ik ben geen advocaat.
>
> --
> Hugo Kornelis, SQL Server MVP
>
Was this post helpful to you?
Reply Top
Return to Microsoft Communities Notify me of replies
Manage Your Profile |Rules of Conduct |Contact Us
© 2006 Microsoft Corporation. All rights reserved. Terms of Use |Trademarks
|Privacy Statement
--
Jos
|
|