[VB6/ADO] PK/constraints op een disconnected recordset

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008
  • Reageer

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
In een VB6 applicatie probeer ik een disconnected recordset te genereren met een primary key als volgt:
code:
1
2
3
4
5
6
7
8
9
Set rs = New ADODB.Recordset
With rs
    .CursorLocation = adUseClient
    .CursorType = adOpenDynamic
    .ActiveConnection = Nothing
    .Fields.Append "Word", adVarWChar, 64, adFldKeyColumn
    .Fields.Append "Articlenr", adVarWChar, 16
    .Open
End With


In deze tabel sla ik woorden op. Omdat ik wil dat woorden maar 1 keer worden opgeslagen is de kolom "Word" tevens de primary key (zie adFldKeyColumn) van de tabel. Nu ga ik deze recordset echter vullen als volgt:
code:
1
2
3
4
5
6
7
8
rs.AddNew
rs.Fields("Word") = "Hallo"
rs.Update
 
rs.AddNew
rs.Fields("Word") = "Hallo"
rs.Update
MsgBox rs.RecordCount

Het 2e record dat ik wil toevoegen geeft geen foutmelding terwijl ik normaal gesproken een "duplicate key" error zou moeten krijgen.

Als workaround voor dit probleem moet ik nu iedere keer handmatig in de recordset zoeken of het woord voorkomt en alleen toevoegen indien het woord niet bestaat, maar dit werkt zeer vertragend.
Weet iemand hoe ik ervoor kan zorgen dat dit veld een echte primary key wordt of hoe ik op het veld een unique constraint kan leggen?

Volgens http://www.devguru.com/Te...ref/field_attributes.html zou de adFldKeyColumn constante ervoor moeten zorgen dat het veld een primary key wordt, maar dat lijkt dus niet te werken:

P.S: Ik weet dat ik dit met .NET datasets wel voor elkaar kan krijgen, maar deze applicatie is nog in VB6 geschreven.

It’s nice to be important but it’s more important to be nice


  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

Hee neef :)

Volgens msdn is het dan weer geen geldig attribuut van de append methode van het field object (net dat ene attribuut is het verschil tussen die pagina op devguru en de msdn pagina): http://msdn.microsoft.com...cstfieldattributeenum.asp

Misschien dat je adFldKeyColumn nog moet definieren? Kwam dit iig vaker tegen bij mn kleine (moet eik nuttig bezig zijn hier :)) zoektocht, echter werden daar ook de andere eventuele attributen gedefinieerd.
code:
1
Const adFldKeyColumn = &H00008000

edit:
Misschien blaat ik ook wel onzin.. als het nog niet gedefinieerd zou zijn had ie wel met een foutmelding op de proppen moeten komen denk

[ Voor 13% gewijzigd door Sappie op 09-08-2005 15:23 ]

Specs | Audioscrobbler


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Hey neef, durf je je zomaar over de schutting van W&G te wagen? :P

De adFldKeyColumn constante is wel gedefineerd en heeft ook de juiste waarde. De recordset zal de unique constraint echter alleen respecteren als de constraint wordt geimporteerd vanuit een bestaande datasource uit een tabel waarin de constraint is gedefineerd.
Een dataset in .NET is wat dat betreft veel uitgebreider qua mogelijkheden, zie ook de link hieronder:
http://msdn.microsoft.com...on/html/vbcondatasets.asp

Ik heb mijn probleem overigens opgelost door de woorden ook in een Scripting.Dictionary object op te slaan en voor het toevoegen van een woord te kijken of het woord al in de dictionary staat. Het onderliggende algoritme van een Dictionary is een HashTable dus dat is erg efficient en snel voor dit soort zaken. Helaas zit ik voor deze applicatie voorlopig nog vast aan VB6 dus ik moet soms erg creatief zijn ;)

It’s nice to be important but it’s more important to be nice