06. november 2002 - 23:17Der er
24 kommentarer og 1 løsning
Konstanter i forespørgsler
Jeg har en situation, hvor jeg har et utal af konstanter, hvor jeg gerne vil tage højde for at disse kan ændre sig med tiden. Jeg har desværre nogle forespørgsler hvor jeg skal bruge disse konstanter som kriterier (for at gøre systemet så dynamisk som muligt). Jeg kan selvfølgelig lave en funktion, som returnere værdien af variablen, men det er for omfattende, da jeg har over 100 konstanter.
Jeg forestillede mig derfor at jeg ville lave en generel funktion, som returnere værdien af den variabel, som angives i parameteren. Mit bedste bud var at bruge Eval, som jo kan bruges til at returnere lidt skæve udtryk:
Public Function GetVariable(Variabel) as Real GetVariable = Eval(Variabel) End function
Derved skulle man kunne få returneret værdien af en variabel 'varMinVariabel' ved at skrive: GetVariable("varMinVariabel")
Dette virker dog ikke, hvorfor jeg vil lægge spørgsmålet ud til Jer eksperter :o)
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.
Public Function GetVariable(name As String) As String If (name = "varMinVariabel") Then GetVariable = varMinVariabel ElseIf (name = "foobar") Then GetVariable = foobar End If End Function
hmm, ideen er god nok, men der er som sagt over 100 og der kommer hele tiden nye. Det bliver et større skrive-arbejde. Derfor søger jeg en mere generel løsning.
Superjap-> Du har helt ret: jeg har alle mine konstanter defineret i et globalt modul med Public Const....
Og ja - Real er ikke en VB-datatype. Den skulle selvfølgelig have heddet Single. Godt set :o)
Terry-> "Put em in a table"! Udemærket forslag, men så har jeg dobbelt-registrering af konstanterne. Det skal der helst ikke være.
Ideen er også, at jeg - på bagrund af denne funktion - kan lade brugeren vedligeholde forskellige formler. Dvs at brugeren skal kunne indtaste en formel, som systemet så selv skal kunne finde ud af at udregne: ProduktiveTimer=Plantimer-Fravær
Hvor ProduktiveTimer, Plantimer og Fravær er variable i systemet
Dette er ikke umiddelbart muligt, men ville være det, hvis jeg kunne få det andet til at virke.
Jeg overgiver mig til både Terry og Hekla; Jeg kan simpelthen ikke se hvordan det skal kunne lade sig gøre med konstanter. Ideen var sådan set god nok, men jeg tror ikke det kan lade sig gøre. :-(
Hekla-> Grunden til at det skal være konstanter (eller variabler!) er, at det jo er en hel del hurtigere at arbejde med en variabel/konstant frem for at skulle lave opslag i en tabel. De 100-150 variabler, som jeg har, skal hver især benyttes op til 1000 gange i fbm med en beregning.
Dertil kommer, at det i udviklingsfasen, er langt nemmere at huske navnene på konstanter, da man kan bruge code-completion. Det kan man jo ikke, når værdierne bare ligger i en tabel.
Problemet er jo, at jeg skal kunne skrive: getConst("test1") i stedet for getConst(test1)
Dette skyldes (som jeg skrev i spørgsmålet) at jeg skal kunne kalde det fra f.eks. en forespørgsel. Og man kan jo ikke referere til Test1 i en forespørgsel.
hmm, hvis jeg nu sender 150 konstanter, gider du så lave 150 funktioner? :o) Så er Arne_V's første forslag bedre, da man her blot kan lave det med en Select Case.
Men det, jeg har brug for, er at kunne tager en streng ("MinVariabel") og indsætte den i en funktion og få returneret værdien af variablen MinVariabel.
Thomas I understand your concern about performance if it was in a tabel, but there is also a performance overhead calling a function. You could have all "constants" in a table then call a funstion which loops through the table on startup, initializing you "variable" constants!
Det kan de selvfølgelig heller ikke. Men metoden må være den samme uanset om man arbejder med konstater eller variable.
Nedenstående 2 eksempler giver jo det samme resultat:
Eks 1: Function Resultat () as Single Dim A, B A = 2 B = 3 Resultat = A * B End function
Eks 2: Function Resultat () as Single Const A = 2 Const B = 3 Resultat = A * B End function
Så når jeg omtaler konstanter og variable i én blanding, så er det jo blot fordi det er fuldstændig ligegyldigt når de skal indsættes i en formel. Nogle gange har jeg brug for at indsætte en variabel og nogle gange har jeg brug for at indsætte en konstant. Er du med?
Okay, så fortæl mig hvilket svar, som kan give mig en funktion, hvor jeg (f.eks. i en forespørgel) kan skrive: GetValue("A") og så få returneret værdien 2 (hvis A = 2 er erklæret som public variabel/konstant)
Well, det var der, hvor jeg forestillede mig, at f.eks. Eval eller en anden indbyggede funktion kunne løse problemet.
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.