problem s .DBF tablici :(

4 отговора 119 прегледа
#1

problem s .DBF tablici :(

Molq help za slednoto:
Ot skoro se zanimavam s Delphi i iskam da napavq
edna malka programa, koqto polzva danni ot .DBF fail,
koito se polzva i ot edna dosovska programa.
Problema e, 4e moje faila da e otvoren za polzvane samo
ot dosovskata programa i v delphi se generira izkliu4enie.
Napisal sym slednoto:

While table.Active = false do begin
try
Table.Active := True;
except
end;
end;

Tova raboti, samo 4e dokato se iz4akva faila da se osvobodi,
prilojenieto ne reagira i izglejda kato uvisnalo.
Nqkakva ideq kak moga da re6a problema?

Отговор
в отговор на _stefan_ #2

Re: problem s .DBF tablici :(

Най-добре въобще не ползвай ДОС- приложението - ако можеш или не прави подобно нещо - да чакаш докато се освободи таблицата - между другото - след като правиш почти безкраен цикъл - е нормално да ти е "увиснало" приложението ;-)))

Ако все пак не можеш да направиш компромис - има два подхода - единия - да отделиш кода в нишка и там да правиш проверките - обаче не съм сигурен дали ще можеш да го направиш. Другия е да сложиш Application.ProcessMessages - за да може програмата ти да "работи" докато чака в цикъла.
Май има и друга идея - някъде трябва да има функции които ОС връща състоянието на даден файл - дали е зает и дали може да бъде отворен за четене и запис - можеш да ползваш тях вместо да отваряш таблицата.

А бе най-добре си напиши нещо което да пуска ДОС програмата - да чака докато тя приключи и след това да ти стартира процеса който обработва данните.

---
Колкото повече, толкова повече.
Отговор
в отговор на _stefan_ #3

Oste edna vyzmojnost

Не ми е много ясна целта ти, но би могъл да спретнеш и следното:
Когато ти се наложи да ползваш таблицата през Win - изпълняваш тялото на твоя цикъл - функция, връщашта true-false.
Ако е false пускаш един таймер и периодично си проверяваш резултата от функцията.
При отрицателен резултат, ако решиш, на някой от пътите в таймера можеш да се откажеш и да уведом потребителя, че неговата работа няма да стане.
При положителен резултат - джиткаш си нататък.

Отговор
в отговор на NikB #4

Re: Oste edna vyzmojnost

Благодаря за предложенията.
Трябваше по-подробно да опиша ситуацията:
ДОС приложението не се стартира от компютъра, на който е БД и
няма как моята програма да контролира
кога е пуснато и кога не е. То ползва .DBF файла през шерната папка.
Та за моята програмка ми трябва някаква функция, която да
отваря файла, а ако е отворен в момента от ДОС да показва на
потребителя напр. "БД се използва, моля изчакайте..." докато се
освободи, но все пак приложението да не изглежда толкова "увиснало",
защото може и никой да не изчака :))

Пробвах с таймер и AfterOpen, само че става за една таблица, а в
случая трябва да отварям няколко различни таблици по гореописания
начин.
Каде трябва да се сложи Application.ProcessMessages ??????
Ако имате идеи моля помагайте....

Отговор
в отговор на _stefan_ #5

Re: Oste edna vyzmojnost

За ProcessMessages - в цикъла, ама на мен не ми харесва - питай фантома.
И какво пречи 100 таблици да си ги проверяваш по таймер (например със списък от таблици)
Въобще, използвай въображението си, а ако надхвърли знанията ти - тогава питай пак :)

Отговор