[Access97][VB]Waarde naar een record wegschrijven

Pagina: 1
Acties:

  • Vizorium-5
  • Registratie: Maart 2001
  • Laatst online: 23:25

Vizorium-5

Framerate = Life

Topicstarter
De situatie:

Ik heb een database gemaakt met daarin alle instalatie CD-roms van alle programma's die mijn stagebedrijf heeft. Een record bestaat uit de volgende velden:

[Volgnr],[Afdelingsnr],[Naam],[Opmerking],[Aantal CDs],[Geplaatst]

Nu moet er d.m.v. een rapport stikkertjes gedrukt worden met daarop:

[Volgnr],[Naam],[Aantal]

Het probleem:

Sommige programma's hebben meerdere CDs. Op het rapport zou moeten staan hoeveelste cd het is van het totaal. Dus bijvoorbeeld.

In de database staat het volgende:

[Volgnr],[Naam],[Aantal]
10, Epson Printersoftware, 3

Nu moet er op het rapport komen te staan:

[Volgnr],[Naam],[Aantal]
10, Epson Printersoftware , CD 1 van 3
10, Epson Printersoftware , CD 2 van 3
10, Epson Printersoftware , CD 3 van 3

Nu heb ik een hulptabel gemaakt

[Volgnr],[Afdelingsnr],[Naam],[Opmerking],[Aantal CDs],[Geplaatst],[Aantal van]

Om een printafdruk te maken moet je eerst het record selecteren in een formulier. Met een VB-scripje wordt dit record gekopieerd naar de hulptabel. Hierin wordt alles ingevuld behalve het veld [Aantal van]

Nu wil ik met een VB-scripje wil ik dus een waarde invullen in het veld [Aantal van] Bijvoorbeeld:

[Volgnr],[Afdelingsnr],[Naam],[Opmerking],[Aantal CDs],[Geplaatst],[Aantal van]

10, 3, Epson Printersoftware , , 3 , 28-03-2003, 1
10, 3, Epson Printersoftware , , 3 , 28-03-2003, 2
10, 3, Epson Printersoftware , , 3 , 28-03-2003, 3

Ik heb al zitten kijken in de help van Access. Maar dit kun je niet doen met SetValue.

Heeft iemand enig idee hoe ik dit kan doen? Of heeft iemand een (beter) idee hoe ik dit kan gaan doen?

Verwijderd

In het formulier waarin je het betreffende record kopieert naar de hulptabel, kan je toch gewoon de waarde [Aantal CDs] opvragen en die gebruiken in een loop?

Dus iets als:

[pseudocode]

for i = 1 to [Aantal CDs]
add new record met [Volgnr], [Afdelingsnr], ..., [Aantal van] = i
next i

[/pseudocode]

  • Rene59
  • Registratie: April 2000
  • Laatst online: 08-07 20:34
Ik zou geen veldnaam "aantal van" maken, maar gewoon een for loopje gebruiken bij het genereren van het rapport.
Ongeveer zoiets:

for intI = 1 to Aantal
[stuur naar rapport] Volgnr & ", " & Naam & ", " & "CD " & intI & " van " & Aantal
next intI

  • Vizorium-5
  • Registratie: Maart 2001
  • Laatst online: 23:25

Vizorium-5

Framerate = Life

Topicstarter
Maar het probleem is dat ik de waarde [Aantal CD's] niet uit de tabel kan uitlezen om de waarde te gebruiken voor:

For i = 1 to [Aantal CD's]

Dit kan ook wel, omdat er in de tabel meerdere records staan met verschillende waardes in [Aantal CD's]

Er moet dus eerst een record aangegeven worden waaruit de waarde [Aantal CD's] kan worden uitgelezen. Dit heb je ook nodig om iets weg te kunnen schijven in een record.

Maar hoe doe je dat :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Kijk eens hoe je het kan doen mbhv SQL.

Kijk oa eens naar het UPDATE statement.

https://fgheysels.github.io/


Verwijderd

Vizorium-5 schreef op 28 maart 2003 @ 11:26:
Maar het probleem is dat ik de waarde [Aantal CD's] niet uit de tabel kan uitlezen om de waarde te gebruiken voor:

For i = 1 to [Aantal CD's]
Je zei toch zelf dat je een record moest selecteren in het formulier en dat vervolgens dit record wordt gekopieerd naar de hulptabel...
Als je het record kopieert, heb je toch de gegevens die erin staan? Dus ook het veld [Aantal CDs]?

Ik neem aan dat je bijvoorbeeld een listbox in je formulier hebt, waarin je je record selecteert. Als in die listbox het volledige record staat, kan je de waarde van een willekeurige kolom opvragen.
Ook als je geen listbox hebt, moet je toch minstens ergens de key van het betreffende record hebben. Met een simpele Query of een DLookup kan je dan de waarde van elk veld van dat record opvragen.

  • Vizorium-5
  • Registratie: Maart 2001
  • Laatst online: 23:25

Vizorium-5

Framerate = Life

Topicstarter
Dit is de code die ik gebruik om de records te kopieëren. Er moet in het formulier het beginnr (het volgnr) en een eindnr (het volgnr) ingegeven worden.

Code:
Dim i As Integer

i = Forms!Print!Beginnr

label1:

If i <= Forms!Print!Eindnr Then

DoCmd.OpenTable "Vernieuwde software 1 maart 2003", acNormal, acReadOnly
'opend de tabel "Vernieuwde software 1 maart 2003

DoCmd.FindRecord i, acEntire, False, , False, , True
'zoekt het record op

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
'Selecteert het record

DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
'Kopieërt het record

DoCmd.OpenTable "Print", acNormal, acAdd
'Opend tijdelijke tabel

DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70
'Plakt het record in een nieuw record

DoCmd.Close acTable, "Vernieuwde software 1 maart 2003", acSaveNo
'Sluit tabel "Vernieuwde software 1 maart 2003"

DoCmd.Close acTable, "Print", acSaveYes
'Sluit tabel "Print"

i = i + 1
'Verhoogd de waarde i met 1

GoTo label1

Else

Exit Function

/Code:

Ik kopieër dus via tabellen, de gegevens komen niet in het formulier voor. Ik heb al geprobeerd om via het record selecteren en dan het veldnaam op te geven, maar dat werkt niet.

Verwijderd

Ok... ehm... tsja...
Zo zou ik het zelf niet doen... laat ik het daar maar op houden.

Ik vind persoonlijk de DoCmd.DoMenuItem maar een rare functie, ik vind het een beetje vreemd om vanuit VB code opties uit een menubalk aan te roepen, maar goed.. dat is mijn mening.

Ik doe zelf zulke dingen altijd met RecordSets, dus bijvoorbeeld (uit mijn hoofd):
code:
1
2
3
4
5
6
sql = "SELECT * FROM Tabel1 WHERE Volgnr = " & Nummer
Set db = CurrentDb
Set rs = db.OpenRecordSet(sql)
If Not rs.Eof Then
  rs.MoveFirst
End If


Vervolgens heb je in rs.Fields de velden van je record staan, dus kan je die gebruiken om ze te kopieren naar de hulptabel. Daarvoor kan je nog een RecordSet openen en dan rs.AddNew gebruiken, of een INSERT query maken. Bijvoorbeeld dus:
code:
1
2
3
4
5
6
7
8
9
sql = "SELECT * FROM Hulptabel"
Set rshulp = db.OpenRecordSet(sql)
For i = 1 To rs.Fields("Aantal CDs")
  rshulp.AddNew
  rshulp.Fields("Volgnr") = rs.Fields("Volgnr")
  rshulp.Fields("Aantal van") = i
  ..
  rshulp.Update
Next i


Of zoals gezegd met behulp van een INSERT query:
code:
1
INSERT INTO Hulptabel ("Volgnr", ..., "Aantal van") VALUES (rs.Fields("Volgnr"), ..., i)
Pagina: 1