Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Ошибка 457 для listview Добавлено: 22.08.06 14:08  

Автор вопроса:  Strike1984 | ICQ: 247188203 
Есть программа, которая принимает из внешних источников данные по кнопке, причем при нажатии в первый раз, срабатывает всегда, а при нажатии второй раз вылетает с ошибкой 457. В программе используются textboxы и listview, ошибка скорее всего в listview. Помогите избавиться, так опыт у меня небольшой. Есть ссылка http://www.bousoft.com/articles/art19.php#22 для лечения listboxов, но перенести в свою программу не получается.
Заранее всем благодарен.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #1
Добавлено: 22.08.06 15:42
On Error Resume Next 'при ошибке переходим на след. строку
On Error GoTo i_err 'при ошибке переходим на строку с меткой "i_err"
On Error GoTo 0 'контроль ошибок отключен


Поясни точнее, что делает программа, что выдается эта ошибка? Лучше еще и кусок кода.

Ответить

Номер ответа: 2
Автор ответа:
 Strike1984



ICQ: 247188203 

Вопросов: 4
Ответов: 2
 Профиль | | #2 Добавлено: 23.08.06 12:50
Я пишу программу почтовый сервер с автоответчиком, отправка почты работает нормально, прием хромает. Хотя добивался чтобы, он не обращал внимания на эту ошибку 457, но и измений не происходило в listview, или сообщения суммировались каждый раз с нажатием кнопки.
Function Exist(sKey As String) As Boolean
Dim Item
On Error Resume Next
Set Item = mCol.Item(sKey)
If Err.Number = 0 Then Exist = True
On Error GoTo 0
End Function

Public Sub Add(oMessage As CMessage, Optional sKey As String)
    
    If Len(sKey) = 0 Then
  mCol.Add oMessage
Else
  If Not Exist(sKey) Then mCol.Add oMessage, sKey 'ОШИБКА ЗДЕСЬ
End If


End Sub


Private Sub ListMessages()

    ;Dim oMes As CMessage
    ;Dim lvItem As ListItem
    
    For Each oMes In m_colMessages
       Set lvItem = lvMessages.ListItems.Add(Key:=oMes.MessageID) 'Ошибка здесь, я немного доработал, и она непостоянная, даже если программа срабатывает правильно второй раз, что я вижу по msgbox, то проблема именно с listview

        lvItem.Key = oMes.MessageID 'Работает независимо, комментирую эту строку или нет
        lvItem.Text = oMes.From
        lvItem.SubItems(1) = oMes.Subject
        lvItem.SubItems(2) = oMes.SendDate
        lvItem.SubItems(3) = oMes.Size
    Next

Еще не могу понять ошибку, почему winsock не закрывает connect.
Case POP3_RETR
                strBuffer = strBuffer & strData
                If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
                    strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
                    strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
                    Set m_oMessage = New CMessage
                    m_oMessage.CreateFromText strBuffer
                    m_colMessages.Add m_oMessage, m_oMessage.MessageID
                    Set m_oMessage = Nothing
                    strBuffer = ""
                    If intCurrentMessage = intMessages Then
                        m_State = POP3_QUIT
                        Winsock1.SendData "QUIT" & vbCrLf
                        ;Debug.Print "QUIT"
                    Else
                        intCurrentMessage = intCurrentMessage + 1
                        m_State = POP3_RETR
                        Winsock1.SendData "RETR " & _
                        CStr(intCurrentMessage) & vbCrLf
                        ;Debug.Print "RETR " & intCurrentMessage
' скорее всего в этой части, выполнение POP_QUIT должно ссылаться на несколько строк выше.
                    End If
                End If
            Case POP3_QUIT
                Winsock1.Close
                Call ListMessages
        End Select
    Else
            Winsock1.Close
            MsgBox "POP3 Error: " & strData, _
            vbExclamation, "POP3 Error"
    End If

Ответить

Номер ответа: 3
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #3
Добавлено: 24.08.06 05:59
If Err.Number = 0 Then Exist = True

Это что, интересно, за ошибка 0?
457 там должно быть, ошибка при создании ключа

Ответить

Номер ответа: 4
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #4
Добавлено: 24.08.06 06:35
lvItem.Key = oMes.MessageID

Конечно работает, но работает, потому что в предыдущей строке ты уже присвоил стройство key, в этой строке смысла нет.
Лучше сразу замени
Set lvItem = lvMessages.ListItems.Add(Key:=oMes.MessageID)

на
Set lvItem = lvMessages.ListItems.Add(, oMes.MessageID, oMes.From)


Еще смотри, подровнял твою подпрограмму:
Dim oMes As CMessage
Dim lvItem As ListItem
 
For Each oMes In m_colMessages
    Set lvItem = lvMessages.ListItems.Add(Key:=oMes.MessageID)
    lvItem.Key = oMes.MessageID
    lvItem.Text = oMes.From
    lvItem.SubItems(1) = oMes.Subject
    lvItem.SubItems(2) = oMes.SendDate
    lvItem.SubItems(3) = oMes.Size
Next

'где select case? С чем сравниваешь?
Case POP3_RETR
    strBuffer = strBuffer & strData
    If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
        strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
        strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
        Set m_oMessage = New CMessage
        m_oMessage.CreateFromText strBuffer
        m_colMessages.Add m_oMessage, m_oMessage.MessageID
        Set m_oMessage = Nothing
        strBuffer = ""
        If intCurrentMessage = intMessages Then
            m_State = POP3_QUIT
            Winsock1.SendData "QUIT" & vbCrLf
            ;Debug.Print "QUIT"
        Else
            intCurrentMessage = intCurrentMessage + 1
            m_State = POP3_RETR
            Winsock1.SendData "RETR " & _
            CStr(intCurrentMessage) & vbCrLf
            ;Debug.Print "RETR " & intCurrentMessage
        End If
    End If
Case POP3_QUIT
    Winsock1.Close
    Call ListMessages
End Select'вот, End Select есть, а Select Case нету

Else'Else и End if есть, а где условие?
    Winsock1.Close
    MsgBox "POP3 Error: " & strData, _
    vbExclamation, "POP3 Error"
End If

Ответить

Номер ответа: 5
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #5
Добавлено: 24.08.06 06:38
lvItem.Key = oMes.MessageID

Конечно работает, но работает, потому что в предыдущей строке ты уже присвоил стройство key, в этой строке смысла нет.
Лучше сразу замени
Set lvItem = lvMessages.ListItems.Add(Key:=oMes.MessageID)

на
Set lvItem = lvMessages.ListItems.Add(, oMes.MessageID, oMes.From)


Еще смотри, подровнял твою подпрограмму:
Dim oMes As CMessage
Dim lvItem As ListItem
 
For Each oMes In m_colMessages
    Set lvItem = lvMessages.ListItems.Add(Key:=oMes.MessageID)
    lvItem.Key = oMes.MessageID
    lvItem.Text = oMes.From
    lvItem.SubItems(1) = oMes.Subject
    lvItem.SubItems(2) = oMes.SendDate
    lvItem.SubItems(3) = oMes.Size
Next

'где select case? С чем сравниваешь?
Case POP3_RETR
    strBuffer = strBuffer & strData
    If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
        strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
        strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
        Set m_oMessage = New CMessage
        m_oMessage.CreateFromText strBuffer
        m_colMessages.Add m_oMessage, m_oMessage.MessageID
        Set m_oMessage = Nothing
        strBuffer = ""
        If intCurrentMessage = intMessages Then
            m_State = POP3_QUIT
            Winsock1.SendData "QUIT" & vbCrLf
            Debug.Print "QUIT"
        Else
            intCurrentMessage = intCurrentMessage + 1
            m_State = POP3_RETR
            Winsock1.SendData "RETR " & _
            CStr(intCurrentMessage) & vbCrLf
            Debug.Print "RETR " & intCurrentMessage
        End If
    End If
Case POP3_QUIT
    Winsock1.Close
    Call ListMessages
End Select'вот, End Select есть, а Select Case нету

Else'Else и End if есть, а где условие?
    Winsock1.Close
    MsgBox "POP3 Error: " & strData, _
    vbExclamation, "POP3 Error"
End If

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам