Avatar billede fogh Nybegynder
27. januar 2011 - 16:18 Der er 8 kommentarer og
1 løsning

Opslag i prismatrix finde interval i Access

Hej Eksperter,

Jeg har brug for en funktion der kan finde ud af hvilket interval en given mængde hører til i.
Situationen er den at der er forskellige priser ved forskellige mængder, fx.:
Mængde    Pris
0  - 10  10
11 - 20    8
21 - 30    5

Er mængden = 3, er prisen 10. Er mængden = 3, er prisen 10.

Jeg har forsøgt mig med:
DLookup("[Fra]", "tblPriser", "[Fra] >= " & Me.Tekst0)

Problemet er at en mængden på 12,13,14 osv. vil give mig prisen på 5 istedet for den jeg er ude efter. Jeg ved at ">=" er et problem her. Jeg har også forsøgt med "DFirst", men også uden held.

Excels "LOPSLAG"s funktion klarer ærterne:
Løsning i Excel: =LOPSLAG([opslagsværdi];[dataområde];[kollonne];SAND)

Hvordan får jeg rturneret den rigtige pris i Access?

på forhånd tak!!
/Thomas
Avatar billede fogh Nybegynder
27. januar 2011 - 16:19 #1
Er mængden = 13, er prisen 8. Er mængden = 25, er prisen 5 osv.
Avatar billede hugopedersen Nybegynder
27. januar 2011 - 17:00 #2
Du skal have en tabel med pris og max antal
Altså f.eks. prisen 10 og max antal 10
Så laver du en funktion der slår op i tabellen og finder det første antal der er større eller lig med det antal du vil finde prisen for. Så burde du få den rigtige pris.

Giv mig lige 1 halv time så skal jeg lige lave en test
Avatar billede hugopedersen Nybegynder
27. januar 2011 - 17:14 #3
Public Function fhpUnitPrice(intAntal As Integer) As Double
' -----------------------------------------------------------------------------------
' Purpose    : Finder pris
' Parameters :
' Returns    : Double
' Created    : 27-01-2011
' Modified  :
' Remarks    :
' -----------------------------------------------------------------------------------
On Error GoTo Error_fhpUnitPrice
  Const TableName As String = "Table1"
  Dim strSQL As String
  Dim dblResult As Double
  Dim rst As New ADODB.Recordset
  strSQL = "SELECT * FROM " & TableName & " WHERE (fldAntal >= " & intAntal & ") ORDER BY fldAntal;"
  rst.Open strSQL, CurrentProject.Connection, adOpenStatic, adLockOptimistic
  rst.MoveFirst
 
  dblResult = 0
  dblResult = Nz(rst!fldPris, 0)

  rst.Close
  Set rst = Nothing

Exit_fhpUnitPrice:
  fhpUnitPrice = dblResult
  Exit Function

Error_fhpUnitPrice:
  dblResult = 0
  Select Case Err.Number
    Case 3021
    Case 2501
    Case Is < 0
    Case Else
      MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpUnitPrice'"
  End Select
  Resume Exit_fhpUnitPrice

End Function
Avatar billede fogh Nybegynder
27. januar 2011 - 19:03 #4
Hej Hugo,
Tusind tak, tabellen har jeg allerede. Jeg prøver din funktion af ved først kommende lejlighed!
/Thomas
Avatar billede fogh Nybegynder
27. januar 2011 - 20:19 #5
Hej Hugo,
Den kommer med en kompileringsfejl: "User-defined type not defined" ved dette: rst As New ADODB.Recordset
Avatar billede hugopedersen Nybegynder
28. januar 2011 - 08:36 #6
Det er fordi du mangler en reference til Microsoft ActiveX Data Objects
Der kan godt være flere verioner på din maskine, men tag den nyeste.
Det er fordi jeg altid bruger ADODB.Recordset i stedet for den gamle DAO metode ADODB.Recordset virker nemlig også direkte på MS SQL hvis du laver din db som et ADP projekt.
Avatar billede fogh Nybegynder
28. januar 2011 - 12:55 #7
Tak, jeg måtte lige google lidt på det. Men jeg fandt frem til at fra VB menuen valgte jeg: Tools > References
Herefter fandt jeg "Microsoft ActiveX Data Objects 2.8 Library" og "Microsoft ActiveX Data Objects REcordset 2.8 Library" i listen og satte flueben ved dem.

Hugo, smider du lige et svar - for det virker bare helt perfekt ;O)

Mange tak for hjælpen!!
mvh Thomas
Avatar billede hugopedersen Nybegynder
29. januar 2011 - 11:44 #8
Ja der kunne nok have været lidt bedre forklaring på hvor du skulle lede :-)
Avatar billede hugopedersen Nybegynder
30. januar 2011 - 18:29 #9
Tak for point
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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