Avatar billede it-assistent Nybegynder
04. juni 2002 - 09:41 Der er 36 kommentarer og
1 løsning

Syntax spørgsmål: if textfield empty then

Simpelt spørgsmål til min access db, hvor jeg er ved at lave mit første vb.

Jeg har famlet mig frem til følgende:

Private Sub Kommandoknap78_Click()

    Me!Gældbogsnr = (DCount("id", "gb_tabel", "[gb]=1") + 1)
    Gældbogsnr = Me!Gældbogsnr
    DoCmd.OpenQuery "forespørgsel2"
    DoCmd.SetWarnings False


End Sub

Dette skal kun ske hvis feltet Me!Gældbogsnr er lig med denne tomme streng til at starte med. Dette gøres vel med if / else og noget alla :

if (Me!Gældbogsnr == ''){

    Me!Gældbogsnr = (DCount("id", "gb_tabel", "[gb]=1") + 1)
    Gældbogsnr = Me!Gældbogsnr
    DoCmd.OpenQuery "forespørgsel2"
    DoCmd.SetWarnings False
}

else {}


Hvad er den præcise syntax i vb?
Avatar billede somaliomar Praktikant
04. juni 2002 - 09:44 #1
If Me!Gældbogsnr = "" Then
  Me!Gældbogsnr = (DCount("id", "gb_tabel", "[gb]=1") + 1)
  Gældbogsnr = Me!Gældbogsnr
  DoCmd.OpenQuery "forespørgsel2"
  DoCmd.SetWarnings False
End If
Avatar billede it-assistent Nybegynder
04. juni 2002 - 09:53 #2
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()
Avatar billede martin_moth Mester
04. juni 2002 - 09:57 #3
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
Avatar billede martin_moth Mester
04. juni 2002 - 10:02 #4
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
Avatar billede terry Ekspert
04. juni 2002 - 10:03 #5
I would suggest the following.
Dim i as Integer

i = (DCount("id", "gb_tabel", "[gb]=1") + 1)

Then set the text field on the form to i. If the field is bount to the table then it will get updated automatically

Me.Gældbogsnr = i

You need to be carefull with the names you are using!
Gældbogsnr = Me!Gældbogsnr
Avatar billede it-assistent Nybegynder
04. juni 2002 - 10:06 #6
Min kode ser nu således ud:

Private Sub Kommandoknap78_Click()
    Dim strGældbogsnr As String
    strGældbogsnr = Me!Gældbogsnr
   
    If Len(Trim(strGældbogsnr)) = 0 Then
        Me!Gældbogsnr = (DCount("id", "gb_tabel", "[gb]=1") + 1)
        Gældbogsnr = Me!Gældbogsnr
        DoCmd.OpenQuery "forespørgsel2"
        DoCmd.SetWarnings False
 
    End If


End Sub

Og får fejlen "Null er brugt ugyldigt" når knappen påvirkes mens feltet er tomt.
Avatar billede martin_moth Mester
04. juni 2002 - 10:12 #7
Prøv at bruge mit "fortsatte svar", altså bruge

if val(Me!Gældbogsnr) then

eller

strGældbogsnr = Me!Gældbogsnr
If val(strGældbogsnr) = 0 then

(Så skal du fjerne linien Dim strGældbogsnr As String :o)
Avatar billede it-assistent Nybegynder
04. juni 2002 - 10:18 #8
That will not work Terry.

The functionality I want is that when you push the button the you get a "Gældbogsnr" and then you can not get a new one for the same "post".

Because of that I wish to have: if you dont have a number - here is a number. If you already got a number - sorry can't help you.
Avatar billede terry Ekspert
04. juni 2002 - 10:18 #9
what is Me!Gældbogsnr ?
if this is a field in the db then you should re-think what you are trying to do!
what is it you are trying to do?
Avatar billede martin_moth Mester
04. juni 2002 - 10:28 #10
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
Avatar billede it-assistent Nybegynder
04. juni 2002 - 10:29 #11
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.
Avatar billede terry Ekspert
04. juni 2002 - 10:31 #12
Is Me!Gældbogsnr in a table?
Avatar billede it-assistent Nybegynder
04. juni 2002 - 10:37 #13
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.
Avatar billede martin_moth Mester
04. juni 2002 - 10:47 #14
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
Avatar billede terry Ekspert
04. juni 2002 - 10:47 #15
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.
Avatar billede martin_moth Mester
04. juni 2002 - 10:50 #16
PS - kunne du ikke bruge svaret fra http://www.eksperten.dk/spm/219643 til noget (hvis ja, så luk spørgsmålet, hvis nej, så sig hvad der mangler ;o)
Avatar billede it-assistent Nybegynder
04. juni 2002 - 10:51 #17
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...
Avatar billede it-assistent Nybegynder
04. juni 2002 - 11:01 #18
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
   

End Sub
Avatar billede martin_moth Mester
04. juni 2002 - 11:10 #19
Prøv denne

if val(Me.Gældbogsnr) = 0 then
Avatar billede martin_moth Mester
04. juni 2002 - 11:14 #20
Hvis ovenstående ikke virker, så virker det her i hvert fald:

Dim MinVariabel
MinVariabel = Me.Gældbogsnr
if val(MinVariabel) = 0 then
Avatar billede it-assistent Nybegynder
04. juni 2002 - 11:21 #21
Jeg får stadig en fejl. Jeg tror det skyldes at Me.Gældbogsnr er Null.
Kan min variabel ikke tildeldes værdien Null??

Kan man skrive noget i retning af

if val(MinVariabel) = 0 or val(MinVariabel) = Null Then
bla bla bla
End if

??
Avatar billede it-assistent Nybegynder
04. juni 2002 - 11:22 #22
eller if minVarialel.equals(null) ?
Avatar billede tjacob Juniormester
04. juni 2002 - 11:24 #23
Hvis du modificerer martins kommentar sådan:

Dim MinVariabel as Integer  <-
MinVariabel = Me.Gældbogsnr
if val(MinVariabel) = 0 then

Så kan MinVariabel IKKE indeholde Null, da den er erklæret som en integer, men vil blot være = 0.
Avatar billede martin_moth Mester
04. juni 2002 - 11:27 #24
Problemet er, at jeg ikke aner hvilken variabeltype Me.Gældbogsnr skal gemmes som (integer, Byte, Single, ...?)

Prøv at udskriv

msgbox "Minvariabel har værdien " & MinVariabel

inden din if-sætning, så kan du se hvad værdien af MinVariabel faktisk er. Og det kan du så tjekke på...
Avatar billede terry Ekspert
04. juni 2002 - 11:30 #25
Number as LONG integer
Avatar billede tjacob Juniormester
04. juni 2002 - 11:35 #26
-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.
Avatar billede martin_moth Mester
04. juni 2002 - 11:35 #27
Godt så - så skulle vi være der ;o)

Dim MinVariabel as Long  ' Jvf. svar fra terry
MinVariabel = Me.Gældbogsnr
if val(MinVariabel) = 0 then
Avatar billede it-assistent Nybegynder
04. juni 2002 - 11:36 #28
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)
Avatar billede tjacob Juniormester
04. juni 2002 - 11:41 #29
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.
Avatar billede it-assistent Nybegynder
04. juni 2002 - 11:45 #30
Ok. Jeg løser problemet på en anden måde. Sætter standardværdi i Me.Gældbogsnr til 0 og kontroller for dette.

Tak for hjælpen til jer alle.
Avatar billede martin_moth Mester
04. juni 2002 - 11:49 #31
Husk at lukke spørgsmålet ;o)
Avatar billede it-assistent Nybegynder
04. juni 2002 - 11:51 #32
Jeg prøver
Avatar billede martin_moth Mester
04. juni 2002 - 11:57 #33
Nu gav du lige 15 point til dig selv - ikke at jeg behøver nogle point, men et indlæg med >30 svar bør vel udløse point til andre end dig selv :)
Avatar billede it-assistent Nybegynder
04. juni 2002 - 11:59 #34
Jeg fucker rundt i systemet. Giv mig guidelines for at sende point til dig (stor tak for hjælpen) samt lukke spørgsmålet.

mvh
Dennis
Avatar billede terry Ekspert
04. juni 2002 - 12:07 #35
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)
Avatar billede it-assistent Nybegynder
04. juni 2002 - 12:14 #36
Okay. Its not bad will but this "eksperten" system has not been my friend so far.

How can I see wether the question is closed or open ? How do I close it?
How can I see which peoble has recieved points from me?
Avatar billede martin_moth Mester
04. juni 2002 - 12:50 #37
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...
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