03. marts 2006 - 08:02Der er
19 kommentarer og 1 løsning
Rutine der ændrer intervaller i en Access DB
Hejsa
Jeg har en database med en række navne, typer, intervalstart og intervalslut. Eks: Navn: Hans Hansen, Type: A, Intervalstart: 1, Intervalslut: 50 Navn: Hans Jensen, Type: B, Intervalstart: 51, Intervalslut: 100 Navn: Jens Hansen, Type: C, Intervalstart: 101, Intervalslut: 125
Jeg skal så bruge en eller anden form for rutine der kan opdatere alle felter, således at alle i databasen der er af type A og B skal have et interval på 50 og type C skal have 25.
Jeg ved ikke om man kan gøre det direkte i Access, ellers er ASP det foretrukne.
Jeg har dog et felt der hedder intervalstart og et der hedder intervalslut og begge skal opdateres. Jeg skal nemlig senere have udskrevet en liste hvor intervalnummeret står på.
Når du kigger på "Objekter" i access.. hvor du som udgangspunkt starter i "Tabeller" så tryk på knappen/valgmuligheden lige under som hedder "Forespørgsler"
Herinde trykker du på opret en forespørgsel i designvisning... tilføj en tabel.. luk den boks som du tilføjer tabeller med.. tryk så på vis og vælge SQL visning
Intervallet skal bare starte med 1 og derefter skal det så tælle op, således at alle med type A og B, har et interval på 50 og dem med C har et interval på 25.
Således her:
Navn: Hans Hansen, Type: A, Intervalstart: 1, Intervalslut: 50 Navn: Hans Jensen, Type: B, Intervalstart: 51, Intervalslut: 100 Navn: Jens Hansen, Type: C, Intervalstart: 101, Intervalslut: 125
UPDATE xtimeloennede where type = 'A' SET intstart = 1, intslut = 50;
Den opdaterer så bare alle felterne således at der står instart 1 og intslut 50 i alle felterne. Meningen er at den ved den efterfølgende skal tage de 50 næste - altså 51-100 og næste skal så have 101-150 osv osv...
okat nu forstår jeg hvad du mener.. hvis det ikke haster så kan jeg godt kigge på det her om ikke så længe.. skal nemlig lave det i ASP.. kan ikke finde ud af det i access alene
Hehe, om det er forstået korrekt ved jeg ikke rigtigt... ;) Selve kategorierne A, B og C skal jo ligge fast. Det er intervallet for de enkelte kategorier der skal indsættes.
Altså: A, 1-50 A, 51-100 A, 101-150 B, 151-200 C, 201-225
Dvs. Hvis kategorien er A, så skal der være et interval på 50 - det samme ved B. Hvis kategorien er C, så skal der kun være 25.
Jeg kunne jo sagtens selv sætte det manuelt ind i databasen, men det ville bare være lettere hvis man havde noget der automatisk kunne regne de enkelte intervaller ud. Så slipper man for manuelt at indsætte 1000 poster... :)
Hvis jeg skal have et interval på dem af type C på 25, hvad skal jeg så gøre?
-------------------------- if tjek = 0 then sql = "UPDATE minTabel SET start = 1, slut = 50 where id = "& rs("id") & " " db.Execute(sql) tjek = 1 else sql = "UPDATE minTabel SET start = " & count + 1 & ", slut = " & count+50 & " WHERE id = "& rs("id") &"" db.Execute(sql) end if
if tjek = 0 then sql = "UPDATE minTabel SET start = 1, slut = 25 where id = "& rs("id") & " " db.Execute(sql) tjek = 1 else sql = "UPDATE minTabel SET start = " & count + 1 & ", slut = " & count+25 & " WHERE id = "& rs("id") &"" db.Execute(sql) end if
count = count + 25
men du skal også lige rette i SQL delen.. så den i WHERE TYPE 'A' OR TYPE 'B'bare skriver WHERE TYPE 'C'
Jeg har nu 2 tabeller, hvor jeg i den ene, har brugt din fine kode til at lave et interval. Dernæst vil jeg i den nye tabel lave et nyt interval som skal starte med den interval som den første tabel sluttede med, hvordan gør jeg så?
Denne kode her virker ikke rigtigt: ------------------------- <% Conn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("forhandlere1.mdb") Set db = Server.CreateObject("ADODB.Connection") db.Open Conn
dim antal, count, tjek, sql count = 0 tjek = 0
Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "SELECT * FROM samlet WHERE kategori = 'A' OR kategori = 'B'" strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("forhandlere1.mdb") rs.Open strSQL, strDSN, 1
Do While Not rs.EOF %> <%
if tjek = 0 then sql = "UPDATE samlet SET kat_start = 11301, kat_slut = 11350 where id = "& rs("id") & " " db.Execute(sql) tjek = 1 else sql = "UPDATE samlet SET kat_start = " & count + 1 & ", kat_slut = " & count+50 & " WHERE id = "& rs("id") &"" db.Execute(sql) end if
count = count + 50
%>
<% rs.MoveNext Loop Response.write("FÆRDIG!!!!")
rs.Close Set rs = Nothing
%> ----------------------------- PS. jeg opretter selvfølgelig et spørgsmål med flere point til dig.
Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "SELECT * FROM samlet WHERE kategori = 'A' OR kategori = 'B'" strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("forhandlere1.mdb") rs.Open strSQL, strDSN, 1
Do While Not rs.EOF %> <%
if tjek = 0 then sql = "UPDATE samlet SET kat_start = 11301, kat_slut = 11350 where id = "& rs("id") & " " db.Execute(sql) tjek = 1 else sql = "UPDATE samlet SET kat_start = " & count + 1 & ", kat_slut = " & count+50 & " WHERE id = "& rs("id") &"" db.Execute(sql) end if
count = count + 50
%>
<% rs.MoveNext Loop Response.write("FÆRDIG!!!!")
rs.Close Set rs = Nothing
%>
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.