Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Просмотр и восстановление "удаленных" записей в DBF таблицах [D7, dBase, FoxPro]


Страницы:   1 2 3 4

АМБ ©   (2005-07-18 11:15:00) 

Как организовать просмотр помеченных на удаление записей в DBF таблице? Т.е. сначала, записи обрабатываются tblDBF1.Delete; и становятся невидимы в DBGrid-е. Как сделать их видимыми, да еще и другим цветом, или как-то еще их выделить, а затем, выбрав какую-нибудь запись - восстановить ее, т.е. снять пометку на удаление.


ANB   (2005-07-21 14:57:00) [41]


> Anatoly Podgoretsky ©   (21.07.05 14:52) [38]
- дык я не против. Я ж написал ИМХО. Может ему легче будет в моем коде разобраться. Кстати, я отправил, а спасибо нету . . .


Anatoly Podgoretsky   (2005-07-21 14:52:00) [42]

ANB ©   (21.07.05 12:50) [31]
Нафиг, функция из БДЕ нормально работает.


ANB   (2005-07-21 14:34:00) [43]

А коли имеем, номер записи вполне можно оттуда выдернуть.


ANB   (2005-07-21 14:33:00) [44]


> sniknik ©   (21.07.05 14:14) [34]
- да там всего 18 Кб. А в обработчике раскраски разве мы не имеем доступа к полям строки, которую красим ?


АМБ   (2005-07-21 14:16:00) [45]


> ANB

Жду с нетерпением...:о)


sniknik   (2005-07-21 14:14:00) [46]

> По исходникам разберешься
терзают меня смутные сомнения. ;о)) человек с выходным параметром единствнной функции в 2 строчки разобратся не может. а ты ему исходники... на сколько строк? ;)

к тому же там тоже вылезет проблема связи записи в TTable с записью в файле. просто уметь читать не самое главное.


ANB   (2005-07-21 13:56:00) [47]

Могу переслать модуль. По исходникам разберешься и сделаешь свой вариант. Модуль умеет читать записи.


АМБ   (2005-07-21 13:49:00) [48]


> ANB

Да... Теоретически выглядит все понятно. Но как считывать 1-й байт записи? Подскажите...


ANB   (2005-07-21 12:50:00) [49]

Самый тупорылый, но самый надежный способ - читать запись напрямую из файла. Если в первой байте записи *,  то она удалена, если пробел, то нет. ИМХО.


sniknik   (2005-07-21 12:46:00) [50]

> А у меня функция DELETE(tblDBF) всегда True?!?!?!?
прочитай [27] внимательно (похоже правдв ;), и смени событие.


АМБ   (2005-07-21 12:14:00) [51]

А у меня функция DELETE(tblDBF) всегда True?!?!?!? При прохождении Debug-ером.
Хотя в таблице есть и удаленные и не удаленные записи.


sniknik   (2005-07-21 11:50:00) [52]

> в каком случае функция DELETE(tblDBF) выдают True
если запись удалена.


sniknik   (2005-07-21 11:47:00) [53]

ну код тут явно бракованный... ;о)) но у меня сомнения в том что данный подход вообще работоспособен, даже если его написать правильно (с else и вообще... ;о)).
дело в том, что отрисовка работает через даталинк (данные получает для нее), а она использует ненавигационные методы работы с таблицей, т.е. для получения данных записи делается не Next, а "Внутренний указатель" + 1; ну чтото вроде этого. неохота "углублятся" в тему.
вот. и если это так то BDE будет не в курсе всех этих дел, что там "навернула" его обертка (TTable), рискуем получать неверные данные, и как следствие "неопределенно пятнистый грид".
ну вот например, что будет возвращено при BOF = true? реально указатель "за гридом" на "до первой записи" а в гриде в это время рисуется первая строка (нет строки BOF)...

ну вот, правильнее определять удалена запись или нет в событии где реально определена текущая запись (и в BDE и TTable одна и та же). например в onCalcFields... там вычисляемому полю присваивать значение, ну "Удалено" к примеру, а в отрисовке уже для условия использовать его (если уж действительно необходимо выделять цветом).

p.s. сугубо имхо естественно. BDE это не мой "конек". поэтому и пояснение хромает.. не, оно хорошее. только хромает. ;о)) (© винни пух)


АМБ   (2005-07-21 11:24:00) [54]

Хорошо:::(((. Можете мне сказать Anatoly Podgoretsky, в каком случае функция DELETE(tblDBF) выдают True, а в каком - False?


Anatoly Podgoretsky   (2005-07-21 10:49:00) [55]

А что не работает, я глубоко анализировать твой код не буду, поскольку ты сам не приложил никаких усилий для обрисовки проблемы не работоспособности. Могу скажать у тебя отсутсвует блок ELSE


АМБ   (2005-07-21 10:26:00) [56]

Уважаемый, Anatoly Podgoretsky (или кто-нибудь). Ну подскажите, пожалуйста. Почему не работает, как надо, следующий код:

procedure TfrmMain.dbgDBFDrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 if DELETED(tblDBF) then
   begin
     TDBGrid(Sender).Canvas.Brush.Color := $00ff00;
     TDBGrid(Sender).Canvas.Font.Color := $0000ff;
     TDBGrid(Sender).Canvas.FillRect(Rect);
     TDBGrid(Sender).Canvas.TextOut(Rect.Left,Rect.Top,Column.Field.Text);

     IF  gdSelected   IN State Then
       Begin
        TDBGrid(Sender).Canvas.Brush.Color:= clHighLight;
 TDBGrid(Sender).Canvas.Font.Color := clHighLightText;
    End;

     TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
   end;

end;

function DELETED(Table:TTable): Boolean;
var
Prop : RECProps;
begin
dbiGetRecord(Table.Handle, dbiNoLock, nil, @Prop);
Result := Prop.bDeleteFlag;
END;

Напоминаю. Необходимо, чтобы в DBGrid-e удаленные записи были выделены цветом. Но сейчас цветом выделяются все записи. Не зависимо от того включен режим показа удаленных записей или нет.
Извиняюсь по поводу моей "несообразительности". :о((((


Anatoly Podgoretsky   (2005-07-20 16:26:00) [57]

Перебирать не надо, это делает dbgDBFDrawColumnCell, а результат используй в IF


АМБ   (2005-07-20 14:50:00) [58]

Уважаемый,
> Anatoly Podgoretsky

Подскажите пожалуйста, Ваша функция она показывает свойство bDeleteFlag текущей записи? Т.е. можно перебирать записи и  у каждой проверять это свойство и реагировать не это. Или Ваша функция показывает что в таблице есть записи, помеченные на удаление. Но мои пробы показали, что Ваша функция показывает True, даже после физического удаления записей. Так как с ней можно работать?
Скажите пожалуйста.


Anatoly Podgoretsky   (2005-07-19 19:37:00) [59]

Результат функции BOOLEAN


АМБ   (2005-07-19 15:03:00) [60]

Даже не знаю, что и сказать... Я конечно, извиняю. Но в хелп я и лазил и смотрел, анализировал и пробовал, но не получилось. Потому и обратился за помощью. Может кто знает? Из тех, кто практически уже проходил этот вопрос.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо