Avatar billede jjensen Juniormester
30. oktober 2004 - 23:44 Der er 10 kommentarer og
1 løsning

Forespørgsel der indeholder større-/mindre end

Hej,

Det er SÅ længe siden jeg har rodet med Access, men kan huske der nogle hejer herinde :-)

PostNr-tabel indeholder:
postnr
by
km (som er antal km. fra et lager)

Pris-tabel indeholder:
MINKM (nedre km. grænse)
MAXKM (øvre km. grænse)
Pris (pris pr. ton for at fragte mellem MINKM og MAXKM fra lager)

Jeg skal have lavet en tabel der viser hvad fragtprisen bliver til hver af byerne i PostNr.-tabellen!

Er det ikke noget med at lave en forespørgsel hvor den sammenligner km for hver By med MINKM og MAXKM og spytter så Pris ud for hver By?

Mvh
John

NB: det kan godt være jeg skal bruge et lidt dummy svar :-)
Avatar billede kabbak Professor
31. oktober 2004 - 00:38 #1
like > [MINKM] and < [MAXKM]

i kriterie under km
Avatar billede jjensen Juniormester
31. oktober 2004 - 00:51 #2
Øhm - ja det ser vistnok rigtig ud. Skal jeg bare skrive det nøjagtigt sådan?

Hvordan ville man "oversætte" den sætning til dansk?
Avatar billede kabbak Professor
31. oktober 2004 - 00:52 #3
SELECT [Postnr-tabe].PostNr, [Postnr-tabe].By, [Postnr-tabe].Km, [Pris-tabel].Pris, [pris]*[km] AS Total_kr
FROM [Postnr-tabe], [Pris-tabel]
WHERE ((([Postnr-tabe].Km)>=[minkm] And ([Postnr-tabe].Km)<=[maxkm]));


Men du får ikke dem med hvor afstanden er under MINKM og dem over MAXKM
Avatar billede kabbak Professor
31. oktober 2004 - 00:54 #4
nåå, er prisen ikke per km, eller hva ?
Avatar billede jjensen Juniormester
31. oktober 2004 - 01:00 #5
Prisen er fragtprisen for f.eks. mellem 25 km og 50 km afstand fra lager.

Prisen er så igen anderledes for afstanden mellem 50 km og 100 km.
Avatar billede kabbak Professor
31. oktober 2004 - 01:15 #6
Jeg vil foreslå en ændring til Pris-Tabel

Pris_KM
Pris

Pris_KM tal fra 1 til det længste du kører

pris prisen på den afstand der står i Pris_KM

den er hurtig at lave i Excel og så kopier over

Hvis priserne stiger, er det hurtig at rette prisen for et par kilometer op

så ser den sådan ud

SELECT [Postnr-tabe].PostNr, [Postnr-tabe].By, [Postnr-tabe].Km, [Pris-tabel].Pris
FROM [Postnr-tabe] INNER JOIN [Pris-tabel] ON [Postnr-tabe].Km = [Pris-tabel].Pris_KM;
Avatar billede jjensen Juniormester
31. oktober 2004 - 01:20 #7
Hmm OK...

Havde håbet på man "bare" kunne lave en forespørgsel med det kriterie at når nu hvert Bys Km-antal lå imellem KMMIN og KMMAX i Pris-tabellen, så kunne prisen gives for den by.
Avatar billede kabbak Professor
31. oktober 2004 - 01:25 #8
den måde du ønskede ville kræve 3 priser i Pristabellen, og da der ikke kunne linkes til et felt,er det svært.

på den nye måde kan der linkes imellem KM og Pris_KM
Avatar billede wip Nybegynder
31. oktober 2004 - 16:43 #9
hej.. jeg sidder med den samme opg. har du fundet løsningen for jeg kan heller ikke finde ud af det punkt..??
Wip
Avatar billede supertekst Ekspert
12. november 2004 - 12:48 #10
Et alternativ:

PostnrTabellen udvides med et prisfelt
Der oprettes en formular for pristabellen - i denne indlægges nedenstående kode:

Når formularen lukkes - testes der om der er sket ændringer - hvis ja - omregnes alle prisfelter i postnr-tabellen - på basis af den aktuelle pristabel.

Er der ikke sket ændringer - så spørges der, om der alligevel skal ske en opdatering - f.eks. ved ændring af KM for et postnr - eller tilføjelse af nyt POSTNR.
(Her burde der nok være en kobling...- kan evt. konstrueres, hvis du kan anvende princippet)

På denne måde vil postnr-tabellen altid indeholde de aktuelle priser.

Check selv om tabelnavnene er korrekte.

Tabellerne ser således ud:
PostNrTabel:
-feltNr
-0 postnr
-1 by
-2 km
-3 pris

PrisTabel:
-0 ID (løbenr)
-1 Min
-2 Max
-3 Pris

KODE:
=====
Option Compare Database
Option Explicit
Dim ajf As Boolean, db, postTab As Recordset, prisTab As Recordset, pTabel(), antalPriser
Private Sub Form_Open(Cancel As Integer)
    ajf = False
End Sub
Private Sub Form_AfterUpdate()
    ajf = True
End Sub
Private Sub Form_Close()
Dim sv
    If ajf = True Then
        MsgBox ("Priser i postnrtabel omregnes...")
        ajfPostnrPriser
    Else
        sv = MsgBox("Der er ikke sket ændringer af priser - vil du opdatere PostnrTabel alligevel?", vbYesNo)
        If sv = 6 Then
            ajfPostnrPriser
        End If
    End If
End Sub
Private Sub ajfPostnrPriser()
Dim f, nypris
    Set db = CurrentDb
    bygInternPrisTabel                              'priser overføres til intern tabel
   
    Set postTab = db.OpenRecordset("postnr")
    For f = 1 To postTab.RecordCount
        With postTab
            nypris = findNypris(.Fields(2))          'via afstand
            .Edit
            .Fields(3) = nypris
            .Update
            .MoveNext
        End With
    Next f
End Sub
Private Sub bygInternPrisTabel()
Dim f
    Set prisTab = db.OpenRecordset("priser")
    antalPriser = prisTab.RecordCount
   
    ReDim pTabel(antalPriser, 3)
   
    For f = 1 To antalPriser
        With prisTab
            pTabel(f - 1, 0) = .Fields(1)  'minimum
            pTabel(f - 1, 1) = .Fields(2)  'maksimum
            pTabel(f - 1, 2) = .Fields(3)  'pris pr. tons
            .MoveNext
        End With
    Next f
End Sub
Private Function findNypris(afstand)
Dim f
    For f = 0 To antalPriser - 1
        If afstand >= pTabel(f, 0) And afstand <= pTabel(f, 1) Then
            findNypris = pTabel(f, 2)
            Exit Function
        End If
    Next f
End Function

=====
MVH
Avatar billede jjensen Juniormester
13. december 2004 - 22:42 #11
Må vel hellere lukke igen...
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