03. maj 2004 - 21:43Der er
31 kommentarer og 1 løsning
kan jeg få denne til at køre på min access lokalt
hej .. jeg har den kode jeg bruger på min asp side.. men de tabeller jeg skal sammenligne er på 20mb tilsammen så det tager for lang tid at loade den op på serveren. så kan jeg kører den i min access?
<% SQL = "INSERT INTO tabel4 (levnavn, pris, varenummer, DescShort) SELECT t1.levnavn, t1.pris * 1.27, t1.varenummer, t1.DescShort " SQL = SQL & "FROM (SELECT levnavn, pris, varenummer, DescShort FROM tabel1 " SQL = SQL & "UNION ALL SELECT levnavn, pris, varenummer, DescShort FROM tabel2)" SQL = SQL & "as t1, " SQL = SQL & "(SELECT min(pris) as mpris, varenummer " SQL = SQL & "FROM (SELECT pris, varenummer FROM tabel1 " SQL = SQL & "UNION ALL SELECT pris, varenummer FROM tabel2 " SQL = SQL & ") GROUP BY varenummer) as t2 " SQL = SQL & "WHERE t1.pris = t2.mpris AND t1.varenummer = t2.varenummer ORDER BY t1.varenummer;"
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Du kan bare plukke selve SQL'en ud og smide den ind i en forespørgsel og køre den: INSERT INTO tabel4 (levnavn, pris, varenummer, DescShort) SELECT t1.levnavn, t1.pris * 1.27, t1.varenummer, t1.DescShort FROM (SELECT levnavn, pris, varenummer, DescShort FROM tabel1 UNION ALL SELECT levnavn, pris, varenummer, DescShort FROM tabel2 as t1, (SELECT min(pris) as mpris, varenummer FROM (SELECT pris, varenummer FROM tabel1 UNION ALL SELECT pris, varenummer FROM tabel2 ) GROUP BY varenummer) as t2 WHERE t1.pris = t2.mpris AND t1.varenummer = t2.varenummer ORDER BY t1.varenummer;
Åbn en ny forespørgsel (luk eventuelle dialogboke, som måtte dukke op) Gå i menuen Vis->SQL visning og indsæt koden. Luk den og gem den. Herefter er det bare at dobbeltklikke på den.
ok nu går det bedre jeg sætter denne ind : INSERT INTO tabel4 (levnavn, pris, varenummer, DescShort) SELECT t1.levnavn, t1.pris * 1.27, t1.varenummer, t1.DescShort FROM (SELECT levnavn, pris, varenummer, DescShort FROM tabel1 UNION ALL SELECT levnavn, pris, varenummer, DescShort FROM tabel2 as t1, (SELECT min(pris) as mpris, varenummer FROM (SELECT pris, varenummer FROM tabel1 UNION ALL SELECT pris, varenummer FROM tabel2 ) GROUP BY varenummer) as t2 WHERE t1.pris = t2.mpris AND t1.varenummer = t2.varenummer ORDER BY t1.varenummer;
men nu siger den at der er en syntaks i FROM sætningen ?
Har løst det med denne funktion, da Access slet ikke kunne håndtere så mange niveauer af nested queries: Public Function OpdaterTabel7() Dim SQL As String Dim Antal As Long Dim cn As ADODB.Connection Set cn = CurrentProject.Connection SQL = "INSERT INTO tabel7 (levnavn, pris, varenummer, DescShort) SELECT t1.levnavn, t1.pris, t1.varenummer, t1.DescShort " SQL = SQL & "FROM (SELECT levnavn, pris, varenummer, DescShort FROM tabel4 " SQL = SQL & "UNION ALL SELECT levnavn, pris, varenummer, DescShort FROM tabel6) " SQL = SQL & "as t1, " SQL = SQL & "(SELECT min(pris) as mpris, varenummer " SQL = SQL & "FROM (SELECT pris, varenummer FROM tabel4 " SQL = SQL & "UNION ALL SELECT pris, varenummer FROM tabel6 " SQL = SQL & ") GROUP BY varenummer) as t2 " SQL = SQL & "WHERE t1.pris = t2.mpris AND t1.varenummer = t2.varenummer ORDER BY t1.varenummer;"
cn.Execute SQL, Antal MsgBox Antal & " poster blev tilføjet!", vbExclamation, "Done!" End Function
Prøv med denne: Public Function OpdaterTabel7() Dim SQL As String Dim Antal As Long Dim cn As ADODB.Connection Set cn = CurrentProject.Connection SQL = "INSERT INTO tabel7 (levnavn, pris, varenummer, DescShort) SELECT t1.levnavn, t1.pris, t1.varenummer, t1.DescShort " SQL = SQL & "FROM (SELECT levnavn, pris, varenummer, DescShort FROM tabel4 " SQL = SQL & "UNION ALL SELECT levnavn, pris, varenummer, DescShort FROM tabel6) " SQL = SQL & "as t1, " SQL = SQL & "(SELECT min(pris) as mpris, varenummer " SQL = SQL & "FROM (SELECT pris, varenummer FROM tabel4 " SQL = SQL & "UNION ALL SELECT pris, varenummer FROM tabel6 " SQL = SQL & ") GROUP BY varenummer) as t2 " SQL = SQL & "WHERE t1.pris = t2.mpris AND t1.varenummer = t2.varenummer ORDER BY t1.varenummer;"
cn.Execute SQL, Antal
'opdater efter reglen: hvis prisen i tabel4 er > end prisen i tabel6 gang prisen i tabel4 med 1.02 SQL = "UPDATE tabel4 INNER JOIN tabel6 ON tabel4.varenummer = tabel6.varenummer SET tabel4.pris = [tabel4].[pris]*1.02 " & _ "WHERE tabel4.pris>[tabel6].[pris]" cn.Execute SQL
'opdater efter reglen priser i table4 er < end prisen i tabel 6 træk da 100 fra prisen i tabel6. SQL = "UPDATE tabel4 INNER JOIN tabel6 ON tabel4.varenummer = tabel6.varenummer SET tabel6.pris = [tabel6].[pris]-100 " & _ "WHERE tabel6.pris>=[tabel4].[pris]" cn.Execute SQL
MsgBox Antal & " poster blev tilføjet!", vbExclamation, "Done!" End Function
med den sidste kode der indsætter den så hvem der er billigst.. den får ikke udregningen med... men som jeg læser din kode er det helt rigtig set... den vil bare ikke gøre det..
det var fordi der var to ens priser .. he nej den ligger priserne rigtigt over den finder den billigste og ligger over.. men det laver ikke regnestykket
jamen det er først efter den har fundet ud af om den er mindre den skal gange 1.02. hvis den er mindre end pris table6 så skal den bare gange 1.02 og ikke mere .
det samme med -100.
håber du er med..
hvis ikke vi er billigst så x 1.02 hvis vi er billigst jamen så -100 den billigst pris i tabel 6.
Sorry, jeg har først nu set, at du har skrevet en masse - jeg plejer jo at få besked, når der er nye indlæg, men det er vist smuttet :o(
Okay, jeg kan se, at jeg har misforstået opgaven. Jeg troede, at du ville have ændret værdierne i tabel6 og tabel4 :o(
Jeg må indrømme, at jeg ikke umiddelbart kan gennemskue hvordan det skal gøres i den samme forespørgsel...Alternativet er at lave det hele vha recordsets og cykle gennem alle poster og sammenligne, men det er en større gang kodeskrivning, som ligger lidt ud over hvad jeg har af tid pt.
Hvis jeg var dig, så ville jeg oprette et nyt spm som henvender sig til nogle af SQL-hajerne (f.eks. ProAccess). Det er jo også lidt uden for dette spm's oprindelige beskrivelse :o)
btw, kennder du nogen der kan løse udregnings problemmet måske for lidt håndøre ?
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.