webForumDet fria alternativet

Testar SQL fråga med IF-sats

8 svar · 193 visningar · startad av Jester

JesterMedlem sedan sep. 200188 inlägg
#1

Hej

Jag håller på och klurar på en funktion som skall ställa en fråga mot databasen och beroende på om frågan returnerar ett resultat eller inte skall saker hända.

Koden ser ut:

question = "SELECT Dag FROM Tbl_Dagar WHERE Dag Like " & Me.InDag

If IsNull(question) Then
    Response = MsgBox(Msg, Style, Title)
        If Response = vbOK Then
            DoCmd.OpenForm "Frm_ResSokDag", acNormal, , "Dag = " & Me.InDag, acFormEdit
            DoCmd.Close acForm, "Frm_NyDag", acSaveNo
        
        Else
            Me.InDag.SetFocus

Else
Me.Dagbok.SetFocus

Detta är inte hela funktionen utan bara det väsentliga samt att jag vet att den är fel men det en bild av hur jag tänkte.
Hur testar jag min sql-fråga med IF??
Finns där en bättre lösning??

Tack på förhand!!

Engine^Medlem sedan dec. 20003 887 inlägg
#2

Genom att köra frågan...

Dim rsDag As New ADODB.Recordset

question = "SELECT Dag FROM Tbl_Dagar WHERE Dag Like " & Me.InDag
rsDag.Open strSQL, CurrentProject.Connection

If rsDag.EOF Then
  Response = MsgBox(Msg, Style, Title)
  
  If Response = vbOK Then
    DoCmd.OpenForm "Frm_ResSokDag", acNormal, , "Dag = " & Me.InDag, acFormEdit
    DoCmd.Close acForm, "Frm_NyDag", acSaveNo
  Else
    Me.InDag.SetFocus
  End If
Else
  Me.Dagbok.SetFocus
End If

Set rsDag = Nothing
JesterMedlem sedan sep. 200188 inlägg
#3

Ett förtydligande

Hej och tack för svaret, skall genast prova.
Dock har jag en fråga angående din lösing.

Du skrev...

question = "SELECT Dag FROM Tbl_Dagar WHERE Dag Like " & Me.InDag
rsDag.Open strSQL, CurrentProject.Connection

För att få det att gå ihop bör det väl vara

[U]strSQL[/U]  = "SELECT Dag FROM Tbl_Dagar WHERE Dag Like " & Me.InDag
rsDag.Open strSQL, CurrentProject.Connection

Har jag tolkat det rätt??

Engine^Medlem sedan dec. 20003 887 inlägg
#4

Hehe... jodå, du har förstått det helt riktigt :)

Jag som fumlade en aning med tangentbordet bara ;)

JesterMedlem sedan sep. 200188 inlägg
#5

Vad är fel i koden

Hej

Jag har något fel denn kod men ser inte vad det är

Private Sub InDag_AfterUpdate()

Dim strSQL As String
Dim rsDag As New ADODB.Recordset
Dim Msg, Style, Title, Response
Msg = "Datumet du angivit finns redan i databasen. Tryck Ok för att visa datumet, Tryck Cancel för att ange nytt datum"
Style = vbOKCancel + vbCritical
Title = "Anteckningen finns redan"

strSQL = "SELECT Dag FROM Tbl_Dagar WHERE Dag Like " & Me.InDag
rsDag.Open strSQL, CurrentProject.Connection

If rsDag.EOF Then
    Response = MsgBox(Msg, Style, Title)
    If Response = vbOK Then
        DoCmd.OpenForm "Frm_ResSokDag", acNormal, , "Dag Like " & Me.InDag, acFormEdit
        DoCmd.Close acForm, "Frm_NyDag", acSaveNo
    Else
        Me.InDag.SetFocus
        Exit Sub
    End If
Else
Me.Dagbok.SetFocus
End If
Set rsDag = Nothing

När jag försöker öppna ResSokDag hittar den inte dagen och när jag trycker Cancel så sätter den inte fokus på InDag.
Någon som har en bra ide vad det är för fel??

Engine^Medlem sedan dec. 20003 887 inlägg
#6

I och med att du tesar med

If rsDag.EOF Then ...

betyder det att du ställer frågan om datumet är ledigt.

strSQL = "SELECT 1 FROM Tbl_Dagar WHERE Dag Like " & Me.InDag
rsDag.Open strSQL, CurrentProject.Connection

If Not rsDag.EOF Then
  If MsgBox(Msg, Style, Title) = vbOK Then
    DoCmd.OpenForm "Frm_ResSokDag", acNormal, , "Dag Like " & Me.InDag, acFormEdit
    DoCmd.Close acForm, "Frm_NyDag", acSaveNo
  Else
    Me.InDag.SetFocus
    Exit Sub
  End If
Else
  Me.Dagbok.SetFocus
End If

rsDag.Close
Set rsDag = Nothing

Så skulle jag ha gjort om jag förstår din kod riktigt.

JesterMedlem sedan sep. 200188 inlägg
#7

Ave

Nej det funkar inte.
Det jag vill göra är att när man skall lägga in en ny anteckning så efter man slagit in datumet så skall den kolla om en anteckning för det datumet redan existerar.

Existerar den så skall man genom att trycka Ok förflyttas till ett annat formulär där man redigerar posten. Trycker man Cancel så skall fokus sättas på datumfältet så man kan slå in ett nytt datum.
Existerar inte datumet så skall fokus sättas på anteckningsboxen.

Probelemet är 2 st. Dels kommer posten inte upp i det nya formuläret när man tryckt Ok och trycker man Cancel så sätts inte fokus i datumfältet.

Ditt förslag gjorde att det blev tvärt om att alla som inte existerade redan, studsade.

Engine^Medlem sedan dec. 20003 887 inlägg
#8

Ok, då var det jag som missförstog ändå. Men men...

Då tycker jag ju faktiskt att den kod du visade bör ha fungerat utan några problem. Fokuseringen ska helt enkelt fungera, så jag begriper inte varför det inte gör det. Testa peta in någon annan kod i else-delen och se om den körs när du trycker Cancel. Det kanske kan vara så att din MsgBox är knasig?

Jag kanske kan kika på din databas och se om jag upptäcker något, för som det är nu gör jag inte det. Det borde ju fungera ;)

JesterMedlem sedan sep. 200188 inlägg
#9

Jag får f-n i mig raptus på detta....Nu funkar inte ens orginallösningen som jag fick utav dig. Då fungerade åtminstone kollen av datumet. Rikskeff. x(

Du får gärna ta en titt...databasen är så simpel så det borde inte finnas något annat som krånglar till det. :l

pontus@gavatum.com så mailar jag tillbaka den

Tack på förhand!

143 ms totalt · 3 externa anrop · v20260731065814-full.91fd2ad2
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)