KKalle MMedlem sedan mars 20041 936 inlägg "Det är en god regel att referera till ett objekt eller en egenskap med dess fullständiga identifierare. I vissa fall krävs en fullständig identifierare. Om du till exempel vill referera till en kontroll i ett formulär eller i en rapport som inte är aktuellt formulär eller aktuell rapport måste du skriva den fullständiga identifieraren.
I följande uttryck visas summan av värdena i kontrollerna Delsumma och Frakt i formuläret Order i en kontroll i ett annat formulär:
Prova följande:
= Forms![Order]![Delsumma] + Forms![Order]![Frakt]”
Annars får du göra en fråga och göra beräkningarna där.
AAndreasCMedlem sedan mars 20011 964 inlägg Jag har lyckats att göra uträkningen i samma formulär som delsummorna. Jag lyckas av någon anledning inte göra uträkningen i ett annat formulär. Jag får #Namn?
Undrar ifall det går att få uträkningen jag nu lyckats göra skriven mot en tabell? Kanske med VBA? På det sättet så kan jag ju skriva resultatet av uträkningen mot den cellen där jag egentligen vill att uträkningen ska stå, och så hämtar jag in resultatet i formuläret genom att helt enkelt koppla formulärfältet mot rätt tabellcell.
SsergeiMedlem sedan feb. 200921 inlägg Hmm inte alldeles att ge ett glasklart svar faktiskt.
Jag tänker till att börja med inte ge mig in i om du ser data i ett underformulär eller inte
1. Jag tror mig förstå att summan inte lagras i en tabell just nu? Det kan finnas situationer när man måste det men jag tror inte så är fallet här.
2. Lagras summan av pris och antal i någon fråga?
3. Bygger dina resp. formulär och/eller underformulär på denna fråga?
Om det nu är så att summa av pris och antal produkter i varje order/orderrad lagras i en fråga så måste formuläret bygga på en fråga som har detta med. Annars kan du inte göra någon summering. Den summa du ser i ett formulär är ju bara "giltigt" i det formuläret, eftersom du inte lagrar detta beräknade värde i någon tabell.
Vet inte om jag fick till den här texten på ett vettigt sätt men ...
AAndreasCMedlem sedan mars 20011 964 inlägg Jag orkar snart inte bråka med Access mer. Det verkar som Access inte är logiskt på något sätt. Man gör något som man anser bara ska fungera med det vill inte.
Nu har jag skapat en fråga där jag tar med alla fält och jag har där skapat ett beräkningsfält som räknar ihop delsummorna för varje enskild orderdel. Sedan har jag skapat en ytterligare fråga som jag baserar på föregående fråga. I den skapar jag ett beräkningsfält som summerar alla delsummor från första frågan till en slutgiltig summa.
Båda frågorna visar rätt resultat men när jag väljer beräkningsfältet för totala ordersumman från fråga nr2 som källa för fältet i mitt formulär där jag vill att summan ska stå så får jag #Namn? Hur jag än bär mig åt så får jag bara #Namn? Access verkar vara skit och totalt oanvändbart. Man får sitta vecka efter vecka och träla med en sådan här sak som borde vara en barnlek och ändå funkar det inte.
KKalle MMedlem sedan mars 20041 936 inlägg Ibland är det svårt säga när man inte ser det framför sig. Du får visa mer av din tabellstruktur och hur formulären ser ut så kanske det blir enklare.
AAndreasCMedlem sedan mars 20011 964 inlägg Jag bifogar databasen i ett rararkiv. Har du möjlighet att kolla lite i den och se om du kan hitta en lösning?
Om du trycker på första knappen i menyformuläret så kommer du in i kundregistret. Längst ner på den sidan ser du lagd order i underformuläret. För lagd order finns ett underformulär som man kan expandera där orderdelar står. Orderdelarna lagras i en egen tabell och ordrarna lagras i en annan tabell. I fältet Ordervärde i tabellen för Order vill jag ha totala värdet av alla beställda orderdelar.
SsergeiMedlem sedan feb. 200921 inlägg Jag kan nog kanske förstå känslan men om du har ett problem du vill lösa så går det till sist. Som Kalle M skriver är det dock väldigt svårt att säga exakt vad det är som är galet. Det kan vara något simpelt och när du väl är förbi det så lossnar det ...
SsergeiMedlem sedan feb. 200921 inlägg ? Kan du konvertera till Access 2003 ? och lägga ut en likadan .rar ? så kan jag kolla lite också //
AAndreasCMedlem sedan mars 20011 964 inlägg Här kommer version för 2003. Båda versionerna är nedbantade versioner. Jag har tagit bort allt som inte har med problemet att göra för att få ner databasen i storlek.
SsergeiMedlem sedan feb. 200921 inlägg Jag har hittat en grej som ev. kan vara orsaken (snabbkoll dock)
I tabellen Orderdelar har du ingen primärnyckel
Har inte hunnit testa men fick en del konstigheter när jag försökte skapa frågor.
Dock är det så att jag INTE har Access 2007 så jag skall inte säga för mycket.
? En fråga: I den versionen som jag packade upp fanns inga frågor med. Hade varit intressant att se hur du ställde frågorna om jag kunde se något.
Återkommer när jag hunnit titta lite mer :-)
SsergeiMedlem sedan feb. 200921 inlägg Jag har inte gjort så mycket mer men ...
Kolla in bifogat orderformulär. Är det något sådant här du är ute efter?
(Jag har inte lagt något krut på designen. Jag vet att det ser för djävligt ut men det var inte så intressant i detta skede)
För varje order ser du information om ordern (hämtat från tabellen tblOrder) och i underformuläret har du de orderrader (hämtat från tabellen tblOrderdelar) som den ordern innehåller med en totalsumma för hela ordern.
Obs Det summerade värdet "finns" bara i detta formulär. Du kan inte lagra det i någon tabell i första läget. Jag kan inte skriva kod om du behöver få in detta värde på något sätt i databasen.
Återkom med feedback
AAndreasCMedlem sedan mars 20011 964 inlägg Det kan vara en lösning. Hur skrev du formeln för det uträknande fältet?
SsergeiMedlem sedan feb. 200921 inlägg Jag gjorde beräkningen Totalt:Summa([Styckpris]*[Antal]) i frågan
Sedan gjorde jag i formuläret frmOderdelar, som bygger på den frågan, beräkningen av den totala summan för alla orderrader med =Summa([Totalt])
OBS också att denna beräkning måste ske i formulärets formulärfot och kan inte ske i formulärets sidfot. Se skärmdump
Bifogar också den databas jag pulat i så du ser vad jag gjort
AAndreasCMedlem sedan mars 20011 964 inlägg Ok. Så jag måste alltså basera formuläret på en fråga. Om jag tar med alla fält från tabellerna i den frågan och sedan skapar formuläret utifrån den frågan, kommer datan att skrivas mot tabellerna via frågan då? Att uträkningen inte kan skrivas mot tabell är helt ok men alla de andra värdena skrivs väl mot tabellerna?
Jag testade att utgå från en fråga igår men jag lyckades inte. Jag skapade en fråga med alla fält samt uträkningsfält och sedan skapade jag en ytterligare fråga där jag skapade fältet som summerar ihop alla delsummor. Precis som du gjort med =summa([Totalt]) Sedan länkade jag in det fältet i formuläret. Det funkade inte. Nu fattar jag iallafall lite mer hur det fungerar :) Sitter på skolan och kan inte kolla din rar-fil men så fort jag kommer hem så ska jag kolla på det.
Tack :)
Jag återkommer med resultat.
SsergeiMedlem sedan feb. 200921 inlägg Återkom du när du hunnit titta lite.
Allting lagras i tabellerna.
När du matar in i ett formulär som bygger på en fråga så lagras allting i tabellen. Formuläret för inmatning måste alltså inte bygga på en tabell.
Däremot så lagras "i normalfallet" inte de beräknade värdena i en tabell. Det finns situationer när detta är jätteviktigt också. (se speciell kommentar kring detta)
Du måste inte basera formulär (och rapporter) på en fråga MEN om du vill göra beräkningar av fält eller i frågan/formuläret vill ha med data från olika tabeller, så bör du IMHO göra det.
Jag kan dock erkänna att jag numera aldrig någonsin skapar formulär eller rapporter som bygger på en tabell. Jag skapar alltid dessa utifrån en fråga även om den bara innehåller data från en tabell. Vill jag ha ett formulär frm_Order som bygger på en tabell tbl_Order så skapar jag ändå en fråga frg_Order som jag bygger formuläret på.
IMHO är det en bra strategi men det finns många sätt att göra saker på så ...
Observera också min kommentar tidigare om att du inte hade en primärnyckel i en av tabellerna. Jag kan inte säga att det hade någon betydelse i detta specifika fall men ...
SsergeiMedlem sedan feb. 200921 inlägg Lagra värden i en tabell
Som sagt kan det finnas tillfällen då man behöver lagra priser i en tabell.
Antag att du har en tabell tblProdukt där du har en lista över alla produkter OCH där du har priset på produkten med i den tabellen.
Om du då har en tabell tblOrderrader där du inte skriver in priset utan du anger ett artikelnr och priset hämtas automatiskt från tabellen tblProdukter så kan det bli problem.
Vad händer med gamla ordrar den dag du uppdaterar prislistan. Ja har du inte lagrat priset i tabellen tblOderrader så kommer det att för varje Orderrad räknas om till de nya priserna.
Har du då inte fakturerat mellan att ordern lades och att priserna ändrades kommer kunden att få en faktura med ett felaktigt pris
I din databas är detta inte ett problem i nuläget eftersom du inte hämtar priset på varje produkt från tabellen tblProdukter utan vad jag förstår skriver in priset vid varje beställning.
//
AAndreasCMedlem sedan mars 20011 964 inlägg Jag har tänkt på detta med priser som du tar upp. Jag såg problemet med att priser ibland kan ändras. Har man då priserna fasta i en tabell över produkter som man hämtar in för ordrarna så blir det ju som du säger problem ifall man i efterhand ändrar priserna i produkttabellen. Jag har valt att låta användaren få mata in priserna manuellt vid varje orderläggning. Det blir klart smidigast.
Jag bifogar två skärmdumpar på det färdiga resultatet. Jag valde att summera ordervärdet tillsammans med orderdelarna. Jag hade även ett fält för Ordervärde i formuläret kopplat till order eftersom det var där jag ville ha summeringen egentligen, som jag nu tagit bort. Såhär i efterhand kan jag säga att lösningen med att ha summeringen tillsammans med orderdelarna faktiskt inte är så dum. Det blev ganska snyggt också. Jag har valt att visa orderdelarna som kontinuerliga formulär och designen jag gjort gör så att orderdelarna presenteras direkt under varandra som i en tabell, och summeringsfältet ligger direkt under, som i en kalkyl.
Jag tackar ödmjukast för ditt intresse och engagemang. Jag tror att jag lärde mig betydligt mer av detta än vad du gjorde eftersom du redan verkar kunna detta, men jag hoppas att det gav dig något också.
SsergeiMedlem sedan feb. 200921 inlägg :-)
Lysande snygga formulär !!!
Jag har inte gått över till 2007 som du kanske förstod men när man ser dina formulär så blir man lite sugen ...
Sedan är det nog så att jag lär mig saker när jag måste fundera igenom och försöka förklara för andra.
Det som är svårt är dels att sätta sig in i frågeställningen, där det underlättar oerhört att kunna utbyta själva db, dels det faktum att det jag säger inte är en sanning, jag kan skriva ner hur jag gör, men det är ju den som utvecklar db och som vet vad den skall användas till som bestämmer !
Jag kan ge tips och förslag, och när det gäller t ex primärnycklar, "starka rekommendationer" men det är ju sällan några "sanningar"
Ha en trevlig helg !!!
//
SsergeiMedlem sedan feb. 200921 inlägg by the way
Har en liten fundering.
I tabellen orderrader har du inte Orderdatum med standardvärdet =Datum() vilket du har i tabellen tblOrder. Det kan naturligtvis finnas skäl att göra så men jag undrar bara.
AAndreasCMedlem sedan mars 20011 964 inlägg Tack :)
Förstår vad du menar.
Anledningen att jag gjort som jag gjort med datum är att jag vill kunna ange orderdatum för själva ordern. Sedan för jag över det datumet till varje orderdel m.h.a. en fråga. För att köra frågan så trycker jag på den röda knappen "Uppdatera Orderdata". Genom att föra över datumet på detta sätt så kan jag senare föra över både ordrar och orderdelar som är äldre än 1 år till två arkiv-tabeller. Den ena är för gamla order och den andra tabellen är för tillhörande orderdelar. Det är egentligen flera frågor som körs vi arkiveringen. Två frågor för över ordrar och orderdelar till respektive tabell och två frågor tar bort desamma från tabellen för ordrar och tabellen för orderdelar. Någon säger säkert att normaliseringen inte är rätt gjord med anledning av detta, men jag känner att jag inte orkar nysta i det mer ;) Det funkar rätt bra med den lösningen jag fann.
En trevlig helg till dig också :)