PDA

View Full Version : سوال: کوئری محاسباتی



arpachi
شنبه 23 اردیبهشت 1391, 12:00 عصر
با سلام
اساتید گرامی اگر ممکنه یه نگاهی به این کوئری بیاندازید ببینید مشکلش کجاست ؟چون وقتیکه اجرا میشه اطلاعات رو از جدول اصلی نمیخونه و فقط تا سیستم هنگ نکنه اجرا میشه و یک کوئری با تعداد فیلد بالا با مقادیر خالی تولید میکنه.:متعجب::گیج:
Dim StrSql As String
Dim Qdf1 As QueryDef
Dim rst, rstTable4DafaterReport As Recordset
Dim dbs As Database
Dim A As Double
Dim i
Dim MablaghGhabli As Double
Set dbs = CurrentDb
Call NullTable("Table4DafaterReport")


StrSql = "SELECT AuthorityDetail.* FROM AuthorityDetail WHERE (AuthorityDetail.ADCodingSeq =" & [Forms]![billing_persons_list]![Combid] & " ) ORDER BY AuthorityDetail.ADDateSanad, AuthorityDetail.ADSanadNo;"
Set Qdf1 = dbs.CreateQueryDef("A", StrSql)

Set rst = Qdf1.OpenRecordset

Set rstTable4DafaterReport = dbs.OpenRecordset("Table4DafaterReport")

With rst
i = 1
MablaghGhabli = 0
Do While Not rst.EOF
rstTable4DafaterReport.AddNew
rstTable4DafaterReport![ADRow] = i
rstTable4DafaterReport![ADSanadNo] = rst![ADSanadNo]
rstTable4DafaterReport![ADDateSanad] = rst![ADDateSanad]
rstTable4DafaterReport![ADCodingSeq] = rst![ADCodingSeq]
rstTable4DafaterReport![ADSharhSanad] = rst![ADSharhSanad]
rstTable4DafaterReport![ADDebitAmount] = rst![ADDebitAmount]
rstTable4DafaterReport![ADCreditAmount] = rst![ADCreditAmount]
rstTable4DafaterReport![Tozih] = rst![Tozih]

If i = 1 Then
A = rst!ADDebitAmount - rst!ADCreditAmount
ElseIf i > 1 Then
A = rst!ADDebitAmount - rst!ADCreditAmount + MablaghGhabli
End If

rstTable4DafaterReport![Mandeh] = Abs(A)
rstTable4DafaterReport![Tashkhis] = IIf(A = 0, "بي", IIf(A < 0, "بس", "بد"))

rstTable4DafaterReport.Update
i = i + 1
MablaghGhabli = A
.MoveNext
Loop
End With
End Sub

mazoolagh
یک شنبه 24 اردیبهشت 1391, 10:59 صبح
این که سیستم هنگ میکنه یعنی از لوپ خارج نمیشه - شرط لوپ رو چک کنین.

اون دستور if i=1 هم که اشکال ذاتی داره، وقتی i برابر 1 نیست حتما بزرگتر هست دیگه! elseif نمیخواد چون شما همیشه دارین مقدار i رو افزایش میدین.

در ضمن ساختن یک گزارش عملکرد سرفصل نیازی به این کارها (ساختن جدول موقت و محاسبه مانده قبلی) نداره - شما یک کوئری به ترتیب تاریخ و شماره سند بسازین و در گزارش برای ردیف و مانده از running sum استفاده کنین

arpachi
یک شنبه 24 اردیبهشت 1391, 17:17 عصر
سلام دوست عزیز
ممنون از توجهتون .فرمایش شما درست ولی فقط به این درد نمیخوره !واسه جاهای دیگه هم استفاده میکنم.
البته اون دستور if i=1 واسه اینه که معلوم بشه سطراول هست یا نه!
در مورد گزارش عملکرد سرفصل اگر ممکنه یک نمونه بزارید ممنون میشم.

arpachi
یک شنبه 24 اردیبهشت 1391, 17:19 عصر
بالاخره حل شد!
کس نخارد پشت من جز ناخن انگشت من
ایرادش تو شرط stsql بود که باید به این صورت تصححیح بشه
StrSql = "SELECT AuthorityDetail.* FROM AuthorityDetail WHERE ((AuthorityDetail.ADCodingSeq = " & [Forms]![billing_persons_list]![Combid] & ")) ORDER BY AuthorityDetail.ADSanadNo,AuthorityDetail.ADDateSa nad;"
:خجالت::چشمک:
البته این موضوع رو هم از برنامه های این سایت متوجه شدم.از همه ممنون