[VB] in Access

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

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Ik ben bezig met het maken van een access database voor een bedrijf dat het strax moet gaan gebruiken. Nu wil ik het zo gebruiksvriendelijk mogelijk maken. Hun hebben dus nix met access zelf te doen dadelijk, alles wat zij kunnen is wat ik hun voorschotel dmv formulieren. Ik moet dus ook een foutcontrole en de troep zo maken dat de formulieren op zichzelf kunnen draaien. Ik heb dus alles zoveel mogelijk uitgeschakeld. Dus je kan bv niet naar de ontwerpweergave... dat soort dingen.

Nu heb ik een aantal vraagjes:

1. Werkt :D

2. In dat zelfde formulier moet nog iets erbij. Het bedrijf neemt een klant aan en moet een offerte maken. Nu moet die persoon alle informatie met de hand invullen. Ook als die klant ook al in de datebase voorkomt. Nu wil ik dat als er een naam wordt ingegeven er wordt gekeken of die klant al in de database staat. Is dit het geval dan word in het formuliertje alle al bekende inforamtie over die klant ingevuld (zoals bv adres, postcode, enz).
Nu werkt het gedeelte dat wordt gekeken of de klant al in de datebase staat al, maar het gedeelte dat de rest automatisch wordt ingevuld nog niet. Hoe maak ik dat?

3. Werkt :D

helup welkom, ocke

Ps. Ik zat te twijfelen of dit in programeren of in algeme software hoort. Toch maar hier gepost omdat ik denk dat veel van dit niet op te lossen is met een simpele wizard, en dus hoofdzakelijk progging zal worden.

[ Voor 0% gewijzigd door ocke op 12-09-2002 13:16 . Reden: Puntje 3 werkend gekregen ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
1. Ervoor zorgen dat er enkel opgeslagen wordt als de persoon op een 'Opslaan' knop drukt.
Als het formulier afgesloten wordt en er zijn dingen gewijzigd, en die wijzigingen zijn nog
niet gesaved, vragen of het moet opgeslagen worden.
Indien het formulier gesloten wordt en er zijn geen wijzigingen aangebracht, ervoor zorgen
dat er niet gesaved wordt.

2. Opgehaalde waardes in textboxen zetten?

https://fgheysels.github.io/


  • 3volution
  • Registratie: September 2001
  • Niet online

3volution

tsja...

3. ...Verhaaltje over Word.Application...

Laat maar... zag het andere draadje over het hoofd...:/

  • Boss
  • Registratie: September 1999
  • Laatst online: 01-09 09:20

Boss

+1 Overgewaardeerd

2. Laten vragen aan klant of deze al eerder een offerte heeft aangevraagd. En dan zoeken op naam. OF direct zoeken op postcode/huisnummer en dan gegevens ophalen.

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.


  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Jah ik heb idd over 3 al een ander draadje lopen, maar het hier ook ff bij zetten leek me geen probleem :)

Verwijderd

Probleem 1, daar zijn redelijk praktische wizards :x voor. Ik heb hetzelfde met m'n formulieren gedaan. acSave voor opslaan en acUndo voor annuleren. Verder gewoon het systeemmenu weghalen zodat ze het formulier alleen kunnen sluiten met de annuleren of opslaan knop. (dit dmv DoCmd.Close)

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Verwijderd schreef op 04 september 2002 @ 14:20:
zodat ze het formulier alleen kunnen sluiten met de annuleren of opslaan knop. (dit dmv DoCmd.Close)
Dat heb ik al DaJan. Ik heb een knopje wat alleen docmd.close uitvoert. Maar toch slaat ie hem dan op. En dat wil ik niet. Hoe verhinder ik dat?

  • argi
  • Registratie: Juni 2000
  • Laatst online: 29-08 07:23
2. Dan kun je het beste een lijstje met bestaande klanten laten open in een nieuw formulier. Dit zou de gebruiker kunnen oproepen met een knop. In dit formulier kan ie dan de klant selecteren.

Vervolgens zet je achter een knop op dat tweede formulier dat ie naar de tekstvelden op het hoofdformulier moet wegschrijven (alleen klantnaam in een echt textveld wat niet naar een veld in een tabel verwijst, vervolgens laat je klantnummer wegschrijven in een verborgen textvak, wat je gebruikt om in je orders tabel te zetten).

Verwijderd

2. Heel simpel volgens mij: alleen de klant door middel van een drop-down list selecteren (referentiele integriteit); dan hoeven velden als postcode etc toch helemaal niet weergegeven te worden?! Klantgegevens kunnen dan in een ander formulier ingevuld worden.

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Verwijderd schreef op 04 september 2002 @ 19:42:
2. Heel simpel volgens mij: alleen de klant door middel van een drop-down list selecteren (referentiele integriteit); dan hoeven velden als postcode etc toch helemaal niet weergegeven te worden?!
Bij mij wel DannyHaak. Anders moet ik nml 2 forms maken. 1 Voor als ie nieuw is en 1 voor als ie een bekende is. En stel nou eens voor dat iemand z'n gegevens wilt wijzigen? moet ie em deleten, en opnieuw adden.. .zullen ze leuk vinden daar op stage :P

  • argi
  • Registratie: Juni 2000
  • Laatst online: 29-08 07:23
Voordeel van een apart formulier is dat een gebruiker dan kan zoeken op andere kenmerk dan naam (plaats, eigenaar, ...???). Maar gelijk een drop-down met daarnaast een knop voor een formulier is natuurlijk het mooist.

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Ik ben bezig met probleempje 1 in het speciefiek. Nu heb ik een knopje exit genaamd gemaakt. En dat doet euh.. aflsuiten :P Hij maakt van te voren wel een nummertje aan. Maar daar zit het probleem niet. Ach kijk zelf maar.
Visual Basic:
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
Private Sub Exit_Click()
  On Error GoTo Err_Exit_Click
  Dim i As Integer
  Dim Deel2 As String
  Dim Adress As String
  
  RelatieNummer = Left(Postcode, 4) & "-" & Right(Postcode, 2)
  Adress = Adres
  Do While Right(Adress, 1) <> " "
    Deel2 = Right(Adress, 1) & Deel2
    Adress = Left(Adress, Len(Adress) - 1)
  Loop
  If Len(Deel2) <> 4 Then Deel2 = "0" & Deel2
  If Len(Deel2) <> 4 Then Deel2 = "0" & Deel2
  If Len(Deel2) <> 4 Then Deel2 = "0" & Deel2
  RelatieNummer = RelatieNummer & "-" & Deel2
  
Err_Exit_Click:
  If IsNull(RelatieNummer) Or RelatieNummer = "-" Then
    If MsgBox("Fout in adres gegevens of,en in postcode gevonden!@Wilt u alsnog het " _
    & "intakeformulier afsluiten?@Hierbij gaat wel alle ingevulde informatie verloren" _
    , 20, "Fout bij genereren relatienummer") = vbNo Then Exit Sub
    DoCmd.Close , , acSaveNo 'Nu zou het NIET moeten opslaan
  Else
    DoCmd.Close , , acSaveYes 'Nu zou hij het WEL moeten opslaan
  End If
End Sub

Hij slaat het dus nog altijd op!!! Ondanks dat er acSaveNo staat :s :(.

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Ik heb ook ff wat gepruts omtrent dat auto invullen. Maar ik heb het liefste een pulldown menu'tje waar je een naam invult. Je krijgt dan alle mensen te zien met die achternaam (kunnen er natuurlijk meerdere zijn), en dan de bedrijfsnaam er ook nog bij, zodat je zeker de goede kiest.

Nu werkt dat pull-down menutje al, maar dat autoinvullen werkt nog niet echt denderen (ene error na de andere).
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Keuzelijst_Naam_AfterUpdate()
  Dim TempRec As Recordset
  
  Set TempRec = CurrentDb.OpenRecordset("SELECT *" _
  & " FROM Opdrachtgever" _
  & " WHERE (Opdrachtgever.Naam = Keuzelijst_Naam)", dbOpenSnapshot)
  Voorletters = TempRec!Voorletters
  Bedrijfsnaam = TempRec!Bedrijfsnaam
  Adres = TempRec!Adres
  Postbus = TempRec!Postbus
  Postcode = TempRec!Postcode
  Plaats = TempRec!Plaats
  Telefoon = TempRec!Telefoon
  Fax = TempRec!Fax
  Gsm = TempRec!Gsm
  BezoekNaam = Keuzelijst_Naam
End Sub


Wat valt er te verbeteren?

Verwijderd

Ik zou keuzelijst_naam buiten de " halen zodat ie de inhoud in de string kan plakken :) en niet de naam van het veld

Visual Basic:
1
2
& " WHERE (Opdrachtgever.Naam = '" & Keuzelijst_Naam & "')", dbOpenSnapshot)
 

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
En als je de If eens helemaal uitspreidt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
  If IsNull(RelatieNummer) Or RelatieNummer = "-" Then
    If MsgBox("blabla" , 20) = vbNo Then 
        Exit Sub
    Else
        DoCmd.Close , , acSaveNo 'Nu zou het NIET moeten opslaan
    End If
  Else
    DoCmd.Close , , acSaveYes 'Nu zou hij het WEL moeten opslaan
  End If
End Sub

Opgelet. Met de optie Opslaan in Access bedoelt men het ontwerp van het formulier en dergelijke opslaan.
De inhoud wordt AUTOMATISCH OPGESLAGEN, ook als er niet gesaved wordt.
Als je de inhoud wilt kunnen opslaan en niet opslaan, dan zal je de gegevens in een gewoon onafhankelijk tekstvak moeten laten typen en als de gebruiker ze wil opslaan, de gegevens vervolgens in de tabel laten zetten door Access.

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Verwijderd schreef op 06 september 2002 @ 09:47:
Ik zou keuzelijst_naam buiten de " halen zodat ie de inhoud in de string kan plakken :) en niet de naam van het veld

Visual Basic:
1
2
& " WHERE (Opdrachtgever.Naam = '" & Keuzelijst_Naam & "')", dbOpenSnapshot)
 
:| Euh jah... * ocke schaamt zich

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
WimB schreef op 06 september 2002 @ 09:48:
Opgelet. Met de optie Opslaan in Access bedoelt men het ontwerp van het formulier en dergelijke opslaan.
De inhoud wordt AUTOMATISCH OPGESLAGEN, ook als er niet gesaved wordt.
Als je de inhoud wilt kunnen opslaan en niet opslaan, dan zal je de gegevens in een gewoon onafhankelijk tekstvak moeten laten typen en als de gebruiker ze wil opslaan, de gegevens vervolgens in de tabel laten zetten door Access.
dat meen je? Shit man. Hoe meer en langer ik Access gebruik hoe meer ik het ga haten. Dit slaat toch nergens op. Nu kan ik vanwege 1 (EEN!!!) klein dingetje, een alle velden nergens van afhankelijk maken en twee een lap code gaan schrijven die die dingen weer wel in de tabel zet.

Zucht, lekker hoor dat access :(.

Verwijderd

Heb je dit al geprobeerd:

code:
1
2
3
4
Indien goed: 
  DoCmd.RunCommand acCmdSave
Anders
  DoCmd.RunCommand acCmdUndo

Verwijderd

of anders kan je ook

Visual Basic:
1
Me.Undo


gebruiken om niet op te slaan ...

Verwijderd

Of in de Form_BeforeUpdate event Cancel=True zetten

Verwijderd

twee knoppen:

OK:
Docmd.close (opslaan gebeurt automatisch)

Annuleren:
Me.Undo (undo wijzigingen)
Docmd.close

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
AH :) das beter nieuws ik probeer het maandag gelijk :)

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
ocke schreef op 04 september 2002 @ 11:05:
2. In dat zelfde formulier moet nog iets erbij. Het bedrijf neemt een klant aan en moet een offerte maken. Nu moet die persoon alle informatie met de hand invullen. Ook als die klant ook al in de datebase voorkomt. Nu wil ik dat als er een naam wordt ingegeven er wordt gekeken of die klant al in de database staat. Is dit het geval dan word in het formuliertje alle al bekende inforamtie over die klant ingevuld (zoals bv adres, postcode, enz).
Nu werkt het gedeelte dat wordt gekeken of de klant al in de datebase staat al, maar het gedeelte dat de rest automatisch wordt ingevuld nog niet. Hoe maak ik dat?
Ik heb dus nog zitten knoeien maar ik kom daar dus niet uit. Ik heb dit al voormekaar:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Keuzelijst_Naam_AfterUpdate()
  Dim rst As Recordset

  'Database-variabele instellen die naar de huidige database verwijst.
  Set rst = CurrentDb.OpenRecordset("SELECT * FROM Opdrachtgever WHERE naam = Keuzelijst_Naam", dbOpenSnapshot)
  With rst
    Voorletters = !Voorletters
    Bedrijfsnaam = !Bedrijfsnaam
    Adres = !Adres
    Postbus = !Postbus
    Postcode = !Postcode
    Plaats = !Plaats
    Telefoon = !Telefoon
    Fax = !Fax
    Gsm = !Gsm
  End With
  BezoekNaam = Keuzelijst_Naam
End Sub

Of je nou WHERE naam = Keuzelijst_Naam" of WHERE naam = " & Keuzelijst_Naam gebruikt, ze doen het beide niet.

Verder wil hij geen variable accepteren in:
Visual Basic:
1
2
3
  waarde = Right(Datum, 2) & Left(Right(Datum, 5), 2) & Left(Datum, 2)
  DoCmd.OpenReport "Oude_Intake", acViewPreview, , "OfferteNummer < 
[waarde]"
Hij geeft dan een inputbox met de tekst "voor waarde in" weer. Erg vreemd (vinnik dan :P).

Verwijderd

Ocke, is dat met dat acUndo nou al gelukt?

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

En dit:

code:
1
WHERE naam = '" & Keuzelijst_Naam & "'"

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Verwijderd schreef op 12 september 2002 @ 13:33:
Ocke, is dat met dat acUndo nou al gelukt?
Jah dat doet het al helemaal. Thx DaJaN

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
robjanssen schreef op 12 september 2002 @ 20:07:
En dit:

code:
1
WHERE naam = '" & Keuzelijst_Naam & "'"
Ik probeer morgen vroeg gelijk als ik op me werk kom :).

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
nee werkt niet :(
Pagina: 1