Toon posts:

[SQL, Delphi, Interbase] Update query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een ListView die gevuld is met een aantal schappen. De gebruiker heeft deze schappen in een bepaalde volgorde gezet.

Nu moet er een update query uitgevoerd worden om de nieuwe positie van de schappen te bewaren. Dus het 1e schap krijgt positie 0, het 2e positie 1, enz....

De tabel is als volgt:
code:
1
2
3
4
5
6
Tabelnaam: BESTELBOEKSCHAPPEN
Velden: BESTELBOEKID     Integer not null (PK)
      SCHAPID       Integer not null (FK)
      POSITIE       Integer not null

      en nog een paar velden die nu niet van belang zijn

Nu kan ik natuurlijk voor iedere regel in de ListView een aparte update query maken:
code:
1
2
3
4
UPDATE BESTELBOEKSCHAPPEN
SET    POSITIE = 'hier de index van de regel in de ListView'
WHERE  BESTELBOEKID = '...' 
  AND  SCHAPID = '....'

Mijn vraag is nu of het misschien met 1 query kan, waardoor het een stuk sneller wordt?

Overigens het systeem is een multi-user systeem, dus het kan zijn dat een schap verwijderd is bij het proberen te wijzigen van de positie. Dat is geen probleem, hij zou dan gewoon met het volgende schap verder moeten gaan.

(Ik maak gebruik van Interbase 6.0)

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 23:25

Delphi32

Heading for the gates of Eden

Nee, zoals jij het beschrijft zul je voor elke regel in je listview een nieuwe query moeten uitvoeren.

Op zich hoeft dat op Interbase 6.0 geen bezwaar te zijn. Rond de 300 updates per seconde moet haalbaar zijn... en zoveel items heb je (hopelijk) niet in je GUI hangen :)

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

Goodielover

Only The Best is Good Enough.

Het kan niet in 1 query.
Je zult het dus gewoon moeten uitprogrammeren.
Als je het toch direct verwerkt wil hebben kan je ook iedere verplaatsing direct tot een update laten leiden. Dan kan je echter niet meer terug naar de oude situatie, tenzij je een transactie als die tijd kan laten openstaan.

Verwijderd

Topicstarter
Op maandag 15 juli 2002 15:27 schreef Goodielover het volgende:
Als je het toch direct verwerkt wil hebben kan je ook iedere verplaatsing direct tot een update laten leiden.
Nee dat wil ik juist niet, want dan kan je dus onnodig data verkeer krijgen. (Bijv gebruiker verplaatst schap x .... daarna zet hij die weer op oude plaats terug)

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

Goodielover

Only The Best is Good Enough.

Het kan dus niet, dus je krijgt al je dataverkeer onder de "Klaar"-knop.
Een alternatief kan nog zijn om een stored procedure te gebruiken waaraan je een array meegeeft met de nieuwe sortering. Dan vinden alle updates dus op de server plaats.
Op maandag 15 juli 2002 15:46 schreef tokkie het volgende:

[..]

Nee dat wil ik juist niet, want dan kan je dus onnodig data verkeer krijgen. (Bijv gebruiker verplaatst schap x .... daarna zet hij die weer op oude plaats terug)