16. oktober 2001 - 11:45Der er
34 kommentarer og 1 løsning
Validering af record
Jeg har en main form indeholdende en subform i datasheet view. Jeg vil gerne lade en bruger opdatere en record i formen, men de enkelte fields skal valideres samlet inden de gemmes i den underliggende tabel. Når recorden er opdateret, skal den opdaterede record vises i datasheet view\'et.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Normally a sub form is used for showing related record such as order details and the main form hold the order information. I have a felling that your sub form is not related and shows a list of all the existing main forms. So I think you will need to place your validate routine in the before update event for the main form. Then in the AFTER UPDATE event you will more than likely have to refresh the form to update the sub form. Me.refresh does this.
In the before update event for the form you can validate ALL fields at once and if you find an invalid field place the cirsor in thhe field me.YourField.setfocud and then set the Cancel parameter to True.
Der er liiige en information mere: et par af mine fields i subformen er sammensatte - control source refererer til to fields i record. Dvs at fieldene ikke kan opdateres direkte i subformen
Min main form indeholder et par command buttons og subformen med data. Main formen indeholder ikke data fields. Er der andre måder, man kan kombinere et datasheet view med command buttons?
I subformens datasheet view ligger dataene, som brugeren kan redigere. Hvert field er dannet i design view af en textbox. Textboxens Control Source property indeholder linket til fields i det underliggende recordset. For et par af fieldene består Control Sourcen af et sammensat udtryk af to fields i recordset\'et. Når en Control Source indeholder et sammensat udtryk, så kan data i recorden ikke opdateres ved at editere feltet - hverken i form view eller datasheet view.
OK I think I undertand your problem. Why cant the user have two fields which are NOT \"sammensat\"?
If you MUST have just one field then you will have to do some VB programming. You have an NBOUND field which shows the values of the other two fields. When your unbound field changes you update the other two fields with this data. This will have to be done in VBA code.
.....yderligere, Me.refresh virker fint, hvis det ikke er den første record i datasheet\'et. Den første record opdateres først, når man forlader recorden (clicker på en anden record). Er der et alternativ?
mortenf> The \"sammensat\" field is NOT bouns to the database fields is this correct? You therefor want to copy the new value of this \"sammensat\" field to the two fields you used to make the \"sammensat\" field. Is this correct?
If so, then in the After Update event for the FIELD you need to make some code to split the \"sammensat\" field into two.
Korrekt - jeg får en fejl. Jeg har forsøgt mig med at oprette en tilsvarende form med unbound fields, der loades med datasheet recordens værdier. I den nye form redigerer brugeren sine data og disse valideres inden recorden opdateres..... men jeg synes det er besværligt - er der en lettere måde?
mortenf> Why MUST you have a \"sammensatte\" field? Have two fields so the user can alter each field as needed. I can really say if there is an easier method, as I dont know your requirements. But normally there is one field for each field or you could just as well only have one field in the database IKKE?
Jeg har to fields i data basen, hvir det ene repræsenterer et gruppe element og det andet et individuelt element, men brugeren kender kun dette element som et [gruppeField]-[individueltField]..... derfor vil jeg meget gerne vise brugeren det connectede field og ikke to enkeltstående fields. Opsplitningen i et gruppefield og et individuelt field er valgt, for lettere at kunne foretage søgninger i databasen, da en bruger normalt kun er interesseret i data indenfor den gruppe han tilhører.
all I can suggest is that you have an extra field in the database which contains the values of the other two fields. Then you have to code your way out of the problem!
Jeg har haft brug for refresh, da jeg har forsøgt at anvende en seperat form (med unbound data) til redigering af en record..... men jeg dropper den løsning - det er for besværligt.
Jeg har ændret min tabel, så hvert field i formen svarer til ét field i tabellen.
Men af en eller anden grund kan jeg ikke få Me.Refresh til at virke. Jeg har en meget simpel main form, der kun indeholder en Refresh button og en subform. Subformen indeholder data fra en underliggende tabel. I et multiuser miljø skal brugeren kunne opdatere ændrede records (ændret af andre brugere) ved f.eks at klikke på refresh. VB koden for refresh knappen i main formen, har jeg prøvet med: Me.Refresh Me![fsubForm].Form.Refresh men ingen af delene opdatere en record, der er ændret af en anden bruger. Lukker jeg derimod min main form og åbner edn igen, så opdateres evt. ændrede records.
Hvad gør jeg forkert? ...... håber du stadig er der Terry ;-)
Do youmean that iys possible for other users to alter the data which you are showing in the form and you wnat to be able to click the refresh button to read the (måske) updated records?
Try the me.requery method.
But what happens if more than one user alters the same data?
Jeg vil gerne have en subform i datasheet view, da det er vigtigt for brugeren, at kunne se mange records samtidig.
Flere brugere vil arbejde med databasen samtidig..... og det er vel nærmest det klassiske problem vedr. hvem der har ret til at ændre i en record og hvad sker der, hvis bruger A har ændret en record, mens bruger B er i gang med at ændre den.
Jeg har prøvet med Me.Requery - det gik heller ikke.
Jeg kan maile dig et eksempel på hvad jeg mener, så er det lidt lettere at forklare, hvad jeg gerne vil. Har du mulighed for at arbejde med .adp filer? Har du erfaring med SQL-server som back-end?
Jeg har prøvet det samme med .mdb database (opdelt i en back-end og en front-end, der linker til tabellerne i back-end)..... og her fungerer det uden problemer. Faktisk er det ikke nødvendigt at kalde Refresh/Requery, da opdateringen sker automatisk.
hi morten> Morten you can show all your records without having a sub form. In the forms properties set the default view to Continuous Forms.
I use SQL-server as a backend almost all the time, so have no problem with that, but we only use Access 97 here so .adp files is out of the question. I do have Access 2000 on another PC but no access SQL Server from there.
Just out of interest can you place a timer on the sub form and from there call me.requery?
requery should work its just a case of getting it placed in the right event.
You could send me it to look at and I may get some ideas. Also the db if you like
Formålet med en Refresh/Requery knap er, at en bruger altid kan opdatere andre brugeres input..... eller som du selv foreslår, kan refresh/requery lægges i en timer event. En record i en continues eller datasheet sub form kan fint opdateres vha af en Timer for subformen, så jeg har formentligt en reference fejl (fra knappen i main form til min subform), når jeg anvender en knap fremfor en timer til refresh.
Hele opdatering-af-records problemet er to-delt: 1) den ene del er, at bruger A skal kunne se ændringer som Bruger B foretager. Dette kræver, at formen opdateres med de værdier, der står i tabellen. 2) Den anden del er, hvilken bruger har lock\'et en record.
ad 1) Jeg kigger videre på referencen fra Main form knappen til subform.....
ad 2) Jeg vil helst anvende en record-level pessimistic locking, men det ser ud til at SQL serveren som default sætter locking til Optimistic.... hvad er din erfaring?
yes if it works with a timer then it looks as though you have a reference problem.
Locking. To be honest I dont think about it. Most of the applications I work with are multi user, but generally the chances of two people altering the same data is very slim. If they do then I hope my error routines catch it.
If you go into the OPtions menu and under the Advanced tab you may be able to alter which locking method is used, I havent played with this myself though.
Problemet er løst..... :-) Fejlen var, at mit recordset var baseret på en query og dermed er det åbenbart ikke nok at refreshe formen, men recordset skal refreshes. Me.Refresh virker fint, hvis recordset refererer direkte til en tabel.
Locking options under Options|Advanced tab er ikke tilgængelig i .adp
Det virker med timeren, men det er et problem at ved en opdatering flyttes cursoren til første field i første record (datasheet view)...... det vil ganske sikkert være generende for en bruger, hvis cursoren ofte flyttes (også selvom den flyttes tilbage til det rigtige field) som følge af record refresh.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.