powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не обрабатывается ошибка
4 сообщений из 4, страница 1 из 1
Не обрабатывается ошибка
    #36097176
DeViLsssss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, коллеги!

Есть отрывок кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
i =  1 
Set conn = New ADODB.Connection
Set rst = New ADODB.Recordset
conn.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=" & dr & ";DefaultDir=" & dr
conn.Open
    For Each f In fol.Files
        ss3 = f.Name
        If UCase(Right(ss3,  4 )) = ".DBF" Then
            ss2 = Left(ss3, Len(ss3) -  4 )
            On Error GoTo fileerr
            Set rst = conn.Execute("select * from [" & ss2 & "] where [" & ss2 & "].[STATUS]=0 and [" & ss2 & "].[INFILE_ID]<>''")
            If rst.EOF = - 1  Then
                GoTo  1 
            Else
                If i =  1  Then
                    ssx = f.Path
                    ss4 = ss2 & "_izm"
                    conn.Execute ("select * into [" & ss4 & "] from [" & ss2 & "]")
                Else
                    conn.Execute ("insert into [" & ss4 & "] select * from [" & ss2 & "]")
                End If
                i = i +  1 
            End If
        Else
            MsgBox (UCase(Right(ss3,  4 )))
        End If
 1     Next f
conn.Close
FileCopy ssx, Left(ssx, Len(ssx) - Len(ss4)) & "fin_0.dbf"
conn.Open
            conn.Execute ("delete * from [fin_0]")
            conn.Execute ("insert into [fin_0] select * from [" & ss4 & "]")
conn.Close
Set conn = Nothing
Kill (Left(ssx, Len(ssx) - Len(ss4)) & ss4 & ".dbf")
MsgBox ("vse!!!")
fileerr:
    Select Case Err.Number
        Case - 2147217900 
            Kill (Left(ssx, Len(ssx) - Len(ss4)) & ss4 & ".dbf")
        Case - 2147217904 
            GoTo  1 
    End Select

Суть программы, отрывок кода которой приведен выше:

Есть папка, в ней файлы. Из этих файлов обрабатываем только дбфки. Дбфки, в свою очередь бывают трех видов. У первых двух структура одинаковая, но разные значения поля STATUS. у третьего вида нет поля INFILE_ID. Нужно собрать в один файл все из файлов второго вида, а 1 и 3 виды не обрабатывать. Основа отбора нужных файлов кроется в On error goto fileerr

Программа работает, если файл ТРЕТЬЕГО вида встречается ОДИН раз. Если подобный файл встречается >1 раза, то ошибка, которая возникает при этом не обрабатывается, а вываливается как есть!
Подскажите пожалуйста, в чем может быть проблема?
...
Рейтинг: 0 / 0
Не обрабатывается ошибка
    #36097822
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Использование GoTo и меток, давно считается дурным тоном;
2. Использование не информативных имен полей - тоже дурной тон, откуда кому знать что такое ss2, ss3 и т.д.
3. Код надо вставлять в теги, читать не возможно вообще.
P.S. Исходя из задания, Вы кажется не в ту сторону смотрите.
...
Рейтинг: 0 / 0
Не обрабатывается ошибка
    #36097826
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, не полей а таблиц. ОписАлся.
...
Рейтинг: 0 / 0
Не обрабатывается ошибка
    #36098811
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeViLsssss,

подправила немного твой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
'Переменные я объявила скорее для последовательности, нежели чем для необходимости
'.....
Dim Cmd As String, ss2 As String, ss3 As String, ss4 As String, ssx As String
Dim sErr As String

'Обработка ошибок (чтобы не вываливались в Ran-time' е всякие непонятные сообщения)
On Error GoTo FileErr

i =  1 

    Set conn = New ADODB.Connection
    Set rst = New ADODB.Recordset

    conn.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=" & dr & ";DefaultDir=" & dr
    conn.Open

    For Each f In fol.Files
        'IMHO конечно, но интуитивно надо делать
        i =  1 
        
        ss3 = f.Name
        If UCase(Right(Trim(ss3),  4 )) = ".DBF" Then
            ss2 = Left(ss3, Len(ss3) -  4 )
        
            Cmd = "select * from [" & ss2 & "] where [" & ss2 & "].[STATUS]=0 and [" & ss2 & "].[INFILE_ID]<>''"
            Set rst = conn.Execute(Cmd)
            rst.MoveFirst
            
            If rst.EOF <> - 1  Then
                If i =  1  Then
                    ssx = f.Path
                    ss4 = ss2 & "_izm"
                    Cmd = "select * into [" & ss4 & "] from [" & ss2 & "]"
                    conn.Execute (Cmd)
                Else
                    Cmd = "insert into [" & ss4 & "] select * from [" & ss2 & "]"
                    conn.Execute (Cmd)
                End If
                
                i = i +  1 
            End If
'Думаю этой части не надо
'        Else
'            MsgBox (UCase(Right(ss3, 4)))
        End If
 1 :
    Next f

    conn.Close
    
    FileCopy ssx, Left(ssx, Len(ssx) - Len(ss4)) & "fin_0.dbf"

    conn.Open
    conn.Execute ("delete * from [fin_0]")
    conn.Execute ("insert into [fin_0] select * from [" & ss4 & "]")
    conn.Close
    
    Set conn = Nothing
    Kill (Left(ssx, Len(ssx) - Len(ss4)) & ss4 & ".dbf")
    
MsgBox ("vse!!!")
Exit Sub

FileErr:
    sErr = Err.Number & " " & Err.Source & " " & Err.Description
    Select Case Err.Number
        Case - 2147217900 
            Kill (Left(ssx, Len(ssx) - Len(ss4)) & ss4 & ".dbf")
        Case - 2147217904 
            GoTo  1 
    End Select
    MsgBox sErr, vbInformation
End Sub


1. Не увидела текст ошибки
2. Не увидела закрытие dbf
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не обрабатывается ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]