Avatar billede triggy Nybegynder
12. juni 2006 - 14:49 Der er 6 kommentarer og
1 løsning

Problem med INSERT

Jeg har følg. SQL i min asp-applikation, som bruges både ved bogføring af fakturaer, og udligning af betalinger.

INSERT INTO Periodetotaler ( FirmaID, RegnID, Perioder, PeriodeNr, Konto, Debet, Kredit, Bogf ) SELECT DISTINCTROW Detail2.FirmaID, Detail2.RegnID, Detail2.Perioder, Detail2.PeriodeNr, Detail2.Konto, 0 AS Expr1, 0 AS Expr2, True AS Expr3 FROM Detail2 GROUP BY Detail2.FirmaID, Detail2.RegnID, Detail2.Perioder, Detail2.PeriodeNr, Detail2.Konto

Men den virker kun når man bogfører en faktura, og ikke når den skal udligne betalingen.

Så kommer den med følgende fejl (Kørt i Access):

Microsoft Office Access angav 0 felt(er) til Null pga. en typekonverteringsfejl, og 1 post(er) blev ikke føjet til tabellen pga. nøglefejl, 0 post(er) pga. låsefejl og 0 poster pga. fejl i valideringsregler.
Vil du køre handlingsforespørgslen alligevel?

Håber der er nogen der kan hjælpe mig
Avatar billede mugs Novice
12. juni 2006 - 14:55 #1
Du skal kontrolere:

- At de felter du du overfører til en tabel er af samme type.
- At den postr du forsøger at overføre ikke er tabellens primære nøgle.
- at den post du forsøger at overføre ikke har den egenskab, at dubletter ikke    tillades (Indeksereing)
Avatar billede ffsoft Praktikant
12. juni 2006 - 15:02 #2
- At felter i tabellen der ikke må have null værdier osse får en værdi
Avatar billede triggy Nybegynder
12. juni 2006 - 15:05 #3
Typerne burde være ens, da det jo er fra den samme tabel den tager dataene fra.

I Detail2 tabellen, er der kun 1 nøgle (ID), og den bliver ikke overført.

I Periodetotaler tabellen, er der 4 nøgler (FirmaID, RegnID, Perioder, Konto) og alle disse felter bliver taget fra Detail2 tabellen.
FirmaID, RegnID og Konto er indexeret, med tilladelse af dubletter og Perioder er ikke Indexeret
Avatar billede triggy Nybegynder
12. juni 2006 - 15:09 #4
alle felterne har indhold i Detail2, og 3 felter i Periodetotaler bliver defineret til hhv 0, 0 og True
Avatar billede triggy Nybegynder
12. juni 2006 - 18:04 #5
Problemet er delvist løst.

Det viste sig, at der var en dobbelt post, som systemet åbenbart fra start er lavet til at ignorere, når det køres fra access-applikationen.

Det kan den bare ikke, når den kører fra min asp applikation.

Jeg ændrede funktionen fra:

Function RunQ_Bogf_DanPerioder()
        SQL = "INSERT INTO Periodetotaler ( FirmaID, RegnID, Perioder, PeriodeNr, Konto, Debet, Kredit, Bogf )"
        SQL = SQL & " SELECT DISTINCTROW Detail2.FirmaID, Detail2.RegnID, Detail2.Perioder, Detail2.PeriodeNr, Detail2.Konto, 0 AS Expr1, 0 AS Expr2, True AS Expr3"
        SQL = SQL & " FROM Detail2"
        SQL = SQL & " GROUP BY Detail2.FirmaID, Detail2.RegnID, Detail2.Perioder, Detail2.PeriodeNr, Detail2.Konto"
        Set RunQ = Server.CreateObject("ADODB.Command")
        RunQ.ActiveConnection = MM_SW_STRING
        RunQ.CommandText = SQL
        RunQ.Execute
        RunQ.ActiveConnection.Close
end function


Til:

Function RunQ_Bogf_DanPerioder()
on error resume next
        SQL = "SELECT DISTINCTROW Detail2.FirmaID, Detail2.RegnID, Detail2.Perioder, Detail2.PeriodeNr, Detail2.Konto, 0 AS Expr1, 0 AS Expr2, True AS Expr3"
        SQL = SQL & " FROM Detail2"
        SQL = SQL & " GROUP BY Detail2.FirmaID, Detail2.RegnID, Detail2.Perioder, Detail2.PeriodeNr, Detail2.Konto"

        Set FRS = Server.CreateObject("ADODB.Recordset")
        FRS.ActiveConnection = MM_SW_STRING
        FRS.Source = SQL
        FRS.CursorType = 0
        FRS.CursorLocation = 2
        FRS.LockType = 1
        FRS.Open()

        While NOT FRS.EOF
        SQL1 = "INSERT INTO Periodetotaler ( FirmaID, RegnID, Perioder, PeriodeNr, Konto, Debet, Kredit, Bogf )"
        SQL1 = SQL1 & " VALUES ('" & FRS("FirmaID") & "','" & FRS("RegnID") & "','" & FRS("Perioder") & "'," & FRS("PeriodeNr") & ",'" & FRS("Konto") & "'," & FRS("Expr1") & "," & FRS("Expr2") & "," & FRS("Expr3") & ")"
            Set RunQ = Server.CreateObject("ADODB.Command")
        RunQ.ActiveConnection = MM_SW_STRING
        RunQ.CommandText = SQL1
        RunQ.Execute
        RunQ.ActiveConnection.Close
        FRS.MoveNext
        Wend
end function


men er det ikke muligt at bruge den øverste funktion, og få den til at springe posterne over hvis de allerede eksisterer ?
Avatar billede triggy Nybegynder
22. august 2006 - 21:33 #6
Spørgsmålet lukkes,
mugs: du får points, da det omhandlede dubletter.
Det var dog ikkeet access problem, men derimod et problem med db-forbindelsen fra asp der ikke er hurtig nok.
Avatar billede mugs Novice
22. august 2006 - 21:42 #7
Tak for point - Jeg har ikke meget forstand på ASP, faktisk slet intet, men en gang imellem kan det betale sig for en amatør at svare ;o)
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