Страница: 1 |
Вопрос: Ошибка 457 для listview | Добавлено: 22.08.06 14:08 |
Автор вопроса: ![]() |
Есть программа, которая принимает из внешних источников данные по кнопке, причем при нажатии в первый раз, срабатывает всегда, а при нажатии второй раз вылетает с ошибкой 457. В программе используются textboxы и listview, ошибка скорее всего в listview. Помогите избавиться, так опыт у меня небольшой. Есть ссылка http://www.bousoft.com/articles/art19.php#22 для лечения listboxов, но перенести в свою программу не получается.
Заранее всем благодарен. |
Ответы | Всего ответов: 5 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ICQ: 789764 Вопросов: 90 Ответов: 230 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 22.08.06 15:42 |
On Error Resume Next 'при ошибке переходим на след. строку
On Error GoTo i_err 'при ошибке переходим на строку с меткой "i_err" On Error GoTo 0 'контроль ошибок отключен Поясни точнее, что делает программа, что выдается эта ошибка? Лучше еще и кусок кода. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() 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() ![]() ![]() 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 ![]() Else intCurrentMessage = intCurrentMessage + 1 m_State = POP3_RETR Winsock1.SendData "RETR " & _ CStr(intCurrentMessage) & vbCrLf ![]() ' скорее всего в этой части, выполнение 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 Автор ответа: ![]() ![]() ![]() ICQ: 789764 Вопросов: 90 Ответов: 230 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 24.08.06 05:59 |
If Err.Number = 0 Then Exist = True
Это что, интересно, за ошибка 0? 457 там должно быть, ошибка при создании ключа |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ICQ: 789764 Вопросов: 90 Ответов: 230 |
Web-сайт: Профиль | Цитата | #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 ![]() Else intCurrentMessage = intCurrentMessage + 1 m_State = POP3_RETR Winsock1.SendData "RETR " & _ CStr(intCurrentMessage) & vbCrLf ![]() 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 Автор ответа: ![]() ![]() ![]() ICQ: 789764 Вопросов: 90 Ответов: 230 |
Web-сайт: Профиль | Цитата | #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 |
|