har sluset det ind til, at uanset hvilken sql-sætning jeg bruger, om det er en simpel: SELECT * FROM Detail2 Where MomsYN=No Kan jeg ikke få lov til at læse felterne.
Når databasen driller, skyldes det i 9 ud af 10 tilfælde at SQL'en indeholder noget andet end det man tror. Derfor er det altid en god ide at starte sin fejlfindeing med at prøve at skrive den ud før at den udføres:
momsSQL1 = "SELECT * From Detail2 WHERE FirmaID = '" & CompanyID & "' AND BrugerID = '" & Session("MM_Username") & "' AND MomsYN=No"
Det sjove er jo bare, at hvis jeg kopierer den førstnævnte sql, og indsætter den direkte i en forespørgsel i access, laver den præcis det den skal, med de rigtige data
-1 betyder at recordsettet slet ikke åbnes (og alt det andet vi har set understøtter dette). Du bliver nok nødt til at kigge kritisk på din MM_SW_STRING.
Prøv lige at tjekke en ekstra gang efter at feltet virkeligt hedder "MomsKredit" i tabellen, og at der ikke f.eks. er kommet et blanktegn ind i starten (" MomsKredit") eller i slutningen ("MomsKredit ") af navnet. Den slags fejl kan godt drille rigtig meget.
hvis jeg laver en tom fil, med Set momsRS = Server.CreateObject("ADODB.Recordset") momsRS.ActiveConnection = MM_SW_STRING momsRS.Source = momsSQL1 momsRS.CursorType = 0 momsRS.CursorLocation = 2 momsRS.LockType = 1 momsRS.Open() Response.Write momsRS("MomsKredit") så virker det tilsyneladende fint, men når den kommer ind i funkrionen, går det galt, og jeg kan kun trække de andre felter
Det lyder som om at din database er syg - hvordan ellers forklare at en repair skulle gøre nogen forskel. Det tyder ikke godt at problemet genopstår efter en søgning.
SQL2 = "Select * FROM MSatser Where FirmaID = '" & CompanyID & "' ORDER BY FraDato" Set Dy_Msats = Server.CreateObject("ADODB.Recordset") Dy_Msats.ActiveConnection = MM_SW_STRING Dy_Msats.Source = SQL2 Dy_Msats.CursorType = 2 Dy_Msats.CursorLocation = 2 Dy_Msats.LockType = 1 Dy_Msats.Open()
SumDebet = 0 SumKredit = 0 Do Until Dy_Detail2.EOF SumDebet = SumDebet + Dy_Detail2("Debet") SumKredit = SumKredit + Dy_Detail2("Kredit") If (IsNull(Dy_Detail2("VedrFakt")) Or Dy_Detail2("VedrFakt") <= 0) Then Dy_Detail2("VedrFakt") = Dy_Detail2("Faktura") If (IsNull(Dy_Detail2("VedrFakt")) Or Dy_Detail2("VedrFakt") <= 0) Then Dy_Detail2("VedrFakt") = 0 Debkr = Left(Dy_Detail2("Konto"), 1) If (Debkr = "D" Or Debkr = "C") Then Dy_Detail2("Debkr") = Debkr Dy_Detail2("DebKrNr") = Right(Dy_Detail2("Konto"), Len(Dy_Detail2("Konto")) - 1) Dy_Detail2("MomsYN") = True If IsNull(Dy_Detail2("BDato")) Then Dy_Detail2("BDato") = Dy_Detail2("Dato") If (IsNull(Dy_Detail2("VedrFakt")) Or Dy_Detail2("VedrFakt") <= 0) Then Dy_Detail2("VedrFakt") = Dy_Detail2("Faktura") If (IsNull(Dy_Detail2("VedrFakt")) Or Dy_Detail2("VedrFakt") <= 0) Then Dy_Detail2("VedrFakt") = 0 If Dy_Detail2("VedrFakt") = 0 Then Dy_Detail2("VedrFakt") = Dy_Detail2("Bilag") FaktBilOk = True If BilagFaktBil = 0 Then BilagFaktBil = Dy_Detail2("Bilag") End If End If If Dy_Detail2("Valuta") <> "" then DkursVar = DLookup("Dkurs", "Valuta", "Valuta = '" & Dy_Detail2("Valuta") & "'") end if ' Valuta ' If IsNull(Dy_Detail2("Valuta")) Or DkursVar = 100 Then Dy_Detail2("Debet") = Dy_Detail2("Vdebet") Dy_Detail2("Kredit") = Dy_Detail2("Vkredit") Else
If DkursVar > 0 Then Kurs = DkursVar / 100 If Dy_Detail2("Vdebet") = 0 Then Dy_Detail2("Vdebet") = Fix(0.5 + 100 * Dy_Detail2("Debet") / Kurs) / 100 If Dy_Detail2("Vkredit") = 0 Then Dy_Detail2("Vkredit") = Fix(0.5 + 100 * Dy_Detail2("Kredit") / Kurs) / 100 If Dy_Detail2("Vdebet") < 0 Then Dy_Detail2("Vdebet") = 0 If Dy_Detail2("Vkredit") < 0 Then Dy_Detail2("Vkredit") = 0 End If End If ' Moms ' If IsNull(Dy_Detail2("Momssats")) Then Dy_Detail2("MomsYN") = True If Dy_Detail2("MomsYN") = False Then Criteria = "Momssats = '" & Dy_Detail2("Momssats") & "' " Dy_Msats.MoveFirst SatsPro = 0 While NOT Dy_Msats.EOF If ((Dy_Msats("FraDato") <= Dy_Detail2("Dato")) AND (Dy_Msats("Momssats") = Dy_Detail2("Momssats"))) Then SatsPro = Dy_Msats("Sats") Dy_Msats.MoveNext Wend If SatsPro = 0 Then Dy_Detail2("MomsYN") = True If SatsPro > 0 Then Dy_Detail2("MomsDebet") = Fix(0.5 + 100 * SatsPro * Dy_Detail2("Debet") / (100 + SatsPro)) / 100 Dy_Detail2("MomsKredit") = Fix(0.5 + 100 * SatsPro * Dy_Detail2("Kredit") / (100 + SatsPro)) / 100 Dy_Detail2("Debet") = Dy_Detail2("Debet") - Dy_Detail2("MomsDebet") Dy_Detail2("Kredit") = Dy_Detail2("Kredit") - Dy_Detail2("MomsKredit") End If End If Dy_Detail2.Update
If Dy_Detail2("Dato") < FrDato Or Dy_Detail2("Dato") > TiDato Then BogfOk = False ("Regn_014"), , GetMsg("Sys_101") End If If Not IsNull(Dy_Detail2("Momssats")) And IsNull(Dy_Detail2("MomsKonto")) Then BogfOk = False ("Regn_064"), , GetMsg("Sys_101") End If
If (Dy_Detail2("Debkr") = "D" Or Dy_Detail2("Debkr") = "C") Then If Len(Dy_Detail2("Konto")) <= 1 Then ("Regn_015"), , GetMsg("Sys_101") BogfOk = False End If If (IsNull(Dy_Detail2("VedrFakt")) Or Dy_Detail2("VedrFakt") <= 0) Then ("Regn_016"), , GetMsg("Sys_101") BogfOk = False End If End If If BogfOk = False Then Exit Do Dy_Detail2.MoveNext Loop Dy_Detail2.Close
Tja det lyder lidt underligt den ikke skulle kunne klare det men du kan da prøve en anden driver: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\somepath\mydb.mdb;"
Retter du kun i de to kolonner: MomsDebet, MomsKredit ?
Nej der er ikke en pæn måde at lave en vente funktion i ASP. Så skal man nok i i at bruge html meta-tag relead option eller lave et javascript som reloader siden efter nogle sekunder.
Du kan prøve at køre din SQL på et connection obejcet og ikke command obeejct så dette:
Hvis du brugte OLE.DB driveren kom værdierne så rigtigt med eller var det samme problem?
Det lyder som noget timing hvis du han vente i 3 sekunder og så det virker... så jeg må erkende jeg har ikke flere forslag lige nu. Jeg skal også i seng.
Så vil jeg tillade mig at sige problemet endelig er løst... sådan da..
Det kræver åbenbart sin tid for serveren, at opdatere databasen, så med en smule omprogrammering, har jeg lagt sql-kaldet ned under det næste kald, så løber den tabellen igennem som alm. record først, og opdaterer bagefter. Det ser ud til at virke. (Har i hvert fald testet det 20 gange nu) :)
eagleeye smider du også lige et svar, så deler i bare pointsne, da i har hjulpet min hjerne i gang med at tænke igen *LOL* :)
Jeg kan godt følge dig, men det pågældende recordset er efter problemet var opstået, under test, havde jeg response.end() lige før
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.