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

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

Восстановить записи таблицы FoxPro (for Windows) [D5, dBase, FoxPro]


Valeri ©   (2004-06-24 14:28:00) 

Уважаемые мастера! Как известно, удалённые записи не удаляются в таблицах dBase, FoxPro, пока их не упакуешь. А вот восстановить их можно? (Средствами Делфи, естессно)


Valeri   (2004-06-24 15:51:00) [1]

Ты маги чародей!
Большущее спасибо!


Соловьев   (2004-06-24 15:37:00) [2]


var
 Pr : RECProps;
begin
 dbiGetRecord(Table1.Handle, dbiNoLock, NIL, @Pr);
 if Pr.bDeleteFlag then
   //удалена
 else
   //нет


Valeri   (2004-06-24 15:33:00) [3]

Ура, помогло:
    dbiSetProp(hDBIObj(Catalog.Handle), curSOFTDELETEON, 1);
    Catalog.Refresh;
    Catalog.First;
    while not Catalog.Eof do
    begin
         Catalog.Edit;
         DbiUndeleteRecord(Catalog.Handle);
         Catalog.Next;
    end;

Только хотелось бы узнать, быть может можно не в лоб восстанавливать все записи, а сначала узнать, помечена ли она на удаление? (имеется ввиду условие перед DbiUndeleteRecord(Catalog.Handle);)


Соловьев   (2004-06-24 15:15:00) [4]


> Пробовал закомментировать первые две строки - все равно
> говорит, что удаленных нет.

[9] востанавливает запись если она удалена. А ты в [12] - пытаешся восстановить запись, которая не удалена. Если ты хочешь восстановить все удаленные записи а не одну и спользуй цыкл с условием.


Valeri   (2004-06-24 15:13:00) [5]

делаю так:
dbiSetProp(hDBIObj(Catalog.Handle), curSOFTDELETEON, 1);
Catalog.Refresh;
if Catalog.State=dsBrowse then Catalog.Edit;
if  DbiUndeleteRecord(Catalog.Handle) = 0 then
  Catalog.Refresh
else
  MessageDlg('Record NOT deleted',mtError,[mbOK],0);

записи становятся видимыми, говорит, что удаленных нет.
после открытия и закрытия таблицы записи снова не видны.
Пробовал закомментировать первые две строки - все равно говорит, что удаленных нет.


Valeri   (2004-06-24 14:59:00) [6]

Спасибо, попробую


Соловьев   (2004-06-24 14:56:00) [7]

но перед этим надо сделать удаленные записи видимыми

procedure TForm1.Button1Click(Sender: TObject);
begin
 dbiSetProp(hDBIObj(Table1.Handle), curSOFTDELETEON, 1);
 Table1.Refresh;
end;


Соловьев   (2004-06-24 14:54:00) [8]

вот надыбал пример

procedure TForm1.Button3Click(Sender: TObject);
begin
 if Table1.State=dsBrowse then Table1.Edit;
 if  DbiUndeleteRecord(Table1.Handle) = 0 then
   Table1.Refresh
 else
   MessageDlg('Record NOT deleted',mtError,[mbOK],0);
end;


Соловьев   (2004-06-24 14:52:00) [9]

http://www.rusdoc.ru/material/lang/other/idapi.shtml


Valeri   (2004-06-24 14:51:00) [10]

->Valeri ©   (24.06.04 14:46) [5]
Непонятно, каких-таких soft deletes'ов я не имею?
Удаленные записи есть, не упакованы.


Valeri   (2004-06-24 14:47:00) [11]

->Соловьев ©   (24.06.04 14:45) [4]
->нет, тебя про компоненты спросили.

TTable, DBTreeView


Valeri   (2004-06-24 14:46:00) [12]

Делаю так: (из Help'а)
var
 CProps: CurProps;
begin
 Check(DbiGetCursorProps(Catalog.Handle, CProps));
 // Raise an EDBEngineError exception if the table is not dBASE
 if (StrIComp(CProps.szTableType, szDBASE) <> 0) then
   raise EDBEngineError.Create(DBIERR_NOTSUPPORTED);
 // Raise an EDatabaseError exception if the cursor does not have soft deletes on
 if (CProps.bDeletedOn = False) then
   raise EDatabaseError.Create('Soft deletes is not on');

 Check(DbiUndeleteRecord(Catalog.Handle));
end;

Выдаёт: Soft deletes is not on


Соловьев   (2004-06-24 14:45:00) [13]

нет, тебя про компоненты спросили.


Valeri   (2004-06-24 14:36:00) [14]

->Anatoly Podgoretsky ©   (24.06.04 14:34) [2]
->А какие у тебя средства доступа

Delphi5 ???


Anatoly Podgoretsky   (2004-06-24 14:34:00) [15]

А какие у тебя средства доступа


Соловьев   (2004-06-24 14:32:00) [16]

DbiUndeleteRecord


Наверх

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