Avatar billede PERJR Novice
20. marts 2013 - 14:09 Der er 8 kommentarer og
1 løsning

Tilrettet forespørgsel (kolonner) ud fra brugervalg uden at gå i designmode.

Access 2007. Jeg vil gerne sende en liste med en masse programmer ud til en række brugere (>200), hvor hver enkelt bruger blot i et afkrydsningsfelt markerer om de anvender det enkelte program eller ej.
Det forestiller jeg mig at gøre i en FrontEnd - Backend Access-databaseløsning, hvor jeg i Backend databasen har en tabel med alle programmerne og en kolonne for hvert brugernavn med ene afkrydsningsfelter (ja/nej) (i princippet blot et regneark).
Så vil jeg gerne lave en forespørgsel, som udtrækker samtlige programmer (programkolonnen) og brugerkolonnen (den enkelte brugers afkrydsningskolonne).
Fungerende på den måde, at når en bruger i en FrontEnd-DB i en opstartsformular i et felt med en liste over samtlige brugere vælger sit eget brugernavn, så åbnes en forespørgsel med de 2 kolonner (programkolonnen, den enkelte brugers afkrydsningskolonne), hvor brugeren så krydser af og lukker ned igen. Afkrydsningerne havner i den samlede tabel i backend-databasen.
Mit spørgsmål: Hvordan laver jeg koblingen mellem det valgte brugernavn i opstartsfomularens liste og forespørgselen, så den rigtige kolonne kommer med. - Altså hvordan får jeg det valgte brugernavn f.eks. "ADTHA" til at bevirke at den forespørgsel der åbner består af Programkolonnen og ADTHA-kolonnen ? - Vel at mærke uden at brugeren skal åbne forespørgselen i desigmode.
Avatar billede fdata Forsker
20. marts 2013 - 19:09 #1
Det må kunne klares med en lille krølle i stil med:

Sub DinSub()
  Const Qname = "DinQuery"
  Const BrugerNavn = "ADTHA"
  Dim Q As QueryDef
 
  On Error Resume Next  'Første gang findes forespørgslen jo ikke
  CurrentDb.QueryDefs.Delete Qname
  On Error GoTo 0

  Set Q = CurrentDb.CreateQueryDef(Qname, "SELECT Programnavn," & BrugerNavn & " FROM ProgrammerOgBrugere")
  Set Q = Nothing

  DoCmd.OpenQuery Qname
End Sub

(Udskift selv diverse navne)
Avatar billede Slettet bruger
21. marts 2013 - 20:53 #2
En kolonne til hver bruger er regnearkstænkning - og - om ønsket, præsentation fra databasen. Strukturen, på databasevis, som jeg ser det, vist med et eksempel:

tabel Apps
----------
id    name
1    photoshop
2    word
3    excel
4    firefox


tabel AppsUse
-------------

bruger    appsId
bruger1        1
bruger1        3
bruger1        4
bruger2        2
bruger2        3
bruger2        4


Læg mærke til at hvis en bruger ikke bruger et program, så findes der ingen post i AppsUse.

Følgende forespørgsel forudsætter at refererede form er åben:

SELECT [Apps].[id], [Apps].[name], -(select count (Apps.name) as useStatus from  Apps as A inner JOIN AppsUse ON A.[id]=[AppsUse].[Appsid] where Apps.id=A.id and AppsUse.bruger=forms!AppsUseAdmin!tbruger ) AS usestatus
FROM Apps;

forespørgslen, som ikke er opdaterbar, er datakilde i datadataark vist underformular til AppsUseAdmin
Denne har et tekstkontrolelement, som er bundet til usestatus og har event'en

Private Sub BUses_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim sql
    If BUses Then
        sql = "Delete from AppsUse where bruger=""" & Parent.tbruger & """ and appsId=" & id
    Else
        sql = "insert into AppsUse values(""" & Parent.tbruger & """," & id & ")"
    End If
    CurrentDb.Execute sql
    Requery
End Sub

--

Men det ville nu være mere automatisk med hostname.loginnavn som brugernavn - dermed funktioner i stedet for, både i forespørgsel og sql udtryk - og så ville der kun være bruge for en formular.
Avatar billede Slettet bruger
21. marts 2013 - 21:10 #3
"Denne har et tekstkontrolelement..."
rettelse:
afkrydsningsfelt i stedet for tekstkontrolelement
Avatar billede PERJR Novice
22. marts 2013 - 13:20 #4
Hej fdata og brugerekspert.

Tak for jeres forslag, hvor jeg hælder mest til fdata's forslag, måske fordi jeg ikke helt forstår det andet.

Men fdata - jeg har forsøgt mig med dit forslag uden held.
Min Tabel hedder "Gisprogrammer", som har felterne "Id", "PROGRAM" samt alle brugerne (f.eks. "ADTHA").
Min forespørgsel hedder "Gisprogrammer_FSP", som har felterne "Id", "PROGRAM" samt en bruger (f.eks. "ADTHA")
Min opstartsformular hedder "Datasikring - Opstartsformular", og brugernavnet hentes som et valg i en liste i feltet "[Kombinationsboks0]"

Kan du så guide mig lidt mere ?

PS: går på ferie fra i dag - så får nok ikke lige svaret tilbage før efter påske
Avatar billede fdata Forsker
25. marts 2013 - 23:27 #5
Sub DinSub()
  Const Qname = "Gisprogrammer_FSP"
  Dim BrugerNavn As String
  Dim Q As QueryDef
 
  On Error Resume Next  'Første gang findes forespørgslen jo ikke
  CurrentDb.QueryDefs.Delete Qname
  On Error GoTo 0

  Brugernavn=Forms![Datasikring - Opstartsformular].Kombinationsboks0
  Set Q = CurrentDb.CreateQueryDef(Qname, "SELECT ID, Program, " & BrugerNavn & " FROM Gisprogrammer")
  Set Q = Nothing

  DoCmd.OpenQuery Qname
End Sub
Avatar billede PERJR Novice
02. april 2013 - 15:14 #6
Hej fdata

Mange tak for hjælpen. det fungerede lige som jeg havde ønsket det.
Super.

Eneste problem nu er at få slået sikkerhedsindstillingerne fra i den database som jeg vil sende ud, så den enkelte bruger ikke først skal vælge "Aktiver indholdet", altså at det er tilladt at afvikle det lille script.
Avatar billede fdata Forsker
02. april 2013 - 20:05 #7
Hvis du er i Access 2010 kan du klare det ved at tilføje stien til databasen her:
Filer / Indstillinger / Sikkerhedscenter / Indstillinger for sikkerhedscenter / Placeringer, der er tillid til
Avatar billede PERJR Novice
03. april 2013 - 09:07 #8
Tak igen fdata.

Det var jo meget simpelt - også selvom det er Access 2007 jeg sidder med :-)
Avatar billede fdata Forsker
03. april 2013 - 18:57 #9
Velbekomme - og tak for point ;O)
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

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