Toon posts:

Access -> cursors ja/nee? transacties?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Op dit moment ben ik bezig met een access 2000 applicatie. Onderdeel is o.a. import en export ASCII files.
Op dit moment gebruik ik geen cursors, alleen directe SQL queries (SELECTs, INSERTs, UPDATEs). Wanneer de mdb op het netwerk staat, gaat de performance goed naar beneden (voor elke select wordt de hele tabel overgehaald door Access).

Daarnaast wil ik dat een import geheel wordt gecanceld wanneer er een fout in zit, of wanneer de gebruiker cancel drukt. Ik heb al de acties dus in een transactie gegoten (BeginTrans / CommitTrans / Rollback). Helaas lockt een BeginTrans data pages, die groter kunnen zijn dan de gewijzigde records. Dit betekent dat in een multi user omgeving andere users import errors krijgen vanwege record locks. Hier heb ik zonder transactie geen last van, maar dan kan ik niet eenvoudig de importslag ongedaan maken met Rollback.

Iemand een scherp idee hoe ik e.e.a. kan versnellen en verbeteren?
Het moet wel in Access blijven, SQL Server oid is geen optie op dit moment. 't Moet een file server db zijn.

  • apyss
  • Registratie: April 2000
  • Laatst online: 02-12-2024
Je wilt volgens mij meer dan eigenlijk kan. Je kunt Access db's inderdaad gebruiken op een shared netwerk, maar je hebt wel een aantal restricties:
- Er draait op de server geen database-service, dus je kan niet verwachten dat queries op de server worden uitgevoerd. Een tabel moet eerst in z'n geheel naar de client worden gekopieerd voordat er daar een query kan worden uitgevoerd.
- Doordat er geen service draait is er er ook geen centrale controle mogelijk op wie waar mee bezig is. Access lost dit op door locking te gebruiken. Dit werkt prima, zolang er maar niet teveel users zijn.

Kortom: voor een dubbeltje op de eerste rang kan niet. Dan moet je of een db-server installeren.

Verwijderd

hij zal natuurlijk nooit de performantie van een ECHTE database halen, maar dat gaf hij zelf al aan.

gebruik je DAO of ADO...
en hoe gebruik je dat: via ODBC, jet driver, ole db, ....

Je kan ook nog wat experimenteren met de parameters:
welke parameters bij het aanmaken van je connectie...
welke parameters bij het aanroepen van je query (read only)
welke parameters bij het aanroepen van je statements (read/write)

en er zijn er nog hoor ;)

Vraag me nu niet wat de beste settings zijn, want dat hang per geval af..
maar volgens mij kun je de locking nog wel optimaliseren zodat het toch nog wat performanter wordt.

access kan wel wat sql niet zomaar kan:
database op andere computer (netwerk)
open connectie, start transactie, voer query uit
unplug je netwerkkabel
voer een aantal queries uit
steek je kabel terug in
commit

no problem,
probeer dat maar eens met een sql

(ps ik ben anti-access, maar het heeft zen goede kantjes...)

Verwijderd

Topicstarter
ik gebruikte DAO met Jet engine, en ben nu aan het testen met ADO + clientside cursors
access kan wel wat sql niet zomaar kan:
database op andere computer (netwerk)
open connectie, start transactie, voer query uit
unplug je netwerkkabel
voer een aantal queries uit
steek je kabel terug in
commit
Volgens mij werkt dit alleen als de overige queries op de zelfde tabel zijn als de eerste.... anders zou ie toch echt je db moeten benaderen