Avatar billede l_otto Nybegynder
03. maj 2004 - 21:43 Der 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;"

Set rs = Conn.Execute(SQL)

%>

og hvordan
03. maj 2004 - 21:47 #1
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;
Avatar billede l_otto Nybegynder
03. maj 2004 - 21:50 #2
hvordan helt præsist
Avatar billede l_otto Nybegynder
03. maj 2004 - 21:52 #3
jeg kan ikke finde ud af det med en forspørsel enten skal jeg opret med designvisnig eller guiden..

men der kan jeg ikke se hvor jeg kan paste min kode ind..:-(s
03. maj 2004 - 21:52 #4
Å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.
Avatar billede l_otto Nybegynder
03. maj 2004 - 21:58 #5
den skriver der er en ugyldig sql sætning delete , insert og noget mere var ventet
Avatar billede l_otto Nybegynder
03. maj 2004 - 22:09 #6
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 ?
Avatar billede l_otto Nybegynder
04. maj 2004 - 08:38 #7
hej thoams er du der ?
04. maj 2004 - 09:09 #8
ja, sorry, jeg er her....jeg har bare ikke lige kunnet komme på en løsning :o(

Men jeg kan i hvert fald se, at der mangler en parentes-slut til sidst. Gør det nogen forskel?
Avatar billede l_otto Nybegynder
04. maj 2004 - 09:10 #9
må jeg maile db til dig ? så kan du sætte den ind så kan jeg godt selv resten :-)
04. maj 2004 - 10:27 #10
ja gerne...:o)
Avatar billede l_otto Nybegynder
04. maj 2004 - 10:29 #11
så skal jeg bare have din mail adr :-)
04. maj 2004 - 10:40 #12
nå men den finder du skam ved at klikke på mit navn og vælge brugerinfo...
Avatar billede l_otto Nybegynder
04. maj 2004 - 10:51 #13
tjek din mail :-)

håber du kan løse regnestykket..
04. maj 2004 - 11:17 #14
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
Avatar billede l_otto Nybegynder
04. maj 2004 - 11:26 #15
lækkert se mail
04. maj 2004 - 11:49 #16
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
Avatar billede l_otto Nybegynder
04. maj 2004 - 11:54 #17
desværre den tager bare priserne fra table6 og ligger over. :-( men det er tæt på kan jeg mærke...
Avatar billede l_otto Nybegynder
04. maj 2004 - 12:00 #18
hvis du kan lave det er du gud...!
Avatar billede l_otto Nybegynder
04. maj 2004 - 12:07 #19
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..
04. maj 2004 - 12:08 #20
"den tager bare priserne fra table6 og ligger over" ? Hvad mener du med det? I hvilken tabel lægges blot prisen fra tabel6 over?
Avatar billede l_otto Nybegynder
04. maj 2004 - 12:09 #21
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
04. maj 2004 - 12:18 #22
Er problemet ikke, at når du har ganget tabel4.pris med 1,02, så er den ikke længere mindre end tabel6.pris?
Det oplevede jeg i hvert fald...?
Avatar billede l_otto Nybegynder
04. maj 2004 - 12:18 #23
anden ting jeg har prøvet at kopi din markro og vb og derefter udskirftet koden, men den vil ikke, hvordan laver jeg en til?

det er makro afspillingen der ikke vil. jeg har kopi dine "funktioner" og kaldt den "p" kode:

Public Function p()
    Dim SQL As String
    Dim Antal As Long
    Dim cn As ADODB.Connection
    Set cn = CurrentProject.Connection
    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;"

    cn.Execute SQL, Antal
    MsgBox Antal & " poster blev tilføjet!", vbExclamation, "Done!"
End Function


den skulle være god nok, men når jeg kopi din makro vil den ikke.. øv
Avatar billede l_otto Nybegynder
04. maj 2004 - 12:21 #24
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.
Avatar billede l_otto Nybegynder
04. maj 2004 - 12:23 #25
og det er den pris den kommer frem til den skal sætte ind i table7, der må ikke komme priser fra tabel6 ind i tabel7.....
Avatar billede l_otto Nybegynder
04. maj 2004 - 12:28 #26
som koden er nu ændre den også tallene i tabel6 :-)

den er ikke helt nemt denne her...
Avatar billede l_otto Nybegynder
04. maj 2004 - 13:07 #27
hvordan går det :-)
04. maj 2004 - 13:14 #28
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)
Avatar billede l_otto Nybegynder
04. maj 2004 - 13:17 #29
jamen hvis du gerne vil have flere point så er de oki..

jeg prøver også proaccess...
Avatar billede l_otto Nybegynder
04. maj 2004 - 13:18 #30
kan du hjælpe med 04/05-2004 12:18:42
04. maj 2004 - 13:32 #31
Hvis du kopiere funktionen og vil kalde den fra en makro, skal du også ændre funktionsnavnet i makroen.

Men du kan til hver en tid også køre funktionen med F5, når du står i koden
Avatar billede l_otto Nybegynder
04. maj 2004 - 13:38 #32
prøv a se din mail..

btw, kennder du nogen der kan løse udregnings problemmet måske for lidt håndøre ?
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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