Avatar billede svuppenator Nybegynder
10. oktober 2002 - 21:30 Der er 23 kommentarer og
1 løsning

Deklarering af en boolean udenfor en sub/function

hvordan tildeler man en boolean en værdi udenfor en sub/function?
eks:
private test as boolean
test = true
normalt kan man ikke gøre dette udenfor en sub/function er der en workaround til det? det nemlig en værdi som brugeren ikke kan ændre i på nogen måde. jeg kunen jo lave en metode, men så skal jeg kalde den metode hvergang jeg skal bruge min test og det synes jeg ikke er så smart. Jeg kunne jo lave en constant, men jeg ved ikke om man kan redimme sådan en? Husk brugeren må stadig ikke kunne ændre værdien af test.
Avatar billede tubber Juniormester
10. oktober 2002 - 22:28 #1
Hmmmm....lige lidt nærmere forklaring....
Hvis der ikke er en rutine der kan ændre den kan brugeren heller ikke, ligger rutinen udenfor de funktioner brugeren har mulighed for at bruge så kan han heller ikke.......

Man kan ligge den i et bas modul, så kalde det ?

eller ligge den i basmodul og dimme den som global

Global test As Boolean ?

Kan det uddybes lidt tak :O)

/Tubber
Avatar billede tubber Juniormester
10. oktober 2002 - 22:31 #2
skal den altid ha værdien true og aldrig ændres så kan du jo gøre følgende

Dim test As Boolean
Private Sub Form_Load()
test = True
End Sub

så bliver den ikke ændret.....hvis du ikke laver en rutine der ændre den....
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 22:56 #3
Det er fordi det eneste der må ændre værdien af booleanen er det metoder hvor jeg kalder den. men den skal altid være true indtil at den bliver ændret i en metode, vel or mærket en metode som brugeren ikke har indflydelse på.
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 22:59 #4
her er koden hvor jeg deklarere min boolean.
Det er klasse som kun systemet har adgang til og ikke brugeren.
det er et class module:
kode
------------------------------------------------------------------------------
Option Explicit
Private SQLmodA As New SQLmod
Private ExchmodA As New Exchmod
Private HistModA As New Histmod ' En instans af Historic modulet

Private wfStepRun As Boolean 'WFets pause variable, pauser indtil brugeren har godkendt det enkelte step
wfStepRun = True <--- VÆRDI SAT og her kommer fejlen!
Private wfRunning As Boolean 'WFets status, er det pauset eller køre det... bliver styrret af engine igennem manageren

Private wfSteps(antalWFsteps) As New WorkFlowStep 'tabel over de enkelte WF steps i WFet
Private antOpWFSteps As Integer 'antal oprettede WF steps
Private stepNr As Integer 'Det WF step som vi er kommet til

Private godkendt As Boolean 'WFet er gennemført uden afvisninger så true ellers false
Private Afslut As Boolean 'WFet er afsluttet, flaget bliver sat når et WF når sidste step uanset om det er godkendt eller ej

Private projektnavn As String, projektID As Integer, filpath As String, filnavn As String

Friend Sub SetProjektID(projID As Integer)
    projektID = projID
End Sub

Friend Function GetProjektID() As Integer
    GetProjektID = projektID
End Function

Friend Sub SetProjektnavn(navn As String)
    projektnavn = navn
End Sub

Friend Function GetProjektnavn() As String
    GetProjektnavn = projektnavn
End Function

Friend Sub SetFilnavn(file As String)
    filnavn = file
End Sub

Friend Function GetFilnavn() As String
    GetFilnavn = filnavn
End Function

Friend Sub SetPath(sti As String)
    filpath = sti
End Sub

Friend Function GetPath() As String
    GetPath = filpath
End Function

Friend Sub SetGodkendt(valg As Boolean)
    godkendt = valg
End Sub

Public Function GetGodkendt() As Boolean
    GetGodkendt = godkendt
End Function

Public Sub SetAfslut(valg As Boolean)
    Afslut = valg
End Sub

Public Function GetAfslut() As Boolean
    GetAfslut = Afslut
End Function

Public Sub SetRunning(valg As Boolean)
    wfRunning = valg
End Sub

Public Function GetRunning() As Boolean
    GetRunning = wfRunning
End Function

Public Sub SetStepRun(valg As Boolean)
    wfStepRun = valg
End Sub

Public Function GetStepRun() As Boolean
    GetStepRun = wfStepRun
End Function

Public Sub SetWFStep(brugerID As String, opg As Integer, adgang As Integer, dato As Date, tid As Date)
    wfSteps(antOpWFSteps).SetBrugerID (brugerID)
    wfSteps(antOpWFSteps).SetOpgave (opg)
    wfSteps(antOpWFSteps).SetAdgang (adgang)
    Call wfSteps(antOpWFSteps).SetDeadline(dato, tid)
    antOpWFSteps = antOpWFSteps + 1
End Sub

Public Sub RunWFStep()
    Dim rs As ADODB.Recordset
    Dim fldLoop As ADODB.Field
    Dim nr, i As Integer
    Dim str, s As String
    nr = 0
    If wfRunning = True And wfStepRun = True Then
        Call SQLmodA.SQLConn
        Set rs = SQLmodA.rsSelect("SELECT * FROM t_Steps WHERE ProjID = " & projektID)
        If rs.BOF = True And rs.EOF = True Then
            SQLmodA.rsExecute ("INSERT INTO t_Steps (ProjID, StepNR) VALUES (" & projektID & ", 1)")
            SQLmodA.Disconnect
            nr = 0
        Else
            Set rs = SQLmodA.rsSelect("SELECT * FROM t_Steps WHERE ProjID = " & projektID)
            For Each fldLoop In rs.Fields
                Select Case fldLoop.Name
                    Case "StepNR"
                        nr = fldLoop.Value
                End Select
            Next fldLoop
            i = nr + 1
            SQLmodA.rsExecute ("UPDATE t_Steps SET StepNR = " & i & " WHERE ProjID = " & projektID)
            SQLmodA.Disconnect
        End If
       
        If nr < antOpWFSteps Then
            If wfSteps(nr).GetOpgave = 1 Then
                str = startBody & ExchmodA.hentUser(wfSteps(nr).GetBrugerID) & midBody1 & slutbody1 & wfSteps(nr).GetDeadlineDato & " " & wfSteps(nr).GetDeadlineTid
                wfStepRun = False
               
                s = "Der er sendt besked til " & ExchmodA.hentUser(Godkender) & ", med besked om at godkende eller afvise projektet"
                Call HistModA.SaveHistoric(projektID, str)
            Else
                str = startBody & ExchmodA.hentUser(wfSteps(nr).GetBrugerID) & midbody2
               
                s = "Der er sendt besked til " & ExchmodA.hentUser(Godkender) & ", med besked om at gennemlæse projektet"
                Call HistModA.SaveHistoric(projektID, str)
            End If
            Call ExchmodA.sendmail(projektnavn, wfSteps(nr).GetBrugerID, str, filpath, filnavn)
        Else
            wfRunning = False
            Afsluttet (True)
        End If
    End If
End Sub
Public Sub RunGodkend(Godkender As Integer)
    Dim str As String
    SetStepRun (True)
   
    str = "Projektet er godkendt af " & ExchmodA.hentUser(Godkender)
    Call HistModA.SaveHistoric(projektID, str)
End Sub

Public Sub RunAfvis(Afviser As Integer)
    Dim rs As ADODB.Recordset
    Dim fldLoop As ADODB.Field
    Dim nr, i As Integer
    Dim str As String
   
    Call SQLmodA.SQLConn
    i = antOpWFSteps
    nr = antOpWFSteps - 1
    SQLmodA.rsExecute ("UPDATE t_Steps SET StepNR = " & i & " WHERE ProjID = " & projektID)
    SQLmodA.Disconnect
   
    str = startBody & ExchmodA.hentUser(wfSteps(nr).GetBrugerID) & "Projektet er afvist af: " & ExchmodA.hentUser(Afviser)
    Call ExchmodA.sendmail(projektnavn, wfSteps(nr).GetBrugerID, str, filpath, filnavn)
       
    wfRunning = False
    Afsluttet (False)
   
    str = "Projektet er afvist af " & ExchmodA.hentUser(Afviser)
    Call HistModA.SaveHistoric(projektID, str)
End Sub

Private Sub Afsluttet(godk As Boolean)
    Afslut = True
    godkendt = godk
    SQLmodA.SQLConn
    If godk = True Then
        SQLmodA.rsExecute ("UPDATE t_object SET Godkendt = 1, Afslut = 1 WHERE ID = " & projektID)
    Else
        SQLmodA.rsExecute ("UPDATE t_object SET Godkendt = 0, Afslut = 1 WHERE ID = " & projektID)
    End If
    SQLmodA.Disconnect
End Sub
---------------------------------------------------------------------------
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:00 #5
håber det her det hjalp :)
Avatar billede tubber Juniormester
10. oktober 2002 - 23:01 #6
Jeg er ikke med ?

skal den kunne kaldes remote eller ?
ellers kunne du lave en login, og så lave en

if dit brugernavn = admin then
    den normale metode
    test=false
else: den normale metode
end if
Avatar billede tubber Juniormester
10. oktober 2002 - 23:07 #7
systemet ?`

mener du dermed at det er ændringer i en service eller proccess der skal ændre det ?
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:09 #8
som du kan se bliver wfStepRun brugt mange steder og inden at den bliver ændret til false skal der være true.
F.eks. her henter jeg værdien på wfstepRun ud
Public Function GetStepRun() As Boolean
    GetStepRun = wfStepRun
End Function
hvis den ikke er ændret til noget andet er den true som der står aller øverst i koden. Det er for at undgå at wfStepRun heletiden er true indtil det bliver ændret. Og den værdien ad wfStepRun skal kun kunne nås i denne klasse og ikke andre steder men her skal værdien være sat inden den bliver brugt.
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:09 #9
det var derfor jeg tænkte på om man kunne lave den konstant, men jeg ved ikke om man kan redimme en konstant.
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:11 #10
systemet er hele programmet. Det er meningen det skal køre som en win2k service når det er færdigt.
Avatar billede tubber Juniormester
10. oktober 2002 - 23:13 #11
hvis du kan ændre den er det ikke en konstant....

ok

Der må være nogle parametre der gør at man skal ændre test

ellers kan du jo lave et modul og kører det som privat, så kan forms osv ikke bruge det.....
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:15 #12
ok.. det havde jeg tænkt på, men det var for at slippe for at skulle kalde en masse ekstra ting. Det var for slipep for at skullel lave en masse ekstra arbejde. Du ved dovernskab. Jeg har tænkt på lave et modul bare med den her variabel i og kalde den, men den er jo ikke helt private så.
Avatar billede tubber Juniormester
10. oktober 2002 - 23:20 #13
nej så er den global, men det giver det samme som at dimme den i en form, det du skal er du skal lave en rutine/metode i et basmodul og dimme din variabel som private

Altså

Private test as boolean

så er det kun dit modul der har adgang til den....og så kalde rutinen andre steder fra....

Lige for at være lidt nysgerrig hvad er det så den service skulle kunne ?
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:27 #14
ok.. det er det jeg har overvejet og det var det jeg ville undgå. Det lader til at det er den eneste udvej.
ok det er en længere historie. hehe.
Er igang med at lave hovedopgave som Datamatiker og har en opgave der går ud på at lave et dokument styrings system bygget på MSSQL2000 og Exchange 2000. I alt sin enkelthed skal denne service styre at et dokument kommer rundt i en arbejdsgang (workflow). DVS at en bruger opretter et projekt. Lad os sige et programmerings projekt også definerer han en liste over hvem der deltgaer i dette projekt og hvornår de enkelte programmøre skal udføre deres del af opgave. Det er det vores service skal styre. At få sendt det rigtigt rundt og se hvilke workflows der kører hvilke der ikke kører og om en deltager har  udført sin opgave inden for tidsgrænsen osv.
Jeg ved ikke om det fik noget ud af at læse det, men det er det, det skal bruges til.

:)
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:34 #15
Det er sådan set derfor det bliver lavet i VB6. Hvis jeg skulle lavet det selv havde jeg nok valgt Java det er langt mere overlegent hvad angår typer, men sådan er vilkårene nu engang.
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:36 #16
en anden grund til at det bliver lavet i VB er at det kræver virksomheden simpelthen vi kunne også lave det i C/C++ men der satte vi en grænse. Vi skulle bare komme med en skabelon, som det kunne gå videre med.
Avatar billede tubber Juniormester
10. oktober 2002 - 23:39 #17
ok :O) lydder spændende......

Men ud fra det jeg har læst skulle du kunne dimme den normalt i den form du har lavet, for er der ikke en rutine som brugeren har adgang til som ændre den så kan brugeren ikke ændre den.....
Avatar billede svuppenator Nybegynder
10. oktober 2002 - 23:42 #18
Niks ikke noget sted.
Det der sker er at når en bruger har fået et dokument bliver wfStepRun sat til  false, for at indikere at nu er den ved den næste deltager. På en måde har brugeren indirekte adgang til at ændre wfStepRun. Når deltageren så er færdig med sin del af opgave bliver wfStepRun sat true igen for nu kører porjektet igen indtil den når næste bruger.
Avatar billede tubber Juniormester
11. oktober 2002 - 00:07 #19
aaaah ok :O)
Avatar billede svuppenator Nybegynder
11. oktober 2002 - 00:09 #20
forstod du nu hvad jeg mener...
Avatar billede tubber Juniormester
11. oktober 2002 - 00:12 #21
jeps :O)

Tror ikke jeg kan hjælpe mere end jeg har gjort :O/

Sorry du
Avatar billede svuppenator Nybegynder
11. oktober 2002 - 00:12 #22
jeg vender tilbage imrogen tidlig....
Avatar billede svuppenator Nybegynder
11. oktober 2002 - 09:35 #23
OK, men du kan får pointet alligevel hvis du skriver en besked som svar. Du får dem som tak for din tålmodighed.
Avatar billede tubber Juniormester
11. oktober 2002 - 09:50 #24
Jammen det var da så lidt :O)
og takker :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
Kategori
Kurser inden for grundlæggende programmering

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