Avatar billede hehlers Nybegynder
03. marts 2006 - 08:02 Der 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.

På forhånd tak og god weekend.

Henrik
Avatar billede kalp Novice
03. marts 2006 - 08:19 #1
UPDATE dinTabel WHERE TYPE = 'A' SET interval = 50;

UPDATE dinTabel WHERE TYPE = 'B' SET interval = 25;

Hvis du har en kolonne som hedder type og interval så skulle de der sql sætninger gerne fungere.. ellers skal du lige rette dem til.

Du kan køre SQL view i Access... så kan du køre SQL direkte.

Hvis jeg har forstået dig korrekt.
Avatar billede hehlers Nybegynder
03. marts 2006 - 08:26 #2
Tak kalp

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å.

Skal jeg så stadig bruge det du beskriver?
Avatar billede hehlers Nybegynder
03. marts 2006 - 08:31 #3
Jeg er ski en newbie til Access, hvor er det nu man kan køre SQL view i Access 2003?
Avatar billede kalp Novice
03. marts 2006 - 08:52 #4
hvad skal intervalslut og start være på de 2?
Avatar billede kalp Novice
03. marts 2006 - 08:55 #5
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
Avatar billede kalp Novice
03. marts 2006 - 08:56 #6
UPDATE dinTabel WHERE TYPE = 'A' SET intervalstart = 50, intervalslut = 10;

skal lige rettes til sådan her
Avatar billede hehlers Nybegynder
03. marts 2006 - 08:59 #7
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
Avatar billede hehlers Nybegynder
03. marts 2006 - 09:08 #8
Hej igen

Nu har jeg prøvet med den her sql:

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...
Avatar billede kalp Novice
03. marts 2006 - 09:13 #9
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
Avatar billede hehlers Nybegynder
03. marts 2006 - 09:15 #10
Det ville være herligt... :)
Avatar billede kalp Novice
03. marts 2006 - 15:18 #11
har du en email jeg kan sende til? sender dig en db med asp fil som du kan kigge på.

den retter a og b'erne.. tænkte den bare skal modificeres en smule så retter den også C'erne:)

så håber jeg det er forstået korrekt:P
Avatar billede hehlers Nybegynder
05. marts 2006 - 07:51 #12
min email er: henrik(snabelA)hehlers.dk

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... :)

På forhånd tak

// Henrik
Avatar billede hehlers Nybegynder
06. marts 2006 - 09:29 #13
Hej kalp

Det er præcis sådan!!! tak.

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

count = count + 50

-----------------------------------
Avatar billede kalp Novice
06. marts 2006 - 09:32 #14
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'
Avatar billede hehlers Nybegynder
06. marts 2006 - 11:54 #15
tusind tak!!! Det virker... :)
Avatar billede kalp Novice
06. marts 2006 - 11:57 #16
perfekt! og selv tak:)
Avatar billede hehlers Nybegynder
08. marts 2006 - 11:24 #17
kalp HJÆLP! :)

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.
Avatar billede kalp Novice
08. marts 2006 - 11:31 #18
kan du specificere nærmere?:)

altså din gamle tabels slut interval.. på 11301 ?
og så skal den ligge til den 50 ?
Avatar billede hehlers Nybegynder
08. marts 2006 - 11:33 #19
jeps... :) Den gamle slutter med 11300 den nye skal så begynde på 11301...

Damn, du er hurtig til at svare.. ;)
Avatar billede kalp Novice
08. marts 2006 - 11:39 #20
<%
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 = 11300
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


%>
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
Kurser inden for grundlæggende programmering

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