Toon posts:

[Access] Openen subformulier op voorwaarde leeg veld

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

Verwijderd

Topicstarter
Hallo

Ik wil in Access een formulier openen (ExtraInformatie) met een knop op een ander formulier (Front), waarbij op het moment van openen een toevoeg query wordt uitgevoerd die een entry in de tabel zet waarop het te openen formulier gebaseerd is. Alleen nu is het zo, dat deze waarde niet mag worden toegevoegd d.m.v. de query in het geval deze al bestaat. Nu heb ik dit proberen af te vangen met het volgende VB commando:

If ExtraInformatie.CustId = "" Then
DoCmd.OpenQuery stQuery, acNormal, acEdit
End If
DoCmd.OpenForm stDocName, , , stLinkCriteria

Dus ik test of het CustId leeg is (="") en als dat zo is mag de query doorgaan. Helaas krijg ik nu bij klikken op de knop de foutmelding "Object Vereist".. Ik denk dat het er misschien aan ligt dat VB met 'ExtraInformatie.CustId' de tabel niet kan benaderen, dus dat er daar een syntax fout zit, maar ik weet het niet zeker.
Weet iemand me te helpen, of is er misschien een makkelijkere manier om een voorwaarde op te geven aan het uitvoeren van een query?

Verwijderd

Topicstarter
Ik zie nu zelf trouwens wel in dat dit niet kan werken met ExtraInformatie.CustId="", omdat hij dan waarschijnlijk kijkt of die hele kolom leeg is, en het gaat slechts om de entry van CustId die in het record op het formulier staat vanwaaruit het ExtraInformatie formulier wordt geopend.
Maar goed, kom ik nog niet verder.. :-(

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 26-08 12:17
if isnull(me.custID) or me.custID = "" then ...

Houdoe


Verwijderd

Topicstarter
Super, het werkt, dankjewel, was een stomme vraag misschien maar ik ben helemaal niet thuis in VB..
Bedankt!!

Verwijderd

Topicstarter
hoe doe je dit dan voor een andere tabel, dus als ik niet de tabel wil hebben die 'me' is? Als ik een andere tabelnaam ingeef zegt ie weer, 'Object vereist'..

  • Boss
  • Registratie: September 1999
  • Laatst online: 12:20

Boss

+1 Overgewaardeerd

Anders gebruik je een keer de edit knop ipv voor iedere opmerking een nieuwe post maken :)

En naar een andere tabel verwijzen gaat lastig hier, want hoe moet access weten welk record je wilt hebben in die andere tabel? Of staat die ook op het formulier?

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
Nu zit ik met een ander probleem: Ik heb een naam op een tekstvak op een formulier staan die als koppeling fungeert voor een ander formulier. Bij het openen van het andere formulier met een knop vanuit het eerste formulier werkt dit perfect. Nu zou ik nog graag willen inbouwen, dat op het moment van wijzigen van de naam, de naam op het andere formulier ook wijzigt, en niet zoals nu gebeurt door mijn INSERT query, er een hele nieuwe entry voor deze naam op het nieuwe formulier (en dus in de tabel) gemaakt wordt. Ik heb al gedacht aan een UPDATE query, maar ik krijg hem alleen zover dat de hele kolom waarden geupdate wordt met de nieuwe naam, i.p.v. alleen het record dat ik wil. Ik kan maar geen goede voorwaarde bedenken om alleen het huidige record te laten updaten...
Iemand?

  • TheXception
  • Registratie: December 2003
  • Niet online
Heb je het al met een after update gebeurtenis van het eerst genoemde veld geprobeerd?

Ik heb geen enkele voorbeeld code van wat jij hebt gebouwd, maar als ik je vraag goed begrijp, zou dat moeten werken.

"It's better to burn out, than to fade away"


Verwijderd

Topicstarter
ja dat heb ik geprobeerd, maar dat neemt niet weg dat ik een dubbele entry krijg, behalve als ik een werkende update query zou hebben in plaats van de insert query die ik nu gebruik.
mijn insert query is standaard:

INSERT INTO ExtraInformatie ( [Name/] )
SELECT Forms!Front![Name/];

En wordt op dit moment getriggerd "after update" (na bijwerken in het nederlands).
Maar ik wil dus het huidige record kunnen aanpassen in plaats van na bijwerken van het veld [Naam/] een nieuwe entry krijgen met de gewijzigde naam. (En de oude naam dus ook nog als entry in de tabel hebben staan).

  • TheXception
  • Registratie: December 2003
  • Niet online
Ik moet zeggen dat je beschrijving dan niet geheel helder is voor mij...
maar dan kan aan mij liggen _/-\o_

Hoe liggen uberhaupt de releaties tussen je eerste en tweede form?

Misschien moet je eerst wat meer informatie geven, dan kunnen mensen je ook beter helpen.
* Wat wil je precies met die update bereiken?
* Om wat voor soort veld(en) gaat 't?

Ik noem maar wat...

[ Voor 17% gewijzigd door TheXception op 11-08-2004 11:52 ]

"It's better to burn out, than to fade away"


Verwijderd

Topicstarter
De relaties tussen de 2 formulieren zijn gebaseerd op een veld "Naam/", dat al ingevuld wordt op het eerste formulier, en op het 2de formulier moet worden ingevuld zodra ik het open. Nu zorg ik dat deze waarde wordt ingevuld op het eerste formulier dmv een tekstveld (handmatig dus) en er 'na bijwerken' van dit veld een insert wordt uitgevoerd, die de waarde kopieert naar de tabel ExtraInformatie, waarop het 2de formulier gebaseerd is. Ik wil alleen niet hebben, dat op het moment dat ik besluit de naam te veranderen op het eerste formulier, er een nieuwe insert wordt uitgevoerd, waardoor er een nieuwe entry voor het 2de formulier gemaakt wordt. Dan blijf ik namelijk zitten met 2 verschillende entries, terwijl ik wil dat er 1 entry blijft, maar met de gewijzigde naam.
Als het nog niet duidelijk is, zeg je het maar...
:)

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 26-08 12:17
Volgens mij met 'na bijwerken'

code:
1
2
me.refresh
forms![subformulier].requery


of die me.refresh nodig is moet je maar uitzoeken

[ Voor 9% gewijzigd door Witte op 11-08-2004 17:31 ]

Houdoe


Verwijderd

Topicstarter
wat er nu gebeurt is het volgende:
Het klopt dat ik de gegevens op het subformulier nu kan opslaan, en weer openen (en dan krijg ik de eerder ingevulde informatie te zien), maar voor elke keer dat ik het (sub)formulier ExtraInformatie open, maakt hij een nieuwe (lege) entry aan in de Tabel ExtraInformatie, die hij kennelijk niet meer gebruikt aangezien deze entry altijd leeg blijft.

Ook is het nog steeds zo dat ik op het moment van het veranderen van de Name/ op het Front formulier nog steeds een nieuwe entry krijg in de tabel ExtraInformatie, i.p.v. een aangepaste entry, met alleen de Name/ veranderd.

Als query gebruik ik dus nog steeds een INSERT INTO query, want met UPDATE SET kom ik er niet uit (dan verandert hij de hele kolom waarden!).
Wat ik wel veranderd heb is het moment van uitvoeren van de query, die wordt nu pas uitgevoerd op het moment van openen van het formulier ExtraInformatie (met behulp van een knop). De code hiervoor is:

Private Sub Knop225_Click()
On Error GoTo Err_Knop225_Click

Dim stDocName As String
Dim stLinkCriteria As String
Dim stQuery As String

stDocName = "ExtraInformatie"
stQuery = "Name/Copy"

stLinkCriteria = "[Name/]=" & "'" & Me![Name/] & "'"

If Not IsNull(Me.[Name/]) Or Me.[Name/] <> "" Then
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.OpenQuery stQuery, acNormal, acEdit
'Me.Refresh 'heb ik aan en uit gezet, maakt geen verschil
Forms![ExtraInformatie].Requery
Else: MsgBox "Er is geen naam voor de contactpersoon ingevuld, vul deze in als u extra informatie wil invoeren!"
End If


Exit_Knop225_Click:
Exit Sub

Err_Knop225_Click:
MsgBox Err.Description
Resume Exit_Knop225_Click

End Sub

en de code voor de query "Name/Copy" is (nog steeds, zie ook boven!) als volgt:

INSERT INTO ExtraInformatie ( [Name/] )
SELECT Forms!Front![Name/];

wat doe ik fout?? |:(

  • TheXception
  • Registratie: December 2003
  • Niet online
Ik vraag me af of je het misschien moeilijker maakt dan nodig is.
Waarom wil je de naam op het tweede formulier (opnieuw) laten vullen?
Je hebt deze naam al in een tabel vastgelegd, en kunt hem dus gewoon ophalen?

Tweede vraag die ik heb is of de naam altijd maar eenmaal op je subformulier moet komen, of kan het ook voorkomen dat deze er wel meerdere keren moet komen.

Als de naam altijd maar één keer voorkomt op het subformulier, dan ben ik er van overtuigd dat dit eenvoudiger kan.

Post eventueel wat plaatjes van je form en subform... Dat maakt een hoop duidelijker

"It's better to burn out, than to fade away"


Verwijderd

Topicstarter
Ik heb deze naam inderdaad al vastgelegd in de tabel Front waar het formulier Front op gebaseerd is, maar de tabel ExtraInformatie waar het formulier ExtraInformatie op gebaseerd is, bevat ook het veld Name/, dat als link tussen de 2 formulieren geldt. Nu is het zo dat Name/ gespecificeerd wordt op form Front, en dat bij openen van subformulier ExtraInformatie, ExtraInformatie.[Name/] moet worden ingevuld, omdat dit veld leeg is in de ExtraInformatie tabel. Dus vandaar mijn geklooi met die insert query.. en vandaar dat 2 keer het subform openen met de knop ervoor zorgt dat ik 2 entries krijg in ExtraInformatie..
Ik heb hier helaas voorlopig niet de mogelijkheid om images te posten van de formulieren, dus ik ben afhankelijk van het uitleggen via tekst.. (en dat lukt me tot nu toe nog niet al te best...) :|

  • TheXception
  • Registratie: December 2003
  • Niet online
Begrijp ik nu goed dat je het veld Name/ gebruikt om je hoofdformulier te koppelen aan je subformulier / tweede formulier?
dit moet ik verkeerd begrepen hebben? 8)7

Als dat zo is, dan snap ik wel een beetje waarom dat niet werkt. Waarom leg je die link op basis van een naam (die wijzigbaar is) en niet op basis van een uniek ID?
Ik ben nu erg nieuwsgierig naar je datamodel...


mocht je op een ander tijdstip wel in staat zijn een plaatje te posten, doe er dan ook gelijk een van je datamodel bij

"It's better to burn out, than to fade away"


Verwijderd

Topicstarter
jep ik heb van het veld Name/ de primaire sleutel gemaakt in beide tabellen, omdat ik per bedrijf op form Front, meerdere contactpersonen wilde kunnen opgeven. Name/ staat dan ook voor de naam van een contactpersoon. Ik zal het nu maar eens gaan veranderen en de primaire sleutels 'ID's' maken. Ik neem aan dat ik dan alleen in Front ID als autonumber moet laten lopen?

  • TheXception
  • Registratie: December 2003
  • Niet online
Verwijderd schreef op 12 augustus 2004 @ 11:06:
Ik neem aan dat ik dan alleen in Front ID als autonumber moet laten lopen?
Lijkt mij wel het verstandigst ja. Dan weet je zeker dat het goed gaat.
Ben benieuwd naar het resultaat

Nog één niet ter zake opmerking: Gebruik ook in de naamgeving van je ID veld geen spatie, dus geen Front ID, maar FrontID of Front_ID. Krijg je later "last" mee...

"It's better to burn out, than to fade away"


Verwijderd

Topicstarter
uuhhm, hoe kan ik nou bij een FrontID (jaja zo heb ik hem genoemd, zonder spatie ;-) ) meerdere entries (contactpersonen) opgeven op het subformulier, m.a.w. hoe gaat het koppelen dan in zijn werk?

  • TheXception
  • Registratie: December 2003
  • Niet online
Verwijderd schreef op 12 augustus 2004 @ 11:33:
uuhhm, hoe kan ik nou bij een FrontID meerdere entries (contactpersonen) opgeven op het subformulier, m.a.w. hoe gaat het koppelen dan in zijn werk?
Tja, daarvoor zou ik dus dat datamodel willen zien O-)
Door middel van tekst is toch niet zo duidelijk wat je applicatie nou precies moet doen, dus welke gegevens je form Front bevat en welke gegevens je form ExtraInformatie....

Je hebt toch nog toe je probleem wel beschreven, maar niet echt wat je op welke manier (en waarom) wilt vastleggen.

edit:
No offence, maar er zou best eens iets mis kunnen zijn met de opbouw van je datamodel... als dat zo is, blijf je problemen houden

[ Voor 11% gewijzigd door TheXception op 12-08-2004 11:43 ]

"It's better to burn out, than to fade away"


Verwijderd

Topicstarter
Form Front:

Naam bedrijf (Name)
etc
Naam Contactpersoon (Name/)
etc
Knop om Extrainformatie te openen


Form ExtraInformatie:

Naam Contactpersoon (Name/)
gegevens over manier van in contact komen met bedrijf
etc


form Front en ExtraInformatie gebaseerd op tabellen van zelfde naam.
Relaties: FrontID (autonumber primaire key) van Front met ID (numerieke waarde primaire key). Deze relatie is om de een of andere reden 1 op 1, dat krijg ik niet veranderd..
Verder in allebei de tabellen een veld Name/ (dus contactpersoon naam), dat ik eerst gebruikte om te linken.

btw, weet wel zeker dat er iets mis is met mijn datamodel...

[ Voor 6% gewijzigd door Verwijderd op 12-08-2004 11:50 ]


  • TheXception
  • Registratie: December 2003
  • Niet online
Verwijderd schreef op 12 augustus 2004 @ 11:47:
Deze relatie is om de een of andere reden 1 op 1, dat krijg ik niet veranderd..
Als je via Extra > Relaties op de betreffende relatie klikt, kun je dit wel veranderen...
btw, weet wel zeker dat er iets mis is met mijn datamodel...
Dit probleem zou ik dan eerst oplossen.... anders wordt het nooit iets. :Z
Maaruh... dat zijn wel de basics van Access.


Klein tipje:
Maak één form Front, zoals je nu al hebt, en maak een subform ExtraInformatie. In je tabel ExtraInformatie maak je ook een ID veld ExtraInformatiID en een ExtraInfoFrontID. (ofzo)
Koppel je hoofdform aan je subform via de velden FrontID en ExtraInfoFrontID....

meer geef ik ff niet weg hoor... Even goed in de help zoeken of een Access boek kopen. :+

"It's better to burn out, than to fade away"


Verwijderd

Topicstarter
ok thanx!
Hier was ik al mee begonnen, en dat ID had ik net aangemaakt. Nu werkt het op het eerste gezicht, maar ik moet er nog wat mee stoeien om het perfect te krijgen. :P
Tot hier in ieder geval bedankt voor je moeite (en begrip..) 8)7

[ Voor 93% gewijzigd door Verwijderd op 12-08-2004 12:04 ]

Pagina: 1