Слишком быстрое выполнение программы или ...?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Слишком быстрое выполнение программы или ...?

Сообщение Al Prad » 22.09.2009 (Вт) 16:17

Здравствуйте!

Есть 2 ДБФ файла - один текущий, другой - архив. Кнопка на форме создает новую запись в архиве, копирует туда данные из текущего ДБФа, а из текущего удаляет обработанную запись. Вот ее код (извините за длиннфй код):

Код: Выделить всё

  On Error Resume Next
    answer = vbNo

     answer = MsgBox("Вы действительно хотите удалить запись?", vbYesNo Or vbQuestion, "Удаление записи")
    'this may produce an error if you delete the last
  'record or the only record in the recordset
  If answer = vbYes Then
                 ' Open App.Path & "\Actions\" & Str(Year(Now)) & "_" & Str(Month(Now)) & "_" & Str(Day(Now)) & ".txt" For Append As 1
                '        Print #1, Str(Now) & "  Кнопка 'Удаленике записи' Удаляется запись за " & txtData.Text
                 '       Print #1,
                 ' Close 1
                 

             
             
                 KOD = DataAvto.Recordset!KOD
       
               
            'делаем новую запись в архиве
                DataArch.Recordset.MoveLast
                DataArch.Recordset.AddNew
           
            'заполняем поля архивной записи
            DataArch.Recordset!KOD = DataAvto.Recordset!KOD
            DataArch.Recordset!DATEIN = DataAvto.Recordset!DATEIN
            DataArch.Recordset!TIMEIN = DataAvto.Recordset!TIMEIN
            DataArch.Recordset!TOVAR = DataAvto.Recordset!TOVAR
            DataArch.Recordset!NAVTO = DataAvto.Recordset!NAVTO
            DataArch.Recordset!NPRIC = DataAvto.Recordset!NPRIC
            DataArch.Recordset!Zapret = DataAvto.Recordset!Zapret
            DataArch.Recordset!NOMER_TTN = DataAvto.Recordset!NOMER_TTN
            DataArch.Recordset!DATA_POGRU = DataAvto.Recordset!DATA_POGRU
            DataArch.Recordset!MARKA = DataAvto.Recordset!MARKA
            DataArch.Recordset!POSTAVSHIK = DataAvto.Recordset!POSTAVSHIK
            DataArch.Recordset!OTPRAVITEL = DataAvto.Recordset!OTPRAVITEL
            DataArch.Recordset!PEREVOZCHI = DataAvto.Recordset!PEREVOZCHI
            DataArch.Recordset!FORWARDING = DataAvto.Recordset!FORWARDING
            DataArch.Recordset!NOMER_KU = DataAvto.Recordset!NOMER_KU
            DataArch.Recordset!DATA_VIDAC = DataAvto.Recordset!DATA_VIDAC
            DataArch.Recordset!VLAZHN_KU = DataAvto.Recordset!VLAZHN_KU
            DataArch.Recordset!SOR_KU = DataAvto.Recordset!SOR_KU
            DataArch.Recordset!DATA_VIZIR = DataAvto.Recordset!DATA_VIZIR
            DataArch.Recordset!TIME_VIZIR = DataAvto.Recordset!TIME_VIZIR
            DataArch.Recordset!VLAZHN_VIZ = DataAvto.Recordset!VLAZHN_VIZ
            DataArch.Recordset!RAZRESH_VL = DataAvto.Recordset!RAZRESH_VL
            DataArch.Recordset!SOR_VIZIR = DataAvto.Recordset!SOR_VIZIR
            DataArch.Recordset!RAZRESH_SO = DataAvto.Recordset!RAZRESH_SO
            DataArch.Recordset!ZARAZH = DataAvto.Recordset!ZARAZH
            DataArch.Recordset!RAZRESH_ZA = DataAvto.Recordset!RAZRESH_ZA
            DataArch.Recordset!FOSFIN = DataAvto.Recordset!FOSFIN
            DataArch.Recordset!RAZRESH_FO = DataAvto.Recordset!RAZRESH_FO
            DataArch.Recordset!RAZRESH_PR = DataAvto.Recordset!RAZRESH_PR
            DataArch.Recordset!FIO_VIZIR = DataAvto.Recordset!FIO_VIZIR
            DataArch.Recordset!RASPORAZH = DataAvto.Recordset!RASPORAZH
            DataArch.Recordset!FIO_OTVLIC = DataAvto.Recordset!FIO_OTVLIC
            DataArch.Recordset!LAB_VLAZH = DataAvto.Recordset!LAB_VLAZH
            DataArch.Recordset!LAB_SOR = DataAvto.Recordset!LAB_SOR
            DataArch.Recordset!NPROBI = DataAvto.Recordset!NPROBI
            DataArch.Recordset!NSILOSA = DataAvto.Recordset!NSILOSA
            DataArch.Recordset!SMENALAB = DataAvto.Recordset!SMENALAB
            DataArch.Recordset!BRIGLAB = DataAvto.Recordset!BRIGLAB
            DataArch.Recordset!DATEIN8 = DataAvto.Recordset!DATEIN8
            DataArch.Recordset!DATA_VIZI8 = DataAvto.Recordset!DATA_VIZI8
            DataArch.Recordset!QUARSERT = DataAvto.Recordset!QUARSERT
            DataArch.Recordset!VESPODOK = DataAvto.Recordset!VESPODOK
           
           
            DataArch.Recordset!DATEVES1 = DataAvto.Recordset!DATEVES1
            DataArch.Recordset!TIMEVES1 = DataAvto.Recordset!TIMEVES1
            DataArch.Recordset!DATEVES2 = DataAvto.Recordset!DATEVES2
            DataArch.Recordset!TIMEVES2 = DataAvto.Recordset!TIMEVES2
            DataArch.Recordset!Brutto = DataAvto.Recordset!Brutto
            DataArch.Recordset!FIO_VES1 = DataAvto.Recordset!FIO_VES1
            DataArch.Recordset!Tara = DataAvto.Recordset!Tara
            DataArch.Recordset!Netto = DataAvto.Recordset!Netto
            DataArch.Recordset!FIO_VES2 = DataAvto.Recordset!FIO_VES2
           
           
            If Not (IsNull(DataAvto.Recordset!TIMEVES1)) Then
                             'заводская дата. Новые сутки начинаются после 8 утра
                If Hour(DataAvto.Recordset!TIMEVES1) >= 0 And Hour(DataAvto.Recordset!TIMEVES1) < 8 Then
                    DataArch.Recordset!DATEVES18 = DataAvto.Recordset!DATEVES1 - 1
                Else
                    DataArch.Recordset!DATEVES18 = DataAvto.Recordset!DATEVES1
                End If
            End If
           
           
            If Not (IsNull(DataAvto.Recordset!TIMEVES2)) Then
                     'заводская дата. Новые сутки начинаются после 8 утра
                If Hour(DataAvto.Recordset!TIMEVES2) >= 0 And Hour(DataAvto.Recordset!TIMEVES2) < 8 Then
                    DataArch.Recordset!DATEVES28 = DataAvto.Recordset!DATEVES2 - 1
                Else
                    DataArch.Recordset!DATEVES28 = DataAvto.Recordset!DATEVES2
                End If
            End If
       
           
            'сохраняем выехавшую машину в архиве
            DataArch.UpdateRecord
           
           
                'удаляем машину с территории
                DataAvto.Recordset.Delete
                DataAvto.Recordset.MoveFirst



DataAvto - текущий ДБФ, DataArch - архивный.
Просматривая архив, можно заметить для некоторых записей, что данные из текущего дбфа не перешли в архивный; вернее, перешли данные не всех ячеек.
Вопрос: может ли это быть связано с тем, что комп выполняет программу слишком быстро и операции фактически не успевают выполниться? Можно ли как-то получить подтверждение копирования, например, DataArch.Recordset!KOD = DataAvto.Recordset!KOD, а только потом продвигаться дальше?
Или такое предположение бредовое и надо искать причину потери данных в другом?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Слишком быстрое выполнение программы или ...?

Сообщение iGrok » 22.09.2009 (Вт) 16:44

Al Prad писал(а):Или такое предположение бредовое и надо искать причину потери данных в другом?

Бредовое.

Убери On Error Resume Next и сделай вместо него отлов и запись ошибок. Скорей всего при попытке копирования какого-то поля возникает ошибка, и оно пропускается.

Почему и отчего нужно смотреть уже "по месту", т.е. по результатам записи лога.
label:
cli
jmp label

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Слишком быстрое выполнение программы или ...?

Сообщение Al Prad » 23.09.2009 (Ср) 11:32

Решил попробовать вместо всего этого использовать INSERT INTO...

Редактирование:

INSERT INTO помогло. А дело было в том, что дбф используют несколько рабочих мест, а я сохранял в архив локальную необновленную запись. Рефреш перед сохранением помог :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing-бот и гости: 89

    TopList