Toon posts:

[Acces xp] paar probleempjes

Pagina: 1
Acties:

Verwijderd

Topicstarter
hoi, ik heb een aantal problemen in acces, hopelijk zitten hier een aantal experts die me kunnen helpen.

1) Ik heb een formulier(een doorlopend) en ik zou willen dat in het eerste tekstvak de standaardwaarde het nummer van de record is. (dus 1ste record "1"). Ik heb reeds gegoogled maar ik ben niets bruikbaars tegen gekomen.

2) Wanneer je iemand wil toevoegen aan de database opent eerst een appart formulier. waarin een automatisch gegenereerde id staat en 2 lege tekstvakken (1 voor de naam en 1 voor de gemeente).
De bedoeling hiervan is om als je op de knop "Toevoegen" klikt, access zoekt in mijn tabel als die persoon uit die gemeente er nog niet inzit. Dit is geen probleem, maar daarna zou het formulier moeten gesloten worden en de waarden ingevuld in het hoofd formulier (waar op de knop gedrukt werd om een persoon toe te voegen.) misschien is dit wat onduidelijk, dus heb ik hier een screenshot bijgestoken.
http://users.skynet.be/jellepunk/probleem.jpg
Hier zie je dus de 2 formulieren. Aan de knop in het hoofdformulier (de "+") hangt deze code
[code]
Private Sub cmd_nieuw_Click()
'record opslaan
DoCmd.Save
'nw nummer
Dim maxnr As String, nwnummer As String
maxnr = DMax("[klant]", "TBL_Klanten", "[klant] like '" & 1 & "*'")
nwnummer = "1" & Format(Val(Mid(maxnr, 2, 4)) + 1, "0000")
'FRM_Toevoegen Openen
DoCmd.OpenForm "FRM_toevoegen"
'het nummer invullen
[Forms]![frm_toevoegen]!
code:
1
2
3
 = nwnummer

End Sub

en aan de knop toevoegen uit het formulier toevoegen hangt deze code
[code]
Private Sub cmd_toevoegen_Click()
On Error GoTo Err_cmd_toevoegen_Click
'recordset definiëren
Dim dbs As Database, rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl_klanten", dbOpenDynaset)

'de namen uit het formulier halen
Dim zoeknaam As String, zoekgemeente As String, zoekcode As String
zoekcode = Me!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
zoeknaam = Me![naam]
zoekgemeente = Me![gemeente]
'kijken als het nummer wel juist is
rst.FindFirst "[klant] = '" & zoekcode & "'"
If rst.NoMatch = True Then
    'kijken als het der nog niet inzit
    rst.FindFirst "[naam klant] = '" & zoeknaam & "' and [plaats] = '" & zoekgemeente & "'"
    If rst.NoMatch = True Then
        'nog niet in de tabel
        DoCmd.Close
        DoCmd.GoToRecord , , acNewRec
        Me![Klant] = code
        Me![naam klant] = zoeknaam
        Me![Plaats] = zoekgemeente
    Else
     'zit er al in
      Dim antw As String
            antw = MsgBox("Er is al iemand met deze naam in de database opgenomen. Hij/Zij woont in de " & rst![adres] & ". wilt u deze persoon toch toevoegen?", 324, "Klant toevoegen")
                If antw = 6 Then
                    DoCmd.Close
                    DoCmd.GoToRecord , , acNewRec
                    Me![Klant] = code
                    Me![naam klant] = zoeknaam
                    Me![Plaats] = zoekgemeente
                Else
                    MsgBox (zoeknaam & " werd niet toegevoegd.")
                End If
    End If
Else
    MsgBox ("dit klantnummer is reeds in gebruik!")
End If

rst.Close

DoCmd.Close , "FRM_toevoegen"


                
Exit_cmd_toevoegen_Click:
    Exit Sub

Err_cmd_toevoegen_Click:
    MsgBox Err.Description
    Resume Exit_cmd_toevoegen_Click
    
End Sub


ik krijg als foutmelding dat de expressie verwijst naar een object dat reeds gesloten is.

3)
Ik wil een subformulier gebruiken om te zoeken maar daarin staat een keuzelijst met invoervak ZONDER rijbron. Nu wil ik met vba die rijbron aanpassen maar dat wil niet lukkn. Ik heb

code:
1
forms.frm_zoeken.veldzoeken.rowsource = "qry_veldlijst_klanten"

maar hier heeft hij spontane foutmeldingen

alvast bedankt om alles een door te nemen. hopelijk weet er iemand raad

[ Voor 21% gewijzigd door Verwijderd op 24-03-2005 20:20 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 19:01

Boss

+1 Overgewaardeerd

1
Is in een formulier bijna niet te doen zonder met VBA aan de slag te gaan. Je zou het recordID kunnen gebruiken, maar daar kunnen gaten in komen als je verwijderingen hebt gedaan. Waarvoor is dit nodig? Vaak is er wel iets beters te bedenken.

2
Waarom zou je het uniek zijn van naam/gemeente combinatie niet gewoon verwerken dmv een key in de tabel? Ik denk dat het onnodig lastig is om er een extra formulier voor te openen.

3
Je kan het proberen door goed onderscheid te maken tussen een . en ! in je verwijzingen. In Access gebruik je een . als het object na de punt een access-object of propery is. Een ! gebruik je om naar door de gebruiker gedefinieerde objecten of properties te verwijzen. Het zou dan worden:
code:
1
forms!frm_zoeken!veldzoeken.rowsource = "qry_veldlijst_klanten"

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Boss schreef op vrijdag 25 maart 2005 @ 15:26:

3
[...] In Access gebruik je een . als het object na de punt een access-object of propery is. Een ! gebruik je om naar door de gebruiker gedefinieerde objecten of properties te verwijzen. Het zou dan worden:
[...]
Onzin! Een punt duidt op een methode / propertie, al dan niet custom; een ! duidt op een lid van een collectie. Dat soms een punt gebruikt kan worden waar een ! hoort heeft te maken met die die vermaledijde defaultproperties. Vergelijk:

rs.edit
rs!veld2='bla'
rs.fields("veld2")='blabla'
rs.update

Forms!frm1, Forms.frm1, Forms.Item("frm1"): het werkt allemaal.
Overigens is de eerste vorm wel sneller dan de volgende 2, volgens ms, en netter volgens mij.

@TS: Welke foutmeldingen?

o wacht eens even: je keuzelijst staat op een subformulier? Dan is dat geen lid van de collectie forms maar een object dat je opvraagt met de eigenschap form van een control van het hoofdformulier:
forms![hoofdformulier]![controlwaarinsubzit].form![keuzelijst].rowsource =

[ Voor 26% gewijzigd door Lustucru op 25-03-2005 18:39 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
@Niesje
forms![hoofdformulier]![controlwaarinsubzit].form![keuzelijst].rowsource =
die control waar sub in zit is dat dan de formulier voettekst?

@Boss
1.
dit is nodig omdat ik een formulier heb gemaakt om een factuur te maken. Dus gekoppeld aan een tabel die er zo uitziet

FactuurnummerFactuurregelKlantnummerArtikelcodeAantal
001121001BOPT-100015
001221001BOPT-100024
001321001BOPT-100034
002121002BOPT-100014

Ik zou het regelnummer automatisch willen laten invullen, oplopend, dit is dan om te sorteren in mijn rapport.
Maar ik heb al gemerkt dat ik met een probleem zit. Ik zou willen dat in mijn formulier de factuurnummers 1 record zouden vormen met iedere keer een aantal factuurnummer daaronder. Ik wil dus hebben. Factuur 001 met factuurregel 1 - 2 - 3 en zo verder. Ik zou dus met een hoofd en sub formulier werken maar ik weet niet hoe ik dit moet doen. Misschien door mijn tabel te splitsen in 2 tabellen, het factuurnummer en de klant en dan de rest in een andere tabel, maar dan zit ik met de vraag, hoe moet ik die 2 dan koppelen(in relaties en ook sub- en hoofdformulier)? Dus dat nummer zou oplopend moeten ingesteld worden omdat de gebruiker niet telkens dat zou moeten intikken (standaardwaarde).

2.
Ik vind deze wijze praktischer, omdat het wel kan dat 2dezelfde klanten toegevoegd kunnen worden. Ik denkt niet dat je dit met een primaire sleutel zo gemakkelijk kan oplossen. Ook wordt het formulier geopend om te zorgen dat het automatisch gegenereed nummer daar nog kan gewijzigd worden, eens toegevoegd is dit niet meer mogelijk.
3. Ik heb nu aan die knop dit gekoppeld
code:
1
Me.Form![FRM_Zoeken]![zoekveld].RowSource = "qry_veldlijst_klanten"

pluspunt: ik krijg geen foutmelding meer
minpunt : er staat niets die keuzelijst.
(het zou toch niets te maken hebben met het feit dat het een keuzelijst is die ingesteld staat op "lijst met velden?")

[ Voor 8% gewijzigd door Verwijderd op 26-03-2005 14:52 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 19:01

Boss

+1 Overgewaardeerd

Ik zou dus met een hoofd en sub formulier werken maar ik weet niet hoe ik dit moet doen. Misschien door mijn tabel te splitsen in 2 tabellen, het factuurnummer en de klant en dan de rest in een andere tabel, maar dan zit ik met de vraag, hoe moet ik die 2 dan koppelen(in relaties en ook sub- en hoofdformulier)? Dus dat nummer zou oplopend moeten ingesteld worden omdat de gebruiker niet telkens dat zou moeten intikken (standaardwaarde).
Dat is inderdaad de beste (enige goede) oplossing. Ik zou zeggen: bekijk de voorbeelddatabase 'noorderwind' eens. Ik kan hier wel alles uittypen over hoofd/subformulieren, relaties etc etc maar als je 1x een goed voorbeeld ziet snap je het een stuk sneller.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
ik weet dat die database bij office 2k zat maar zit die ook bij XP? kheb even windows laten zoeken en die vind niets, ook in acces kan ik hem niet metteen openen. waar kan ik die terug vinden?

  • Boss
  • Registratie: September 1999
  • Laatst online: 19:01

Boss

+1 Overgewaardeerd

Ik geloof dat het wel een optie is bij het installeren om hem wel/niet mee te nemen. Dus misschien moet de CD er nog even in.

Bij de Engelse versie heet 'ie overigens NortherWind of NorthernWind, weet niet zeker...

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
@Boss
ik denk even dat ik het licht zie.
Kan het zijn dat ik voor dat factuurprogramma moet gebruik maken van dezelfde tabel die ik al had maar zonder klantnummer, en die koppelen aan een tabel met enkel factuurnummer en klantnummer en daar dan een 1-op-veel relatie leggen?

En kan je me wat verder helpen met dat formulier waar ik een fout krijg omdat het al gesloten is? Het is wel degelijk de bedoeling dat het zo gedaan wordt omdat het wel moet mogelijk zijn dat 2maal dezelfde naam in dezelfde gemeente te hebben (denk aan 2 takken in 1 gemeente) daarom is een dubbele primaire sleutel uitgesloten. Dus ik krijg de fout dat het object al gesloten is waarnaar de variablen verwijzen maar de variabelen blijven toch zolang het scriptje loopt. Misschien kan je je email of msn geven zodat ik de database even kan doorsturen dat je het zelf eens kan zien?

  • Boss
  • Registratie: September 1999
  • Laatst online: 19:01

Boss

+1 Overgewaardeerd

Voor een factuur-database zou ik de volgende indeling gebruiken:
- klanten
- facturen (factuurnummer, datum, klantid, factuuradres)
- factuurregels (artikel, aantal, bedrag, btw, factuurid)

op die manier hoef je de klantgegevens maar 1x in te voeren en hoef je niet hun gegevens steeds opnieuw in te voeren bij iedere factuur.
Per factuur heb je meerdere regels, waar de eigenlijke productgegevens en bedragen op staan.

Prima om de database even te mailen. Mijn adres staat in mn profiel.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1