08. april 2002 - 16:36Der 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....
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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".
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 )
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.
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.
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.
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));
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.
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" :-))
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
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.
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?
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 ???
Du kan ikke sannemkæde spørgsmål - men du kan referere til dette ved at indsætte et link.
Synes godt om
Ny brugerNybegynder
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.