Avatar billede gummimand Nybegynder
08. februar 2009 - 11:42 Der 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?
Avatar billede terry Ekspert
08. februar 2009 - 11:51 #1
In the forms properties you can alyter the Allow Edits/Deletions etc to No
Avatar billede terry Ekspert
08. februar 2009 - 11:52 #2
and backto Yes when the buton is pressed.
Avatar billede gummimand Nybegynder
08. februar 2009 - 12:07 #3
Thank you Terry

I will try your suggestion tomorrow when I am back to work.

/Regards
Avatar billede hnteknik Novice
08. februar 2009 - 15:03 #4
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.
Avatar billede terry Ekspert
08. februar 2009 - 16:30 #5
Maybe I havnet understood th problem correctly.


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.
Avatar billede 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...
Avatar billede gummimand Nybegynder
09. februar 2009 - 13:09 #7
Terry

I have just tested it.

If I read all "Kunder" and then filter down to one "kunde", it is now posible to alter the date whitout using the "Ret data" button.

I will now try to find the right property to disallow editation ...

I'll be back ...
Avatar billede terry Ekspert
09. februar 2009 - 17:48 #8
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
Avatar billede gummimand Nybegynder
09. februar 2009 - 21:32 #9
Terry

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 ... ?
Avatar billede gummimand Nybegynder
10. februar 2009 - 11:15 #10
Terry

Sorry - I wrote nonsense yesterday. What I ment was my VBA is in danish.
Avatar billede terry Ekspert
10. februar 2009 - 12:19 #11
You need to look at the forms properties.

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

http://www.access-programmers.co.uk/forums/archive/index.php/t-74840.html
Avatar billede gummimand Nybegynder
11. februar 2009 - 08:40 #12
Terry

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.
Avatar billede terry Ekspert
11. februar 2009 - 12:58 #13
I know that the dB uses data from an SQL dB but is it possible for me to see a copy, or maybe just the part which is necessary to see?

ekspertenATsanthell.dk
AT = @
Avatar billede gummimand Nybegynder
11. februar 2009 - 12:58 #14
Et tillægsspørgsmål:

Har VBA for Access og VB.NET noget med hinanden at gøre?

And what about the points? I like to give you something for your struggle.
Avatar billede terry Ekspert
11. februar 2009 - 19:12 #15
"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.

Points? Are you finished with the question?
Avatar billede gummimand Nybegynder
12. februar 2009 - 08:48 #16
Terry

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:

http://hhdanmark.dk/Jobopslag_itudviklingsansvarlig.pdf

You need to have peak skills in VBA (Access, Excel) and MS SQL.

/Regards
Avatar billede terry Ekspert
12. februar 2009 - 12:04 #17
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.
Avatar billede gummimand Nybegynder
12. februar 2009 - 13:45 #18
Terry

Here is what is behind CommandRetData_Click and CommandFortryd_Click and the "SætLayout":

Me.Painting = False
CommandRetData_Click:
        Me.Painting = False
        SætLayout False
        Me.Painting = True
CommandFortryd_Click:
    Me.Painting = False
    Me.Undo
    SætLayout True
    Me.Painting = True
Me.Painting = True


Private Sub SætLayout(readOnly As Boolean)
    If readOnly Then
        Me.AllowEdits = False
        Me.CommandRetData.Enabled = True
        Me.CommandRetData.SetFocus
        Me.CommandGem.Enabled = False
        Me.CommandFortryd.Enabled = False
        Me.Detail.BackColor = FORM_READ_BAGGRUND
    Else
        Me.AllowEdits = True
        Me.CommandGem.Enabled = True
        Me.CommandFortryd.Enabled = True
        Me.CommandGem.SetFocus
        Me.CommandRetData.Enabled = False
        Me.Detail.BackColor = FORM_EDIT_BAGGRUND
    End If
End Sub

Are you wiser now?

/Regards
Avatar billede terry Ekspert
12. februar 2009 - 13:59 #19
yes, much wiser now ;o)
As you can see, the properties which I mentioned previoulsy also get changed.
(Me.AllowEdits = False) etc.

and thanks for the points
Avatar billede gummimand Nybegynder
12. februar 2009 - 14:18 #20
Terry

You are welcome.

In Kunder's Form_Open(), I have tryed to ad "Me.AllowEdits = False", but this alone did not do the trick.

Maybe Form_Current() is the right place?
Avatar billede terry Ekspert
17. februar 2009 - 17:55 #21
sorry, didnt see your last comment.


When you move between records you will also need to set allowedits to false, so putting it in form current should help.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester