2017-01-05 8 views
-1
Private Sub cmdShow_Click() 
    'lblTotPur/lblTotPayRet/lblBalance 
    Dim strShow, mSlNo 
    Dim rsShow As New ADODB.Recordset 
    Dim NewItem As Variant 
    If Trim(txtCustomer.Text) = "" Then 
     MsgBox "Please select vendor to proceed...", vbCritical, POPUP_COMP 
     Exit Sub 
    End If 

    Dim recCnt 
    pgrPartyLedger.Min = 0 
    recCnt = 0 
    'VOUCHMST_P//VNO,DATED,VTYPE,REMARKS,byUser CASH PURCHASE RETURN 
    strShow = "select Count(*) as mCnt from VOUCHMST A,VOUCHDAT B, mPurchase C " 
    strShow = strShow & " where A.VNO=B.VNO and (A.REMARKS='CASH PURCHASE RETURN' OR A.REMARKS='CREDIT PURCHASE RETURN' OR A.REMARKS='CREDIT PURCHASE' OR A.REMARKS='CASH PURCHASE' OR A.REMARKS='PAYMENT' OR A.REMARKS='CREDIT NOTE') " 
    strShow = strShow & " and A.DATED between #" & Format(dtFrom.Value, "MM/dd/yyyy") & "# " 
    strShow = strShow & " and #" & Format(dtTo.Value, "MM/dd/yyyy") & "# " 
    strShow = strShow & " and B.IDNO = '" & Trim(txtCustomerId.Text) & "' " 
    strShow = strShow & " and A.VREFNO = C.PurBillNo " 
    'strShow = strShow & " order by A.ID,A.DATED,A.VNO" 
    rsShow.Open strShow, cn 
    recCnt = rsShow("mCnt") 
    rsShow.Close 
    pgrPartyLedger.Max = recCnt + 1 

    'VOUCHMST_P//VNO,DATED,VTYPE,REMARKS,byUser 
    strShow = "select A.Id,A.cmnt,A.VNO,A.DATED,B.IDNO,B.IDNAME,B.AMOUNT,B.DR_CR,B.VNARRATION,A.REMARKS,C.DealInvNo, B.CQ_TYPE, B.BANKNAME, B.BANKBRANCH, B.CQ_NO from VOUCHMST A,VOUCHDAT B,mPurchase C " 
    strShow = strShow & " where A.VNO=B.VNO and (A.REMARKS='CASH PURCHASE RETURN' OR A.REMARKS='CREDIT PURCHASE RETURN' OR A.REMARKS='CREDIT PURCHASE' OR A.REMARKS='CASH PURCHASE' OR A.REMARKS='PAYMENT' OR A.REMARKS='CREDIT NOTE') " 
    strShow = strShow & " and A.DATED between #" & Format(dtFrom.Value, "MM/dd/yyyy") & "# " 
    strShow = strShow & " and #" & Format(dtTo.Value, "MM/dd/yyyy") & "# " 
    strShow = strShow & " and B.IDNO = '" & Trim(txtCustomerId.Text) & "' " 
    strShow = strShow & " and A.VREFNO = C.PurBillNo " 
    strShow = strShow & " order by A.ID,A.DATED,A.VNO" 
    rsShow.Open strShow, cn 

    Dim mPur, mPayRet, mAnyAdv, mTempVNO 
    mPur = 0 
    mPayRet = 0 
    mAnyAdv = 0 

    mSlNo = 1 
    ShowPaymentHeader 
    Do While Not rsShow.EOF 
     mTempVNO = rsShow("VNO") 

     Set NewItem = listViewPayment.ListItems.Add(, "C" & mSlNo, Format(rsShow("DATED"), "dd/MM/yyyy")) 
     NewItem.SubItems(1) = rsShow("VNO") 
     NewItem.SubItems(13) = rsShow("DealInvNo") 

     NewItem.SubItems(2) = IIf(IsNull(rsShow("IDNAME")), "", CommaFilterText(rsShow("IDNAME"), 1)) 
     If Trim(rsShow("REMARKS")) = "CASH PURCHASE" Then 
      NewItem.SubItems(3) = FormatTakaPaisa(rsShow("AMOUNT")) 
      NewItem.SubItems(4) = FormatTakaPaisa(rsShow("AMOUNT")) 
     ElseIf Trim(rsShow("REMARKS")) = "CREDIT PURCHASE" Then 
      mAnyAdv = ShowPartialAdvance(rsShow("VNO")) 
      NewItem.SubItems(3) = FormatTakaPaisa(rsShow("AMOUNT") + Val(mAnyAdv)) 
      If Val(mAnyAdv) > 0 Then 
       NewItem.SubItems(4) = FormatTakaPaisa(mAnyAdv) 
      Else 
       NewItem.SubItems(4) = "" 
      End If 
     Else 
      NewItem.SubItems(3) = "" 
      NewItem.SubItems(4) = FormatTakaPaisa(rsShow("AMOUNT")) 
      NewItem.SubItems(7) = rsShow("CQ_TYPE") 
      NewItem.SubItems(8) = rsShow("BANKNAME") 
      NewItem.SubItems(9) = rsShow("BANKBRANCH") 

      **  
      > NewItem.SubItems(9) = rsShow("cmnt") 

      ** 

     End If 
     NewItem.SubItems(6) = rsShow("IDNO") 

     mPur = mPur + Val(NewItem.SubItems(3)) 
     mPayRet = mPayRet + Val(NewItem.SubItems(4)) 

     NewItem.SubItems(5) = rsShow("REMARKS") 
     NewItem.SubItems(12) = GetVoucherRefNo(mTempVNO) 

     pgrPartyLedger.Value = mSlNo 

     mSlNo = mSlNo + 1 
     rsShow.MoveNext 
    Loop 
    rsShow.Close 

    lblTotPur.Caption = FormatTakaPaisa(mPur) 
    lblTotPayRet.Caption = FormatTakaPaisa(mPayRet) 
    lblBalance.Caption = FormatTakaPaisa(mPur - mPayRet) 
    pgrPartyLedger.Value = 0   
End Sub 

Я получаю сообщение об ошибке типа несоответствия времени выполнения 13 для этой линии, пожалуйста, помогите мнеТип Несовпадения ошибки 13 в VB6, во время цикла ADODB Recordset

+0

Что содержит 'rsShow (" cmnt ")'? – GSerg

+0

содержит некоторые данные из базы данных, которые я пытаюсь извлечь, что столбец «cmnt» находится в таблице VOUCHMST. –

+0

"Some data" - это не допустимое описание. Какой тип данных и может ли он храниться в 'NewItem.SubItems (9)'? – GSerg

ответ

0

В зависимости от структуры вашей базы данных и из вашего запроса, вы можете иметь поле с нулевыми значениями или полями с нулевыми строками. Вы всегда должны проверять это, особенно когда вы выполняете внешние соединения, или несколько объединений, как в вашем запросе.

Если вы проверяете содержимое только таблицы и видите, что все поля заполнены, это не означает, что результирующий набор вернет только действительные значения, но это выходит за рамки этого ответа.

Существует множество распространенных методов проверки значений полей и ошибок ловушки при работе с Recordset. Просто назвать несколько:

  1. On Error Resume ... блоки: избежать этого, вы не обзор , что случаются
  2. Проверить Null значений, DBNull значений, Empty значений или проверить Field Type. Только один пример:

    If IsNull(rsShow("cmnt").value) = True Then NewItem.SubItems(9) = "" Else NewItem.SubItems(9) = rsShow("cmnt") End If

    Примечание: вы должны четко выделено value свойство поля.

    Если вы выполняете проверку типа поля, научитесь использовать Обозреватель объектов, интегрированный в VB IDE, это ваш лучший друг.

  3. Проверьте ActualSize свойство поля: см MSDN: The Field Object

  4. Другой общий ярлык предварять или добавить строку нулевой длины к возвращаемому значению поля, это справедливо только если вы не должен различать Null ценности и Blank ценности и просто нужно только, чтобы показать результат в этикетке или в списке, как ваш случай: NewItem.SubItems(9) = "" & rsShow("cmnt")

О Error 13: В VB IDE откройте Immediate Window, введите: ? 0 = "" и нажмите Enter. Что в итоге?

И последнее, но не менее важное: всегда проверяйте имена полей, каждый разработчик базы данных сталкивался с ошибками из-за опечаток, особенно при работе с финансовыми приложениями с десятками таблиц и сотен полей.