08. februar 2009 - 11:42Der er
20 kommentarer og 1 løsning
Lås brugergrænsefladen
På mit arbejde bruger vi en MS SQL database bag en grænseflade lavet i Access (VBA). Når man f.eks. søger på kunder, så hentes samlige kunder op i Access(Det har jeg ikke lige mulighed for at ændre på), hvorefter man så kan filtrerer og finde den specifikke kunde man ønsker at se data for. Vil man nu ændre i f.eks. adressen, skal man trykke på "Ret data"-knappen, rette i adressen og trykke på "Gem"-knappen. Det virker fint, måske lidt tungt, men det virker.
Nu til mit problem; hvis man fra databasen kun får een rekord leveret (hvis man søger på et kundenummer), så kan man pludselig rette i data direkte i oplysningerne, uden at have trykke på "Ret data"-knappen, og ændringerne slår endda igennem til MS SQL databasen.
Er der nogen måde at låse Access grænsefladen, så der kun kan ske ændringer efter man har trykket på "Ret data"-knappen?
Det lyder som om, at grænsefladen til SQL serveren ikke er lavet optimal. Der skal laves et view eller en stored procedure på serveren, som blot tager den/de variable, som der skal søges på og kun returnere det/de recordsæt som matcher søgekriterierne.
Are you saying that when you read ALL "kunder" then filter to find a specific "kunder" everything works as it should. IE you cant alter data until you press the "Ret data" button.
But if you select only one record then you are allowed to alter data without having to press the "Ret data" button.
If that is correct then I would think there is a problem with your code which stops/allows you from altering the data.
Maybe a bit more info would help.
Synes godt om
Slettet bruger
09. februar 2009 - 00:24#6
Der ligger nok et view bagved, som ikke er opdaterbart, medmindre der er tale den unikke situation med den enkelte post og så er den pludselig opdaterbar. Det er bestemt muligt....
I så fald vil din "ret data" knap sikkert stadig virke, men problemet er at data vil blive rettet under alle omstændigheder.
Der er 2 løsninger, enten gøre dit view opdaterbart (måske med select distinct) og fjerne "ret data" knappen. Dvs. at hvis man retter på en kunde, så retter man på en kunde. Man kunne evt. bruge ret data knappen til at låse felterne op, det er nemlig også frustrerende at rette en kunde, gå til noget andet for at finde ud af at man ikke har gemt rettelsen!~)
Den anden løsning er noget i retningen af terrys forslag, enten er han spot on (hvilket der er god chance for!~) men måske vil det også stoppe for muligheden for at rette data... Hvis det er tilfældet, så skal du måske have fat i en hændelse, som aktiveres når du forlader posten i tilfældet af at den er ændret. Måske form_afterupdate eller noget lign.. Så brug denne hændelse til at sætte posten tilbage til oldvalues. Det vil nemlig være de nye data hvis du har trykket på "ret data" knappen.
Jeg må indrømme at jeg nok hælder mest til den første løsning!~)
Optimalt så henter man data, uden at have et fast link til serveren, så retter man data og sender rettelsen tilbage. Det ligner din bruger oplevelse, men dit problem tyder på at du er linket til et view, som har opdateringsproblemer...
I think the best answer all depends on the requirements, which we dont have.
If its a requirement to NOT be able to alter data when ALL "kunder" are visible then its OK that you currently cant. If you need to be able to alter data also when ALL "kunder are visible then I suspect that spg's on the right track, the forms recordset is returning duplicate values. So you will need to make alterations to the view/query so that it returns unique values.
If its a requirement to have to press a "Ret data" button then you need to disable the properties I menioned previously and enable them when the button is pressed. And you will need to disable them again after the update.
If its not a requiremnet to press a button then remove the button
It IS a requirement to have to press "Ret data"-button to alter data. I have been lokking for the properties you mentioned. I am using a danish version of MS SQL Maneger and all properties for the form seems to be set like you surgested.
Next step is to look for properties for all the textfields involved. Or ... ?
Heres a link showing how to alter these properties. In your case you need to set them to NO in the forms On current event and YES when you press the button and back to NO in the after update
The programmer who develped this database and frontend, left some code, but outlined it (made it inactive). I never understood why this code did the trick, but it did it, when I placed it the right place.
Sorry I can not give you better feedback - VBA is NOT my strongest side.
"Har VBA for Access og VB.NET noget med hinanden at gøre?" In some ways yes, but generally they are two different programming languages. You cant use vb.net in Access, but you can make a front-end (forms) in a vb.net application which uses an access database for storing the data.
Quote: "Points? Are you finished with the question?"
Well - I made it work, put it into production and is now waiting for the error repports (if they come).
This is the code that solved the problem:
'Dette workaround forhindrer kundedata i at være redigerbart ved start af formen. Me.Painting = False CommandRetData_Click CommandFortryd_Click Me.Painting = True
Does it give you any sense?
If you want to know more you have to apply for the new position as IT-udviklingsansvarlig:
There is obvioulsy more code in these two event procedures.
CommandRetData_Click CommandFortryd_Click
and if it works then thats great.
Job sounds quite interesting but location is too far away.
points. Well if your happy with the input then you can accept the answer I gave man. d. 09. februar 2009 kl. 00:24:29 Or you can accept your own answer and get your points back.
When you move between records you will also need to set allowedits to false, so putting it in form current should help.
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.