07. juli 2006 - 22:39Der er
21 kommentarer og 1 løsning
tabel felt beregning
Hej eksperter
Jeg er lidt i tvivl om, hvordan jeg får lavet et felt i en access-tabel, som laver en beregning. lad os sige jeg har en tabel med to felter ID og navn. I et 3. felt vil jeg gerne have "brugernavn" som skal være en direkte sammenføjning af de to første felter (a la "[Id]&[navn]". Jeg kan ikke få det til at virke..
Sig nu ikke bare jeg skal lave en forespørgsel i stedet, for det skal virke via en hjemmeside med ASP. Meningen er, at jeg tilføjer et navn (på en administrator-side) og den skal så returnere et brugernavn jeg kan udlevere til personen. Det skal være det 3. felt. Så vidt jeg ved kan jeg ikke kalde forespørgsler med ASP, så det vil være en stor hjælp hvis tabellen selv kan lave brugernavnet..
Opret en formular med tre felter: Id, Navn og Brugernavn (som naturligvis ligger i tabellen, der danner grundlag for formularen). I de to første felters AfterUpdate hændelse skriver du: Me.Brugernavn=Me.ID & Me.Navn (husk at "Navn" ikke er helt smart, idet Access af og til misforstår og tror at Me.Navn er navnet på formularen, tsk)
... du kan ikke få "tabellen til selv at lave brugernavnet". Der skal en aktiv handling til (altså formularen). Ellers skal du igang med noget StoredProcedure noget (som på en SQL server). Det findes efter sigende i Access; men det er godt gemt. Det er der måske nogen, der har erfaring med. Anyone ?
Jo mere jeg ser på opgaven, jo mærkeligere ser den ud. Normalt vil man jo netop prøve at undgå redundans. Hvorfor kan du ikke bare returnere det udtryk, som du selv skriver: [Id]&[navn] ???
Hej med jer Tak for hjælpen, øv det var ikke bare en dum lille overset ting.. Jeg kan jo ikke bruge en formular, for hvordan får jeg den "kørt" via en hjemmesides ASP? Og Mugs, du har nok ret at man ikke kan (jeg synes bare jeg har set det gjort engang), men uanset kan jeg heller ike kalde en forespørgsel via ASP.
Måske er svaret at lade ASP gøre arbejdet? Fx når jeg skriver navnet (felt2) (via insert into) kunne jeg lade den returnere Id til mig på en ASP side. og så via en ekstra handling opdatere min tabel via en ASP-side der sender Id&navn ?
Hmm nielle, hvor skal jeg skrive det? - i access-feltets standardværdi? - I ASP-siden? - I noget VBA?
Hvis det er i ASPsiden du mener, så er der lige det problem at navnet jo ikke eksisterer endnu. Det er det jeg skal tilføje, og jeg ville gerne have access til at returnere et brugernavn.
Det samme spørger jeg lige dig om, fdata? fra hvor skal jeg få returneret det udtryk?
OK tak nielle og fdata. Nielle, bare lige for at forstå dig ret. Det du skriver fungerer ligesom jeg selv skrev, eller hvad? 1. altså en ASPside med en formular til indtastning af navn. siden indsætter værdien i navn-teltet 2. en ASP side returnerer Id for dette navn, og beregner så selv Id&Navn og udskriver det på siden til mig i en ny form. 3. Jeg klikker på en button i denne formular og dermed køres en sql-update som du skrev?
Ellers må du lige korrigere, og smid iøvrigt et svar så får du point :-)
Nu tør jeg ikke svære 100% på *at* det virker. Men *hvis* (og det er jeg da 99% sikker på), så vil det virke som det du efterspørger.
Nu begynder spørgsmålet så mere og mere at bevæge sig over til at være et spørgsmål om hvordan det bruges i ASP, og derfor er kategorien måske ikke så velvalgt (som fdata også påpeger).
Som fdata sagde tidligere så er det egentlig noget gris at feltet brugernavn indeholder de samme data som id+navn tilsammen. Det kaldes for redundans og er normalt (men ikke altid!) noget man stræber på at undgå. Jeg gætter imidlertid at værdien i brugernavn er en midlertidig værdi, og at folk senere kan ændre den. Er det korrekt?
En mulig løsning i ASP:
' Navnet kommer fra formularen navn = Request.Form("navn")
' Indsæt navnet i tabellen. sql = "INSERT INTO dinTabel (navn) VALUES ('" & navn & "')" Conn.Execute(sql)
' Idet jeg går ud fra at id-feltet automatisk tæller op, ' kan værdien af det netop indsatte fås på denne måde: sql = "SELECT @@IDENTITY AS nytID FROM dinTabel" Set rs = Conn.Execute(sql) id = rs("nytID")
' Opdater brugernavn - brug Access til at beregne værdien: sql = "UPDATE dinTabel SET brugernavn = id&navn WHERE id = " id Conn.Execute(sql)
' ... eller alternativt - brug ASP til at beregne værdien: ' sql = "UPDATE dinTabel SET brugernavn = '" & id & navn & "' WHERE id = " id ' Conn.Execute(sql)
Response.Write "Dit brugernavn er: " & id & navn & "<br>"
I havent looked through all of the answres/komments but in my opiion there is no need for the extra field. The data exists in the first two fields (ID + Navn) which you can select together to give you the combined value (brugernavn).
Hej igen og tak for jeres hjælp. Nielle, er det php koder du har der i den sql sætning? Jeg ha ikke set @@ eller Identity før, i en sql. Alligevel arbejder jeg lidt videre med din løsning og ser om jeg kan få den til at fungere.. Du har stadig ikke lagt et svar..
Terry, den løsning du skriver, er noget der ligger i en forespørgsel, ikke? Det tror jeg ikke jeg kan bruge, for jeg kan ikke kalde forespørgsler eller formularer med en asp-side.. please correct me, hvis jeg tager fejl..
Hvorfor tror du at det er PHP? Det er skal 100% ren ASP ibladet SQL-kommandoer. :^)
Fidusen med denne:
sql = "SELECT @@IDENTITY AS nytID FROM dinTabel"
- er at den udtrækker det id som den forrige INSERT-sætning resulterede i. Den skal normalt helst kaldes umiddelvart efter INSERT'en.
Nej, jeg plejer normalt ikke at lægge et svar før at jeg er sikker på at den som spørger rent faktisk har fået løst sit problem. Derfor foretrækker jeg også med at vente med at svare til at du har afprøvet det. Håber ikke at det gør noget?
Hej igen og undskyld den sene svartid. Jeg har faktisk lige prøvet at hente data fra en Q som Terry foreslår - og det virker upåklageligt og ligeså let som fra tabeller. Kan slet ikke forstå jeg ikke har prøvet det før, men alle de ASP sider som jeg har kigget på, viser hvordan man henter data fra tabeller... Sikke en masse tid tid der kunne være sparet, tak for det Terry! :-)
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.