ช่วยดู code และ error ให้หน่อยค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 3,834   6
URL.หัวข้อ / URL
ช่วยดู code และ error ให้หน่อยค่ะ

ช่วยดู code และ error ให้หน่อยค่ะ ว่าผิดตรงไหน ทำไมถึงerror ค่ะ

'Export Additional TOPS
Private Sub Export_Additional_TOP()
Dim strSql As String
Dim Db As Database
Dim Rs1 As Recordset, Rs2 As Recordset
Dim tmpBatchDate As Date, tmpBatchDateEnd As Date, ChkBatchDate As Date
Dim fileExport As String, pathInput As String
Dim sheetExport As String
Dim DayOfDate As Byte


Dim ExcelApp As Excel.Application
Dim wb As Excel.Workbook
Dim sh As Excel.Worksheet
Dim iRow As Long
Dim iCol As Integer

Dim i As Long

Dim ChannelArr
Dim RowChannelArr, ColChannelArr
Dim startRowArr
Dim TotalChannel As Byte

Const startCol = 7


    startRowArr = Array(518, 689)

    tmpBatchDate = BatchDateStart
    tmpBatchDateEnd = BatchDateEnd
    
    pathInput = GetPath() & "\Report\"
    fileExport = FileNameCDS & Format(tmpBatchDate, "yyyy") & ".xls"
   
    DoCmd.Hourglass True
            
    Set ExcelApp = CreateObject("Excel.Application")
    Set wb = ExcelApp.Workbooks.Open(pathInput & fileExport)
       
    sheetExport = "Additional"
    Set sh = wb.Sheets(sheetExport)
    
   Do
       
       
                    Set Db = CurrentDb
            
      
strSql = "SELECT R16.logo, SUM(R16.txn) AS total_txn, SUM((R16.amount / 1000)) AS amount_txn" & _
        " FROM R16 " & _
        " WHERE (R16.txndate)= #" & tmpBatchDate & "# AND ((R16.logo) In ('001','002','006','010','007','008') " & _
        " GROUP BY R16.logo,R16.txndate"
            
            Set Rs1 = Db.OpenRecordset(strSql)
            
            sh.Cells(iRow, 3) = tmpBatchDate
            iCol = startCol + Format(tmpBatchDate, "d") - 1
                    If Not Rs1.EOF Then
                    If (Rs1.Fields("Logo") = "001" Or Rs1.Fields("Logo") = "002") Then 'Plcc
                        sh.Cells(startRowArr, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(startRowArr + 1, iCol) = Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "008" Then 'Red
                        sh.Cells(startRowArr + 2, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(startRowArr + 3, iCol) = Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "006" Then 'Gold
                        sh.Cells(startRowArr + 4, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(startRowArr + 5, iCol) = Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "010" Then 'White Gold
                        sh.Cells(startRowArr + 6, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(startRowArr + 7, iCol) = Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "007" Then 'Platinum
                        sh.Cells(startRowArr + 8, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(startRowArr + 9, iCol) = Rs1.Fields("total_txn")
                    End If
                    Rs1.MoveNext
               End If
            Loop While (Not Rs1.EOF)
        Do
            DayOfDate = Day(tmpBatchDate)
            
            sh.Cells(startRowArr, startCol - 1) = sh.Cells(startRowArr, startCol + 31) / DayOfDate
            sh.Cells(startRowArr + 1, startCol - 1) = sh.Cells(startRowArr + 1, startCol + 31) / DayOfDate
      
            sh.Cells(startRowArr + 2, startCol - 1) = sh.Cells(startRowArr + 2, startCol + 31) / DayOfDate
            sh.Cells(startRowArr + 3, startCol - 1) = sh.Cells(startRowArr + 3, startCol + 31) / DayOfDate
   
            sh.Cells(startRowArr + 4, startCol - 1) = sh.Cells(startRowArr + 4, startCol + 31) / DayOfDate
            sh.Cells(startRowArr + 5, startCol - 1) = sh.Cells(startRowArr + 5, startCol + 31) / DayOfDate
            'Average White Gold
            sh.Cells(startRowArr + 6, startCol - 1) = sh.Cells(startRowArr + 6, startCol + 31) / DayOfDate
            sh.Cells(startRowArr + 7, startCol - 1) = sh.Cells(startRowArr + 7, startCol + 31) / DayOfDate
            'Average Platinum
            sh.Cells(startRowArr + 8, startCol - 1) = sh.Cells(startRowArr + 8, startCol + 31) / DayOfDate
            sh.Cells(startRowArr + 9, startCol - 1) = sh.Cells(startRowArr + 9, startCol + 31) / DayOfDate
            'Average Total
            sh.Cells(startRowArr + 10, startCol - 1) = sh.Cells(startRowArr + 10, startCol + 31) / DayOfDate
            sh.Cells(startRowArr + 11, startCol - 1) = sh.Cells(startRowArr + 11, startCol + 31) / DayOfDate
            If sh.Cells(startRowArr + 10, startCol - 1) = 0 Then
               sh.Cells(startRowArr + 11, startCol - 1) = 0
            Else
               sh.Cells(startRowArr + 11, startCol - 1) = "=AVERAGE(" & Number2Char(startCol) & iRow + 11 & ":" & Number2Char(startCol + DayOfDate - 1) & startRowArr + 11 & ")"
            End If
            Set Rs1 = Nothing
            Set Db = Nothing

        tmpBatchDate = DateAdd("d", 1, tmpBatchDate)
    Loop While (tmpBatchDate <= tmpBatchDateEnd)
    
    Set sh = Nothing
    wb.Save
    wb.Close
    ExcelApp.Quit
    Set ExcelApp = Nothing
    Screen.MousePointer = 0
Exit Sub


End Sub
'End Export ADDITIONAL TOP

นี่คือ error ค่ะ
Error No:3075
Description:Syntax error (missing operator) in query expresstion '(R16.txndate)=#8/19/2010# and (R16,logo) in ('001','003')
Group by R16.logo,R16.txndate



6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R06427
SQL ใน error description ไม่เห็นตรงกับใน source code เลย
2 @R06429
เท่าที่เห็น ใน source code จำนวนวงเล็บเปิดและปิดไม่เท่ากันนะครับ แล้วก็อย่าใส่เยอะจนเกินความจำเป็น จะอ่านได้ยากในภายหลังครับ

WHERE (R16.txndate)= #" & tmpBatchDate & "# AND ((R16.logo) In ('001','002','006','010','007','008')
3 @R06450
เช็คดูวงเล็บแล้วค่ะก็ยัง error อยู่ค่ะ
เดี๋ยวจะ copy code มาอีกทีหนึ่งรบกวนช่วยดูให้หน่อยนะคะ
4 @R06451
'Export Additional TOPS
Private Sub Export_Additional_TOP()
Dim strSql As String
Dim Db As Database
Dim Rs1 As Recordset, Rs2 As Recordset
Dim tmpBatchDate As Date, tmpBatchDateEnd As Date, ChkBatchDate As Date
Dim fileExport As String, pathInput As String
Dim sheetExport As String
Dim DayOfDate As Byte

'for excel
Dim ExcelApp As Excel.Application
Dim wb As Excel.Workbook
Dim sh As Excel.Worksheet
Dim iRow As Integer
Dim iRow2 As Integer
Dim iCol As Integer
Dim startRowArr
Dim i As Long

Const startCol = 7

startRowArr = Array(518, 689)
   
    tmpBatchDate = BatchDateStart
    tmpBatchDateEnd = BatchDateEnd
    
    pathInput = GetPath() & "\Report\"
    fileExport = FileNameCDS & Format(tmpBatchDate, "yyyy") & ".xls"
   
    DoCmd.Hourglass True
            
    Set ExcelApp = CreateObject("Excel.Application")
    Set wb = ExcelApp.Workbooks.Open(pathInput & fileExport)
       
    sheetExport = "Additional"
    Set sh = wb.Sheets(sheetExport)
    
   Do
   
             
          Set Db = CurrentDb
          iRow = startRowArr(i) + 6
          iCol = startCol + Format(tmpBatchDate, "d") - 1
          iRow2 = startRowArr(i)
          sh.Cells(iRow, 3) = tmpBatchDate
            
            
            'Start Export
           strSql = "SELECT R16.logo, SUM(R16.txn) AS total_txn, SUM((R16.amount / 1000)) AS amount_txn,R16.txndate " & _
        " FROM R16 " & _
        " WHERE (R16.txndate)= #" & tmpBatchDate & "# AND (R16.logo) In ('001','002','006','010','007','008') and (R16.txn) in ('407','408') " & _
        " GROUP BY R16.logo,R16.txndate"
            
            Set Rs1 = Db.OpenRecordset(strSql)
           
                     
                     
            Do
               If Not Rs1.EOF Then
                    If (Rs1.Fields("Logo") = "001" Or Rs1.Fields("Logo") = "002") Then 'Plcc
                        sh.Cells(iRow2, iCol) = sh.Cells(iRow2, iCol) + Rs1.Fields("amount_txn")
                        sh.Cells(iRow2 + 1, iCol) = sh.Cells(iRow2 + 1, iCol) + Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "008" Then 'Red
                        sh.Cells(iRow2 + 2, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(iRow2 + 3, iCol) = Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "006" Then 'Gold
                        sh.Cells(iRow2 + 4, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(iRow2 + 5, iCol) = Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "010" Then 'White Gold
                        sh.Cells(iRow2 + 6, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(iRow2 + 7, iCol) = Rs1.Fields("total_txn")
                    ElseIf Rs1.Fields("Logo") = "007" Then 'Platinum
                        sh.Cells(iRow2 + 8, iCol) = Rs1.Fields("amount_txn")
                        sh.Cells(iRow2 + 9, iCol) = Rs1.Fields("total_txn")
                    End If
                    Rs1.MoveNext
               End If
            Loop While (Not Rs1.EOF)
            
            DayOfDate = Day(tmpBatchDate)
            'Average PLCC
            sh.Cells(iRow2, startCol - 1) = sh.Cells(iRow2, startCol + 31) / DayOfDate
            sh.Cells(iRow2 + 1, startCol - 1) = sh.Cells(iRow2 + 1, startCol + 31) / DayOfDate
            'Average Classic
            sh.Cells(iRow2 + 2, startCol - 1) = sh.Cells(iRow2 + 2, startCol + 31) / DayOfDate
            sh.Cells(iRow2 + 3, startCol - 1) = sh.Cells(iRow2 + 3, startCol + 31) / DayOfDate
            'Average Gold
            sh.Cells(iRow2 + 4, startCol - 1) = sh.Cells(iRow2 + 4, startCol + 31) / DayOfDate
            sh.Cells(iRow2 + 5, startCol - 1) = sh.Cells(iRow2 + 5, startCol + 31) / DayOfDate
            'Average White Gold
            sh.Cells(iRow2 + 6, startCol - 1) = sh.Cells(iRow2 + 6, startCol + 31) / DayOfDate
            sh.Cells(iRow2 + 7, startCol - 1) = sh.Cells(iRow2 + 7, startCol + 31) / DayOfDate
            'Average Platinum
            sh.Cells(iRow2 + 8, startCol - 1) = sh.Cells(iRow2 + 8, startCol + 31) / DayOfDate
            sh.Cells(iRow2 + 9, startCol - 1) = sh.Cells(iRow2 + 9, startCol + 31) / DayOfDate
            'Average Total
            sh.Cells(iRow2 + 10, startCol - 1) = sh.Cells(iRow2 + 10, startCol + 31) / DayOfDate
            sh.Cells(iRow2 + 11, startCol - 1) = sh.Cells(iRow2 + 11, startCol + 31) / DayOfDate
            If sh.Cells(iRow2 + 10, startCol - 1) = 0 Then
               sh.Cells(iRow2 + 11, startCol - 1) = 0
            Else
               sh.Cells(iRow2 + 11, startCol - 1) = "=AVERAGE(" & Number2Char(startCol) & iRow2 + 11 & ":" & Number2Char(startCol + DayOfDate - 1) & iRow2 + 11 & ")"
            End If
            Set Rs1 = Nothing
            Set Db = Nothing
       
      ' tmpBatchDate = DateAdd("d", 1, tmpBatchDate)
    Loop While (tmpBatchDate <= tmpBatchDateEnd)
    
    Set sh = Nothing
    wb.Save
    wb.Close
    ExcelApp.Quit
    Set ExcelApp = Nothing
    Screen.MousePointer = 0
Exit Sub
'ErrHandler:
'   If IsFileOpen(pathInput & fileExport) Then
'      wb.Close
   '     ExcelApp.Quit
    '    Set ExcelApp = Nothing
    'End If
    'Screen.MousePointer = 0
    'DoCmd.SetWarnings True
    'If Err.Number = 76 Or Err.Number = 53 Then
   '     MsgBox "File " & pathInput & fileExport & " Not Found. ", vbExclamation
   ' Else
    '    MsgBox "Error No: " & Err.Number & vbCrLf & "Description: " & Err.Description, vbExclamation
   ' End If
End Sub
'End Export ADDITIONAL TOP



error แจ้งว่า Data Type mismatch in criteria expression


ช่วยหน่อยค่ะ ถ้าไม่ได้ตกงานแน่เลย
5 @R06452
ถ้ายังผิดที่บรรทัดเดิมที่ WHERE clause ก็เดานะว่า txn คงเป็นข้อมูลประเภท numeric ดังนั้น ใช้ in (407,408) แทนถึงจะถูกต้องกว่าการใช้ in ('407','408') แต่ถ้าไม่ใช่ผิดที่บรรทัดนี้ก็บอกด้วยว่าผิดที่บรรทัดไหน

ปล. เข้าใจว่าที่เขียนว่า "ถ้าไม่ได้ตกงานแน่เลย" คงเป็นแค่การเขียนคิขุเล่นๆหรือตัดพ้อเท่านั้น อันนี้ก็ไม่เป็นไรครับ ... แต่ถ้าเป็นเรื่องซีเรียสจริงๆ ผมก็ต้องขอซีเรียสตอบกลับว่า ทุกคนที่มาตอบในนี้ ต่างก็มีหน้าที่ภาระการงานของตัวเองและครอบครัวที่ต้องรับผิดชอบอยู่แล้ว มาตอบในนี้ให้ก็ไม่ได้ค่าจ้างหรือเงินทองอะไร มาตอบเพราะอยากช่วยคนที่ไม่เข้าใจหรือติดปัญหาก็เท่านั้น ตอบแล้วแก้ปัญหาได้หรือไม่ ถูกใจหรือไม่ ไม่มีรับประกันใดๆทั้งสิ้น ดังนั้นอย่าโยนความรับผิดชอบว่าจะตกงานหรือไม่มาให้ใคร หวังว่าพูดตรงๆก็อย่าโกรธกันนะครับ
6 @R06454
ขอบคุณมากๆนะคะสำหรับความช่วยเหลือ ที่เขียนไปนั้นเป็นการเขียนเล่นๆเท่านั้นค่ะ ติดปัญหาแล้วมีคนเข้ามาช่วยเหลือแบบนี้ก็ดีใจสุดๆแล้วค่ะ ที่ยังมีคนที่มีน้ำใจในการช่วยเหลือคนอื่นอยู่ในสังคมปัจจุบันนี้ ส่วนคำแนะนำที่ให้มานั้นจะลองไปทำดูนะคะ ถ้าไม่ได้จะมาใหม่
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3449s