[VB + ADO] Recordset niet sorteren

Pagina: 1
Acties:

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Het valt mij op dat bij mijn recordset autmatisch een sortering plaatstvindt.

Dit is eigelijk niet wenselijk, ik selecteer data uit een tabel doormiddel van
"Select * from Table"

Hierin zitten een aantal velden Zone1 t/m Zone12
Maar als ik de velden van de recordset doorloop dan krijg ik eerst
Zone1, Zone11, Zone12, Zone10, Zone2 etc

Heeft dit te maken met de recordset of met ADO.

Ik heb niks gedaan met een Sort of bookmark.

De data selecteer ik op deze manier (SelectData is de functie die een ADODB recordset retouneert)

Visual Basic:
1
2
'    'Retrieve the records in a recordset object
    Set SelectData = adoConnection.Execute(sQuery)


De adoconnection is opgebouwd naar een Access database.

[ Voor 7% gewijzigd door dominion99 op 26-05-2004 14:21 . Reden: Tabellen --> Velden ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Het antwoord dat je krijgt is waarschijnlijk gesorteerd op de primary key.

Als je binnen Access een sortering op de tabel hebt staan, wordt die automatisch doorgegeven aan de recordset die je in VB krijgt. Wil je zeker weten dat je de juiste volgorde hebt, sorteer dan op datgene waarop je de recordset gesorteerd wil hebben...

My personal website


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Ik zie het probleem hierin niet echt. Als je een specifieke volgorde wil, dan stel je die volgorde toch gewoon op in je select? Dat maakt je query wel langer, maar meteen ook sneller (heb ik ergens gelezen, niet slaan als het niet waar is ;)).
OZ-Gump schreef op 26 mei 2004 @ 13:37:
Het antwoord dat je krijgt is waarschijnlijk gesorteerd op de primary key.

Als je binnen Access een sortering op de tabel hebt staan, wordt die automatisch doorgegeven aan de recordset die je in VB krijgt. Wil je zeker weten dat je de juiste volgorde hebt, sorteer dan op datgene waarop je de recordset gesorteerd wil hebben...
Hij heeft het over de veldvolgorde, niet over de recordvolgorde. :)
Waar lees jij dat? Er wordt nergens over velden gesproken, maar wel over een sortering. Wanneer je een Select * from uitvoert, krijg je qua velden gewoon de volgorde terug die in je tabel staat.
offtopic:
Dat maakte ik op uit zijn vraag. En zoals je hieronder kan lezen klopte mijn vermoeden zelfs. :)

[ Voor 69% gewijzigd door NMe op 26-05-2004 15:13 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Hij heeft het over de veldvolgorde, niet over de recordvolgorde.
Waar lees jij dat? Er wordt nergens over velden gesproken, maar wel over een sortering. Wanneer je een Select * from uitvoert, krijg je qua velden gewoon de volgorde terug die in je tabel staat.

De records daarentegen kunnen anderes gesorteerd weergegeven worden.

My personal website


  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Het gaat mij dus om de velden. Access heeft ze op een bepaalde volgorde in de tabel staan (Zone1 t/m 12). Deze tabel heeft geen Primary Key voor de duidelijkheid.

Ik weet niet in mijn programma de volgorde van de velden. Ik weet alleen welke tabellen er zijn. Dus ik kan niet "Select Zone1, Zone2, Zone3" etc doen.

Op het moment is het resultaat van mijn recordset dus (op volgorde van uit lezen)
Zone1
Zone10
Zone11
Zone12
Zone2
Zone3
Etc

Ik lees de Fields uit doormiddel van een ForEach lus.

Verwijderd

Ik zou persoonlijk wel alle velden uitschrijven in een query statement. Dan voorkom je dit soort problemen en wanneer je tabeldefinitie wordt veranderd kan je nog steeds die velden ophalen (mits ze nog bestaan dan natuurlijk).

Je kan dan ook makkelijker door je de fieldscollectie van je recordset loopen, omdat altijd alles in dezelfde volgorde staat.

Dus uitschrijven imho.

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Misschien ben ik niet helemaal duidelijk, maar ik weet bij voorbaat niet welke velden er zijn laat staan welke database.

Ik heb een programma die moet weten hoe de structuur van een database eruit ziet. Deze structuur haal ik uit een database. Deze structuur (de velden dus) kan ik gebruiken om bijvoorbeeld grafieken te maken.

Ik vind het niet handig als de gebruiker een database opgeeft met een veld volgorde in een bepaalde tabel van:
Zone1, Zone2, Zone3, Zone4

En als het programma gebruikt wordt dat dan de volgorde voor selecteren anders is dus:
Zone1, Zone10, Zone11, Zone12, Zone2.

Dus uitschrijven kan niet.

[ Voor 3% gewijzigd door dominion99 op 26-05-2004 14:28 ]


Verwijderd

Goed punt (Niet uitschrijven)

Wat je wel kan doen is vragen of ze in plaats van Zone1, er Zone01 van maken. Of is dit ook geen optie?

En als dat niet kan misschien aliasen verzinnen voor je velden en die dan gesorteerd weergeven.

Volgens mij schiet ik nu je doel ook voorbij. Ik vind het wel raar dat een recordset voor jou de veldvolgorde gaat veranderen.

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Damn, ik zit helemaal verkeerd te kijken.

Ik heb even snel een recordset gemaakt die een "Select * from Table". De recordset heeft in dit geval wel de correcte volgorde van de tabellen.

Ik maak gebruik van het ADO schema om de velden op te halen, hier zit duidelijk een verschil in het resultaat.
Visual Basic:
1
adoConnection.OpenSchema(adSchemaColumns, Array(Empty, Empty, sFromTable))


Deze opdracht levert een recordset op die de velden schijnbaar in een andere volgorde heeft gezet.

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Ok nu ik mijn probleem heb gelokaliseerd is het ook makkelijker om op google te zoeken
http://support.microsoft.com/default.aspx?scid=kb;DE;299484

Je moet bij je recordset het volgende zetten
Visual Basic:
1
Recordset.Sort = "ORDINAL_POSITION"

Dan is het probleem opgelost, je kunt ook een andere driver gebruiken

[ Voor 34% gewijzigd door dominion99 op 26-05-2004 15:07 ]


Verwijderd

Ja volgens mij ook. Stom dat ik dat over het hoofd heb gezien 8)
Pagina: 1