Avatar billede kjar75 Nybegynder
08. april 2002 - 16:36 Der er 20 kommentarer og
2 løsninger

DLOOKUP - eller lign. funktion

Jeg mangler hjælp til en funktion (jeg tror det er DLOOKUP) - i excel er det LOPSLAG !!

Jeg har lavet 2 tabeller med følgende felter..

Tabel.1
Ordrenr
Brede
Længde
Pris

Tabel.2
Brede
Længde
Pris

Hvor tabel.2 skal bruges som opslagstabel / prisbog.
Brede er defineret i interval, dvs. 100,110,120 osv.
ligeledes er gældende for længden...

Mit spørgsmål er således...

Jeg opretter en forespørgsel på baggrund af de 2 ovenstående tabeller, hvor jeg ønsker at "finde" prisen i tabel.2 - på baggrund af de værdier (brede & længde) fra tabel.1

Når prisen er fundet (ved hjælp af et interval-opslag) i tabel.2, skal den gemmes i tabel.1

OG - sidst men ikke mindst...
Skal denne funktion laves i udtryksgenerator ??
I så fald - hvordan ??

Jeg er lidt på bar bund mht programering / udtryksgenerator....

På forhånd tak :-)
Avatar billede region Nybegynder
08. april 2002 - 17:27 #1
Det har ikke noget med Dlookup at gøre... Du skal bare lave din forespørgsel som beskrevet og derefter evt. lave en update query der opdatere din tabe 1 med værdierne i tabel 2 på prisfeltet.

Hvorfor vil du egentlig opdatere tabel 1 ??? du kan jo bare bruge bruge relationer såfremt du skal bruge resultatet dybere inde i database.
Evt. kunne du lave en UNION query.
Avatar billede mugs Novice
08. april 2002 - 21:30 #2
Jeg er til dels enig med region vedr. relationer. Men det kan dog sagtens laves ved en Dlookup. Koden er afprøvet i Access97 og fungerer fint. Me refererer til den aktive formular, og er beregnet til numeriske felter:

Dim intsearch As Long, intsearch1 As Long
intsearch = Me!Længde
intsearch1 = Me!Bredde
Me!Pris = DLookup("[Pris]", "Tabel2", "[Længde]=" & intsearch) And DLookup("[Pris]", "Tabel2", "[Bredde]=" & intsearch1)

Husk, at Dlookup funktionen skal skrives på een linie, og ikke som her skilles ved "And".
Avatar billede proaccess Nybegynder
09. april 2002 - 07:35 #3
>Mugs: skulle det ikke være...

Me!Pris = DLookup("[Pris]", "Tabel2", "[Længde]=" & intsearch & " AND [Bredde]=" & intsearch1)
Avatar billede region Nybegynder
09. april 2002 - 08:55 #4
MUGS :

Grunden til at jeg skrev at det ikke havde noget med Dlookup at gøre var fordi Kjar75 ikke nævner noget om en formular.... Jeg er enig i at man selvfølgelig her kan lave Dlookup. MEN....
Er man ikke bevandret i Dlookup og dennes "langsommelige" opdatering kunne man jo lave en query som jeg nævner og dermed basere sin formular på denne.

Så er det bare at trække felterne ned i formen fra feltvælgeren..

:-) ( det er vel ikke for ingenting vi er "gæve" sønderjyder )
Avatar billede terry Ekspert
09. april 2002 - 13:43 #5
If you ask me I would re-design the tables!

Is the Brede and Længde in table1 the same as in table2 or is it possible to purchase other lengths where the price is calculated there after?

IF you can ONLY purchase fixed sizes then I would have an ID for each size in table2 and then in table1 I would store the ID and the price. Doing it this way I could always see which item was purchases and to what price.
Avatar billede mugs Novice
09. april 2002 - 17:14 #6
proaccess > både og. Jeg har lige afprøvet begge koder, og de fungerer fint i Access97. Jeg vil medgive dig, at din er mere korrekt, idet den er mere elegant og simpel.
Avatar billede mugs Novice
09. april 2002 - 17:16 #7
region > Det kan jo godt være jeg tager fejl, men jeg har simpelthen antaget, at vi taler om en formular.
09. april 2002 - 20:07 #8
Mugs og Proaccess-> Det er altid mest korrekt at foretage så få DLookup's som muligt. Mugs's løsning tager således dobbelt så lang tid (ca) som Proaccess'es. Har vi store datamængder eller et langsomt netværk, så kan vi snakke flere sekunders forskel.
Avatar billede mugs Novice
09. april 2002 - 20:27 #9
thomas > Enig, men det er vel også det jeg skriver både i mit svar 8/4 og min kommentar til proaccess 9/4.
Avatar billede nih Novice
09. april 2002 - 21:04 #10
Nu mangler vi jo en kommentar fra kjar75.

Hvis det er meningen at man skal kunne få div. rabatter eller prislisten jævnligt ændres, passer tidligere ordre jo ikke længere.
vha en opdaterings foresp. sikre man at kun 'tomme' priser i tabel1 opdateres:
UPDATE tbl1, tbl2 SET tbl1.Pris = [tbl2].[pris]
WHERE (((tbl1.bredde)=[tbl2].[bredde]) AND ((tbl1.længde)=[tbl2].[længde]) AND ((tbl1.Pris)=0 Or (tbl1.Pris) Is Null));

Niels
Avatar billede mugs Novice
09. april 2002 - 21:43 #11
nih > Ja en kommentar fra kjar75 vil være velkommen - hvis han (hun) ikke er blevet helt rundforvirret af mulighederne. Det er jo en af de charmerende ting ved emnet, at der er så mange måder at gøre tingene på. Bedst som man tror, den dybe tallerken er opfundet igen, kommer en bruger med et nyt forslag, der er mere elegant end det forrige.

Dit svar ang. ændring af prislisten er selvfølgelig noget, der skal tages i betragtning i en samlet løsning. Jeg opfatter tabel1 som en tabel, hvori nye salg indtastes med gældende priser, og der vil derfor aldrig være tomme proder i denne tabel. Det er derfor ikke nødvendigt at opdatere denne. Tabel2 skal naturligvis opdateres med den altid gældende priser.

Hvis vi går lidt videre skal vi vel også tænke på historikken m.h.t. evt. momsregnskab, eller blot en oversigt over, hvad de enkelte kunder har købt. Så skal vi have fat i en 3. tabel der udelukkende lagrer køb til senere brug.

Og sådan kan vi blive ved!
Avatar billede kjar75 Nybegynder
10. april 2002 - 16:02 #12
Hej allesammen - og tak for alle svar :-)

Ja, jeg må indrømme at jeg er en smulle "rundtosset" efter alle disse besvarelser...

Her er lidt ekstra info - for at specificere ovenstående debat...

Tabel.2 angiver priser i MANGE forskellige intervaller/kombinationer med brede og længde...

MEN - i tabel.1 (selve ordrelinien) vil der oftest blive indtastet en brede og længde som IKKE stemmer nøjagtig overens med tabel.2

Eks.
Tabel.1
Ønsket brede;længde = 115;110

Tabel.2 - de definerede priser ud fra mål
Brede  Længde  Pris
100    100      150
120    100      170
120    120      190

Og så fremdeles.... Data fra tabel.1 skal således søge efter den nærmeste værdi i tabel.2 !!!!

Mugs har fuldstændig ret mht historik / momsregnskab...
Når "prisen" er fundet FØRSTE gang, skal den "lagres" i selve ordren og gemmes... For priserne kan løbende blive ændret!!!

Hvis man herudover kan lave et ekstra felt til rabat vil det bare være perfekt !!!

Jeg er stadig ikke med på, hvor "formlen" skal stå henne, både i forespørgslen og/eller formular !!!

Håber i kan hjælpe mig et skridt videre efter ovenstående :-)

PS:
Da jeg tager på en kort ferie fra idag - og først kommer tilbage mandag 15/4 kan jeg desvære ikke svare på evt. spørgsmål.
Glæder mig dog til at komme tilbage og se, og i har flere indlæg som kan hjælpe mig i "mål"  :-))
Avatar billede mugs Novice
10. april 2002 - 22:37 #13
God ferie.
Avatar billede proaccess Nybegynder
11. april 2002 - 07:45 #14
Det burde vel være nok, at lave en knap på formularen, som fx. hedder "btnFindPris", denne kunne så finde mindste-prisen i tabel2, hvor brede og længde er lig med eller større en de angivne på på formularen... (i mit eksempel hedder felterne på formularen: Brede, Længde og Pris ligesom i tabellerne)

Private Sub btnFindPris_Click()
  If Me!Brede>0 And Me!Længde>0 Then 'står der noget i både Brede og Længde på formularen
    If Me.Pris<>0 Then 'står der en pris i forvejen?
      If MsgBox("Vil du overskrive den eksisterende pris?", vbYesNo)=vbYes Then
        Me!Pris=DMin("[Pris]","Tabel2","Brede>=" & Me!Brede & " AND Længde>=" & Me!Længde)
      End If
    Else
      Me!Pris=DMin("[Pris]","Tabel2","Brede>)" & Me!Brede & " AND Længde>=" & Me!Længde)
    End If
  End If
End Sub
Avatar billede proaccess Nybegynder
11. april 2002 - 07:46 #15
på den måde kan priserne genberegnes, men udgangspunktet er at der trykkes på knappen ved ordreoprettelse, og at prisen dermed gemmes een gang for alle på selve ordren.
Avatar billede terry Ekspert
12. april 2002 - 20:52 #16
I STILL say that the databases should be redesigned! If each product has a unique ID then it is just a case of saving the ID and the CURRENT Price in table1 alomg with the length+width. Thats what RELATIONAL DATABASES is all about!
Why make this difficult?
Avatar billede kjar75 Nybegynder
15. april 2002 - 13:01 #17
Hej proaccess

Tusinde tak for svaret :-)

Din kode volder dog stadig problemer, når jeg indsætter en kommandoknap
med hændelsesprocedure iht din kode...

Fejlmeddelelsen kommer her...

"Dette Recordset kan ikke opdateres. (Fejl 3326)

Du har forsøgt at redigere data i et felt, der er bundet til et Recordset-objekt af typen snapshot. Felter af typen Snapshot i en Microsoft Jet-database kan ikke redigeres."

Jeg kan ikke lige overskue hvad der går galt :-((

Vil du prøve at indsætte funktionen/koden i db hvis jeg må maile den til dig ???

Mange hilsner kjar75
Avatar billede proaccess Nybegynder
15. april 2002 - 13:06 #18
Du kan bare sende den på proaccess@hotmail.com
Avatar billede kjar75 Nybegynder
15. april 2002 - 13:20 #19
Thanks :-)

Den er hermed sendt...
Avatar billede proaccess Nybegynder
15. april 2002 - 13:30 #20
Du skal "bare" basere din formular direkte på tabel1, og slette forespørgslen "PRIS", den er overflødig!

Jeg sender ikke basen tilbage, med mindre du beder mig om det... (det skulle være lige til at få retttet)
Avatar billede kjar75 Nybegynder
15. april 2002 - 15:09 #21
Så for satan... Det virker :-)))

Det er bare perfekt.....

Har dog en ekstra lille ting at tilføje !!

Der er et ekstra felt i begge tabeller kaldet TYPE som enten kan være "S eller K" !!!

Jeg har "viderebygget" funktionen til

Me!PRIS = DMin("[Pris]", "Tabel2", "Brede>=" & Me!BREDE & " AND Længde>=" & Me!LÆNGDE & " AND TYPE>=" & Me!TYPE)

MEN - mit prisfelt kan IKKE opdateres da værdien i feltet TYPE skal være et tal !!!

Kræver det en længere kode at klare denne problemstilling ??

Sidst men ikke mindst - jeg vil gerne uddele lidt point, og oprette dette spørgsmål med nye point !!!

Kan man oprette nyt spørgsmål - kædet til dette ???
Avatar billede mugs Novice
15. april 2002 - 17:43 #22
Du kan ikke sannemkæde spørgsmål - men du kan referere til dette ved at indsætte et link.
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