А как бы мне заменить dbf и процессе работы?

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

А как бы мне заменить dbf и процессе работы?

Сообщение Andrev » 06.09.2006 (Ср) 9:58

Проблема: на форме есть Data контрол. Он работает с дбф файлом. Принажатии на кнопку из интернета скачивается обновленный файл в архиве, data1.recordsource обнуляю, файл разархивируется, старый файл прибивается, data1.recordsource ставлю на обновленный файл. Почему-то периодически (то есть не всегда) после data1.refresh вылетает сообщение "Microsoft Jet engine could not find the object". Перед рефрешем ставил doevents. Не помогло. Чем лечить? Посоветуйте.
В этой жизни нет ничего невозможного. Если у вас что-то не получается, значит, вы что-то делаете не так.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.09.2006 (Ср) 10:12

Код в студию! Предварительный диагноз, файл не успевает загрузиться видимо
Весь мир матрица, а мы в нем потоки байтов!

Andrev
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 19.01.2005 (Ср) 9:22
Откуда: Kursk

Сообщение Andrev » 06.09.2006 (Ср) 10:16

Вот:
Код: Выделить всё
hOpen = InternetOpen("Nothing", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, FTP_Host, INTERNET_DEFAULT_FTP_PORT, FTP_Login, FTP_pwd, INTERNET_SERVICE_FTP, IIf(PassiveConnection, INTERNET_FLAG_PASSIVE, 0), 0)
If hConnection = 0 Then
MsgBox "Не могу соединиться с сервером", vbCritical, "Сервер недоступен"
Else
sOrgPath = String(MAX_PATH, 0)
FtpGetCurrentDirectory hConnection, sOrgPath, Len(sOrgPath)
status.Caption = "Подождите. Идет прием файла..."
DoEvents
FtpGetFile hConnection, "clients.dbf", App.path & "\clients.dbf", False, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0
If FtpGetFile(hConnection, "price.rar", App.path & "\price.rar", False, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0) Then
  status.Caption = "Новый прайс принят."
  InternetCloseHandle hConnection
  InternetCloseHandle hOpen
  DoEvents
  Data1.RecordSource = ""
  Data1.Refresh
  Kill App.path & "\newprice.dbf"
  Shell App.path & "\rar.exe e " & App.path & "\price.rar " & App.path & " -y"
  DoEvents
Else
  MsgBox "Новый прайс не принят.", vbCritical, "Не удается принять файл"
End If
End If
DoEvents

Data1.DatabaseName = App.path & "\"
Data1.RecordsetType = 2
DoEvents
Data1.RecordSource = "select count(*) from newprice"
DoEvents
Data1.Refresh

И вот после Data1.Refresh вылетает ошибка. Опять же повторюсь - она может вылетать, а может и не вылетать (но такое бывает редко)...
В этой жизни нет ничего невозможного. Если у вас что-то не получается, значит, вы что-то делаете не так.

S397
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 02.12.2005 (Пт) 13:31

Сообщение S397 » 06.09.2006 (Ср) 11:40

Код: Выделить всё
Shell App.path & "\rar.exe e " & App.path & "\price.rar " & App.path & " -y"

Не успевает отработать, программа продолжает выполнятся
нужно что-то типа этого:
Код: Выделить всё
Const PROCESS_ALL_ACCESS& = &H1F0FFF
Const STILL_ACTIVE& = &H103&
Const INFINITE& = &HFFFF


Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Function IsRuning(ByVal lProgID As Long) As Long
    Dim lExitCode As Long
    Dim hdlProg As Long
   
    hdlProg = OpenProcess(PROCESS_ALL_ACCESS, False, lProgID)
    GetExitCodeProcess hdlProg, lExitCode
   
    Do While lExitCode = STILL_ACTIVE&
        DoEvents
        GetExitCodeProcess hdlProg, lExitCode
    Loop
    CloseHandle hdlProg
    IsRuning = lExitCode
End Function

и
Код: Выделить всё
    Dim iProg As Long
   
    iProg = Shell(App.path & "\rar.exe e " & App.path & "\price.rar " & App.path & " -y")
    Do While IsRuning(iProg): DoEvents: Loop

Andrev
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 19.01.2005 (Ср) 9:22
Откуда: Kursk

Сообщение Andrev » 06.09.2006 (Ср) 11:45

Алилуйя!
Помогло, спасибо.
В этой жизни нет ничего невозможного. Если у вас что-то не получается, значит, вы что-то делаете не так.


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

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

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

    TopList