[SQL/Access] een range updaten

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

  • RubenJ
  • Registratie: April 2002
  • Laatst online: 20-08 12:00
Ik ben bezig met een database te veranderen en alles wat eens in de zoveel tijd ge-update moet worden queries voor aan het maken, nou heb ik een kolom met achter elkaar opvolgende nummers die ook ge-update moeten worden
nu wou ik dus een query maken die de hele kolom update met een reeks (dus opeenvolgende getallen)
is dit mogelijk en hoe kan ik dit dan maken met de SQL View in Access?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Je bent een beetje vaag..

Bedoel je
SQL:
1
Update Tabelnaam Set kolomnaam = kolomnaam + 1

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je bedoeld dat jouw kolom meerdere waarden bevat ?

't ruikt hier naar een slecht datamodel.

https://fgheysels.github.io/


  • RubenJ
  • Registratie: April 2002
  • Laatst online: 20-08 12:00
gorgi_19 schreef op 10 September 2003 @ 10:59:
Je bent een beetje vaag..

Bedoel je
SQL:
1
Update Tabelnaam Set kolomnaam = kolomnaam + 1
dit zou misschien kunnen maar er moet iedere keer een hele nieuwe reeks in, dus er moet een heel nieuw getal komen te staan en niet het getal verhogen met 1, ik moet nu een reeks maken in excel en die kopieren naar de database maar dat loopt ook niet altijd lekker :(

  • RubenJ
  • Registratie: April 2002
  • Laatst online: 20-08 12:00
whoami schreef op 10 September 2003 @ 11:01:
Je bedoeld dat jouw kolom meerdere waarden bevat ?

't ruikt hier naar een slecht datamodel.
mijn kolom is nu zoiets

code:
1
2
3
4
5
6
7
8
9
|   Kolomnaam  | Kolomnaam2 |
| 11135-22865 |             |
| 11135-22866 |             |
| 11135-22867 |             |
| 11135-22868 |             |
| 11135-22869 |             |
| 11135-22870 |             |
| 11135-22871 |             |
| 11135-22872 |             |


En moet Bijvoorbeeld zo worden
code:
1
2
3
4
5
6
7
8
9
|   Kolomnaam  | Kolomnaam2 |
| 12145-685489 |            |
| 12145-685490 |            |
| 12145-685491 |            |
| 12145-685492 |            |
| 12145-685493 |            |
| 12145-685494 |            |
| 12145-685495 |            |
| 12145-685496 |            |

Dus inprinciepe moet de hele kolom geupdate worden

[ Voor 6% gewijzigd door RubenJ op 10-09-2003 11:18 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

offtopic:
idd, een slecht datamodel
Deze horen in 2 aparte kolommen thuis.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

De mensen hierboven hebben gelijk dat je datamodel een probleem is, maar dat helpt je niet (direct) naar een oplossing toe. Ten eerste: je kolom bevat geen getal, maar een string. Constructies met "+1" werken dus niet. Een mogelijke uitweg om te doen wat jij wil is het gebruik van een functie:

Maak in een module een functie aan (untested code, zie het als pseudocode):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function MyNewCode (Generiek As String, SpecifiekStart As Integer) As String
Static sGeneriek as String;
Static sSpecifiekStart as Integer;
Static sNextSpecifiek as Integer;

If (sGeneriek <> Generiek) or (SpecifiekStart <> sSpecifiekStart) Then
    'Reset!
    sGeneriek=Generiek
    sSpecifiekStart=SpecifiekStart
    sNextSpecifiek=SpecifiekStart
End If

MyNewCode=sGeneriek & sNextSpecifiek
sNextSpecifiek=sNextSpecifiek+1

End Function


In je query kan je nu de functie aanroepen om je nieuwe waarde te krijgen, waarbij je als argumenten je "12145-" en 685489 meegeeft. De truc zit hem in het gebruik van statische variabelen. Deze worden tussen aanroepen bewaard, zodat je er weer aan kan refereren. Omdat de argumenten tijdens het uitvoeren van een query niet wijzigen in dit geval, blijft hij in dezelde serie werken. Zodra je één van je argumenten veranderd, wordt een nieuwe serie gestart.

[ Voor 3% gewijzigd door ATS op 10-09-2003 11:49 ]

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Op dit voor elkaar te krijgen: 11135-22865 -> 12145-685489, gebruik dan de volgende stappen:
- Deel de string in tweeën (op basis van de lengte van de delen, of van de positie van de '-')
- Cast de delen naar een getal (vaak niet eens nodig)
- Tel een constante op bij de delen
- Stel een nieuwe string samen (getal1, '-', getal2)

Dit zou je kunnen doen met een functie, zoals hierboven geschreven, maar het kan ook met een enkele sql-update-query. Maar voor we die gaan voorkouwen (dat mag niet meer van curry684 ;)), maak ons maar eens duidelijk waarom je voor het opslaan van een numerieke range een veld van het type string gebruikt.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • RubenJ
  • Registratie: April 2002
  • Laatst online: 20-08 12:00
die nummers zijn de factuurnummers en de voorloopnummers (voor het streepje) zijn van de afdeling waar de factuur vandaan komt en de laatste nummers zijn het werkelijke factuurnummer

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Apart dat je die dan wil veranderen! Factuurnummers veranderen toch niet zomaar?
Waarom sla je die twee gegevens (afdeling en factuurnummer) niet gewoon in aparte velden op? Combineren in de output kan altijd nog...

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • RubenJ
  • Registratie: April 2002
  • Laatst online: 20-08 12:00
ATS schreef op 10 September 2003 @ 13:27:
Apart dat je die dan wil veranderen! Factuurnummers veranderen toch niet zomaar?
Waarom sla je die twee gegevens (afdeling en factuurnummer) niet gewoon in aparte velden op? Combineren in de output kan altijd nog...
Omdat er ieder jaar een nieuwe factuur uitgedraait moet worden van de service dus moet er een nieuw factuurnummer zijn omdat je niet 2 keer dezelfde kan gebruiken.
daar heb ik ook al over zitten denken maar dat vonden ze niks omdat het dat te complex zou worden met alle nummers en dergelijke

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik mag toch hopen dat je na een jaar de oude factuur niet weggooit/replaced maar een nieuwe factuur toevoegt, desnoods als kopie van de oude?!? 8)7

Professionele website nodig?


  • RubenJ
  • Registratie: April 2002
  • Laatst online: 20-08 12:00
curry684 schreef op 10 September 2003 @ 13:45:
Ik mag toch hopen dat je na een jaar de oude factuur niet weggooit/replaced maar een nieuwe factuur toevoegt, desnoods als kopie van de oude?!? 8)7
neej hoor dat zeker niet, en dan nog kunnen we ze als dat echt nodig zou zijn nog met de hand aanmaken
maarja dat doe natuurlijk niet ff met alle +/- 800 die binnen 2 weken de deur uit moeten zijn

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Duivenseboy schreef op 10 September 2003 @ 13:37:
[...]


Omdat er ieder jaar een nieuwe factuur uitgedraait moet worden van de service dus moet er een nieuw factuurnummer zijn omdat je niet 2 keer dezelfde kan gebruiken.
daar heb ik ook al over zitten denken maar dat vonden ze niks omdat het dat te complex zou worden met alle nummers en dergelijke
Dan nog zie ik het probleem niet zo. Afdeling is dan een constante en factuurnummer kan je laten autonummeren. Als je dan 800 facturen wilt kopieren, gebruik je
code:
1
2
INSERT INTO tabel (afdeling, anderevelden) SELECT afdeling + x, 
anderevelden FROM tabel
Heb je trouwens al geprobeerd mijn stappen in een updatequery te zetten?

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • RubenJ
  • Registratie: April 2002
  • Laatst online: 20-08 12:00
nee nog niet geprobeert maar zit nu tijdelijk op de helpdesk en heb de database niet ter beschikking dus ik ga morgen weer aan de slag, in iedergeval bedankt ik denk dat het wel gaat lukken als ik ze hier om kan praten :)
Pagina: 1