Dette fungerer ikke! Dvs. if Then delen fungerer, men Me!Gældbogsnr = "" fungerer ikke efter hensigten. Feltet er defineret til at være et tal. I min test står der ikke noget i feltet, men alligevel bliver if delen ikke udført. Er der en anden måde at skrive "" på, der fanger alle "tomme felter" (fx hvis der bare er sat et enkelt mellemrum i feltet). I java String.trim()
Kan du ikke læse Me!Gældbogsnr ind i en String-variabel.
Herefter kan du trimme den string (fjerner mellemrum), og tage længden på strengen. Er den nul, indeholder Me!Gældbogsnr enten ingenting eller kun mellemrum. Altså
Dim strGældbogsnr as String
strGældbogsnr = Me!Gældbogsnr
If Len(trim(strGældbogsnr)) = 0 then Msgbox "Me!Gældbogsnr indeholder ingenting" End If
Hov - jeg så lige, at Me!Gældbogsnr er defineret til at være tal. Så kan du måske i stedet bruge val() - funktionen (der returnerer værdien af en variabel)
strGældbogsnr = Me!Gældbogsnr If val(strGældbogsnr) = 0 then Msgbox "Me!Gældbogsnr indeholder ingenting" 'Udfør det du nu vil udføre... End If
Eller måske kan man endda direkte skrive, uden først at læse Me!Gældbogsnr ind i en variabel:
If val(Me!Gældbogsnr) = 0 then Msgbox "Me!Gældbogsnr indeholder ingenting" 'Udfør det du nu vil udføre... End If
Jeg kan se at det begynder at dreje sig mere og mere om en database. Så jeg smutter - håber at du fik svar på det du _egentligt_ spurgte om, nemlig hvordan du tjekker om en variabel er tom og hvordan syntaksen for If Then Else er... /Martin
Me!Gældbogsnr is a unique running number. If the user pushes the button she/he gets a unique number - and that number can not be used again. The way I have done it is that I have a table with rows. Number of rows is equal to the Gældbogsnr. When the user pushes the button field in the formular (Me!Gældbogsnr) and the table (Gældbogsnr) is assigned with the value "number of rows in the other table + 1.
I know it is a bit primitive but I'm not exactly on homefield in this vb/access/microsoft hell.
When you request a number, the program checks how many numbers have already been given and the it displays the number in the "formular" AND puts it in the table in the column "Gældbogsnr".
As I understand it (and that is probably not to well, Me!Gældbogsnr is the field in the formular.
Sådan noget med at connecte til databaser osv - det er jo ikke normalt det man kaster sig ud i i VB når man samtidigt ikke kender syntaksen for If then Else - kan du ikke skrive programmet i et sprog du kender? Jeg tænker bare, hvis det bliver meget mere kompliceret end det er nu (og det gør det garanteret), så vil du sikkert få rigtig mange problemer. Og få en løsning, der under alle omstændigheder aldrig vil blive god og bestemt ikke vedligeholdelsesvenlig :o(
Bare et velment råd - du skal naturligvis have lov at kaste dig direkte ud i VB og databaser hvis du vil det ;o) Held og lykke, Martin
well actually when you write me!Gældbogsnr then you are refreing to the field in the TABLE an NOT the field on the form Me.Gældbogsnr is the field on the form. Quite often the name (Gældbogsnr) for the field in th etabel and the field on the form are both the same but as I mentioend earlier you have to be carefull with this! It is best if you re-name the field on the form to something else that way you know exactly which one you mean for example txtGældbogsnr.
Tak for tipset Martin. Jeg ville elske at lave det her i Java og mysql, men der findes firmaer der sværger til microsoft (gud bedre det). Derfor er vist ingen vej udenom.... Men jeg har advaret dem om mine forkundskaber, så de forventer forhåbentlig ikke det helt vilde...
Nu skyder jeg med spred hagl og når Tabellens felt Gældbogsnr er tom (og formularfeltet med samme navn), så går den stadig ikke ind i nogle af de tre if sætninger???
Private Sub Kommandoknap78_Click()
If (Me.Gældbogsnr = "") Then MsgBox "tom" DoCmd.OpenQuery "forespørgsel2" Me!Gældbogsnr = (DCount("id", "gb_tabel", "[gb]=1") + 1) Me.Gældbogsnr = Me!Gældbogsnr DoCmd.SetWarnings False End If
If (Me.Gældbogsnr = Null) Then MsgBox " null " DoCmd.OpenQuery "forespørgsel2" Me!Gældbogsnr = (DCount("id", "gb_tabel", "[gb]=1") + 1) Me.Gældbogsnr = Me!Gældbogsnr DoCmd.SetWarnings False End If
If (Me.Gældbogsnr = 0) Then MsgBox "0" DoCmd.OpenQuery "forespørgsel2" Me!Gældbogsnr = (DCount("id", "gb_tabel", "[gb]=1") + 1) Me.Gældbogsnr = Me!Gældbogsnr DoCmd.SetWarnings False End If
-Det var et autonummer, ikke? Integer hvis ikke du regner med den kommer over ca. 32.000 ellers Long som terry siger. (eller Single eller Double). Det er sådan set ligegyldigt, bare den er erklæret. Hvis ikke den er, så tror VB det er en Variant, og den kan indeholde Null.
Kan en kan en variabel af typen integer, long eller what ever ikke altid tildeles værdien "null" i vb? Dette forvirrer mig - da alle variable, objekter mv. i Java kan tildeles værdien null. (ikke at Java er noget særligt, men det er nu det jeg kan).
Problemet er i såfald ekstremt simpelt. Hvordan kontroller jeg om noget er null ( i java : if i == null)
Integer, Long, Single, Double er alle 'Tal'-datatyper, og kan ikke tildeles værdien Null.(ligesom f.eks. String heller ikke kan).
Du kan tjekke for Null med datatypen Variant, som er default i VB, dvs hvis du ikke erklærer er variabel som en bestemt datatype, så vil den automatisk være en Variant. (Fordi Variant kan indeholde alle typer data).
så: Dim Var
er en Variant datatype. Det er: Dim Var As Variant også. Men ikke Dim Var As Long.
it-assistent>It is always best to NOT reject any answers UNTIL you are finished with the question that way you can "share" points out to all those who helped if you want to. It isnt always possible to get the answer one wants but its nice to say "thanks for your help" that way people are more willing to assist next time :o)
Når du opretter et spørgsmål optræder det under "Åbne spørgsmål". Du vælger hvor mange points det er værd, når du opretter det, f.eks. 30 point.
Når du har fået et eller flere tilfredsstillende svar, kan du give en eller flere der har svaret points, f.eks. 10 point til Hr. A og 20 point til Hr. B, hvis du synes hr. B har ydet lidt mere end Hr. A.
Når du acceptere et spørtgsmål (og derved fordeler de points du har tildelt spørgsmålet), ryger det fra "Åbne Spørgsmål" ned i "Spørgsmål med accepteret svar"...
Jeg behøver ingen points for ovenstående - men til en anden gang, skal du nok være opmærksom på det. Og tildele points efter sværhedsgrad - jo flere points, jo større er lysten fra os andre til at besvare det. Du tjener points ved at svare andre spørgsmål og får desuden 5 points hver dag...
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.