19. december 2010 - 09:37Der er
8 kommentarer og 1 løsning
Tilføj nyeste poster fra Navision tabel
Hej.
Håber I kan hjælpe.
Jeg har sammenkædet Access og Navision via ODBC. Det virker fint.
Jeg har nogle store tabeller, hvor jeg gerne vil opdatere nye records, så jeg ikke skal hente alt hver gang.
Jeg henter fra tabel "kreditorpost" (sammenkædet tabel fra Navision) og vil tilføje til tabel TKreditorpost i Access.
Uddrag fra TKreditorpost som den er nu i Access. Løbenr_ Kreditornr_ Bogføringsdato Beløb 4114821 640600 15-12-2010 4650 4114820 640600 15-12-2010 18385 4114807 740170 14-12-2010 7450
Nu vil jeg gerne lave en forespørgsel som kun henter og tilføjer nye records fra Kreditorpost til TKreditorpost. Altså skal den kun hente, hvor Løbenr_ er > 4114821. Kriteriet er altså, at den skal hente records fra Kreditorpost, hvis de er større end Løbenr_ i TKreditorpost
Min SQL er simpel således nu:
INSERT INTO tKreditor ( Løbenr_, Kreditornr_, Bogføringsdato, Beløb ) SELECT Kreditorpost.Løbenr_, Kreditorpost.Kreditornr_, Kreditorpost.Bogføringsdato, Kreditorpost.Beløb FROM Kreditorpost ORDER BY Kreditorpost.Løbenr_ DESC;
Hvordan får jeg det kriterie sat op, så det afhænger af en anden tabel. Skal jeg bruge JOIN? Skal jeg bruge select * from where?
I må meget gerne tilføje det min nuværende SQL, da jeg ikke er den største haj i Access.
I den simple form hvor du direkte indsætter værdien som løbenr skal sammenlignes med:
INSERT INTO tKreditor ( Løbenr_, Kreditornr_, Bogføringsdato, Beløb ) SELECT Kreditorpost.Løbenr_, Kreditorpost.Kreditornr_, Kreditorpost.Bogføringsdato, Kreditorpost.Beløb FROM Kreditorpost WHERE Kreditorpost.Løbenr_ > 4114821
For at gøre den generelt brugbar (hvis det er noget du skal gøre flere gange) kunne du ændre den til at hente de records hvor løbenr er større end max løbenr i Access-tabellen:
INSERT INTO tKreditor ( Løbenr_, Kreditornr_, Bogføringsdato, Beløb ) SELECT Kreditorpost.Løbenr_, Kreditorpost.Kreditornr_, Kreditorpost.Bogføringsdato, Kreditorpost.Beløb FROM Kreditorpost WHERE Kreditorpost.Løbenr_ > (SELECT MAX(Løbenr_) FROM tKreditor)
Lige et tillægsspørgsmål - vil det være en fordel at ligge maks løbenr. over i anden tabel. Vil forespørgsel så kører hurtigere, nu hvor jeg har en tabel med mere end ½ mill. records?
Den kører fint, når jeg vil teste forespørgsel, men når jeg vil kører den og tilføje den nuværende så fejler den, men opretter jeg en ny tabel, så kører den fint.
Skal jeg måske lave mit nummer med at lægge maks of løbenr. i en anden tabel.
Den kan måske ikke tilføje, når den bruger et kriterie fra den tabel, hvor jeg tilføjer i.
Hvilken fejl får du? Den burde kunne køre også selv om den bruger et kriterium baseret på den tabel du sætter ind i.
Hvis løbenr er din primærnøgle i tabellen (kunne godt se sådan ud), så er der et indeks på og så bør det ikke koste Access mange kræfter at finde maks.
[Simba][SimbaEngine ODBC Driver][DRM File Library] cy error message not found!](#1).
Altså er den en ODBC fejl, og det er vidst noget med, at der ikke er adgang til netværket, men det passer jo ikke, for jeg kan sagtens kører den, hvis jeg altså ikke sætter et kriterium til den tabel, som jeg sætter ind i, og jeg kan også køre min forespørgsel i design view.
Nu ved jeg ikke, hvordan jeg marker løbenr. som en primærnøgle, da det jo er en tabel, som jeg har oprettet via en forespørgsel ned i Navision databasen. Jeg har dog indekseret den nu, så det er måske det du mener?
Nu har jeg fået kigget lidt mere på dette og jeg skylder dig nogle point.
Det undre mig dog en del, når jeg sætter mit kriterie
"WHERE Kreditorpost.Løbenr_ > (SELECT (Løbenr_) FROM tKreditor_max)"
ind, så tager det utrolig langt til at lave forespørgslen, men hvis jeg blot taster ">4130129" i kriteriet, så kommer de sidste 19 linjer med det samme.
Hvorfor tager forespørgslen så lang tid, når den blot skal hente løbenummeret fra en tabel i forhold til, hvis jeg taster det sidste løbenummer direkte i kreteriet. Vi taler om mange minutter før de 19 linjer kommer.
Desværre ikke, og der er jo også kun ét nummer i min tKreditor_max, da der kun er en række og en kolonne med nummeret 4130129
Tak for hjælpen alligevel.
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.