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??
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
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??
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.
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.
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