webForumDet fria alternativet

Infoga pris vid val av matvara

5 svar · 372 visningar · startad av higa

higaMedlem sedan aug. 2000359 inlägg
#1

Jag håller på och gör en databas för matinköp, och har kört fast igen.
Det fungerar nu att när jag valt affär och kategori i ett formulär så visas bara dom matvaror som jag har registrerat för vald affär och kategori.

Nu till det aktuella problemet: Hur gör jag om jag vill att textrutan "dd_apris" ska få det pris som motsvaras av vald matvara i dd.matvara efter uppdatering?
Priset ligger i Matvaror.Pris, matvaran ligger i Matvaror.Matvara

Koden för formuläret ser ut så här:

Private Sub dd_affär_AfterUpdate()
  Dim strSQL As String

  strSQL = "SELECT Matvara FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Kategori = '" & Me.dd_kategori & "'"

  Me.dd_matvara.RowSource = strSQL
  Me.dd_matvara.Requery
End Sub

Public Sub dd_kategori_AfterUpdate()
  Dim strSQL As String

  strSQL = "SELECT Matvara FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Kategori = '" & Me.dd_kategori & "'"

  Me.dd_matvara.RowSource = strSQL
  Me.dd_matvara.Requery
End Sub

Private Sub dd_matvara_AfterUpdate()
End Sub

Antagligen behöver jag ha något i dd_matvara_AfterUpdate(), för att få fram a-priset, men vad?

Mvh Lukas

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

Du behöver välja ut priset på varan...

SELECT Pris FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Matvara = '" & Me.dd_matvara & "'"

Och den lägger du i dd_matvara_AfterUpdate(), ja.

higaMedlem sedan aug. 2000359 inlägg
#3

Kan inte VB något vidare än, så jag hajar inte riktigt hur jag ska få textrutan "tf_apris" att tilldelas värdet från uttrycket.
Prövade att skriva

Private Sub dd_matvara_AfterUpdate()
  Dim strSQL As String
  strSQL = "SELECT Pris FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Matvara = '" & Me.dd_matvara & "'"
  Me.tf_apris.Value = strSQL
End Sub

och jag får "körfel 2113 värdet är ej giltigt för detta fält" när jag öppnar formuläret och väljer matvara.

Mvh Lukas

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

M'kay... din strSQL-variabel är en fråga som ställs till databasen. Den plockar ut värden baserat på vad du ger den...

Private Sub dd_matvara_AfterUpdate()
  Dim strSQL As String

  strSQL = "SELECT Pris FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Matvara = '" & Me.dd_matvara & "'"

  Me.tf_apris = CurrentProject.Connection.Execute(strSQL, , adCmdText)(0)
End Sub

Så kan du nog skriva för att få ut priset, men då krävs det att det inte är några tomma värden i någon av dropdown-listorna. Iofs är en sådan kontroll enkel att lägga till

Private Sub dd_matvara_AfterUpdate()
  Dim strSQL As String

  If Not (Me.dd_matvara = vbNullString Or Me.dd_affär = vbNullString Or IsNull(Me.dd_matvara) Or IsNull(Me.dd_affär)) Then
    strSQL = "SELECT Pris FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Matvara = '" & Me.dd_matvara & "'"

    Me.tf_apris = CurrentProject.Connection.Execute(strSQL, , adCmdText)(0)
  End If
End Sub

Sedan bör du även akta dig för att inte försöka visa data som inte finns, så en slutlig funktion för att göra det du vill skulle kunna se ut så här.

Private Sub dd_matvara_AfterUpdate()
  Dim adoRS As ADODB.RecordSet
  Dim strSQL As String

  If Not (Me.dd_matvara = vbNullString Or Me.dd_affär = vbNullString Or IsNull(Me.dd_matvara) Or IsNull(Me.dd_affär)) Then
    strSQL = "SELECT Pris FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Matvara = '" & Me.dd_matvara & "'"

    Set adoRS = New ADODB.RecordSet
    adoRS.Open strSQL, CurrentProject.Connection

    If Not adoRS.EOF Then
      Me.tf_apris = adoRS(0)
    End If

    adoRS.Close
  End If

  Set adoRS = Nothing
End Sub

Det är bara att testa sig fram, så kommer det en gubbe med ljus och lykta när du minst anar det ;)

higaMedlem sedan aug. 2000359 inlägg
#5

Stort tack! Nu fungerar det perfa :)

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

Trevligt. Varsågod :)

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