Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Восстановить записи таблицы FoxPro (for Windows)   Найти похожие ветки 

 
Valeri ©   (2004-06-24 14:28) [0]

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


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

DbiUndeleteRecord


 
Anatoly Podgoretsky ©   (2004-06-24 14:34) [2]

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


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

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

Delphi5 ???


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

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


 
Valeri ©   (2004-06-24 14:46) [5]

Делаю так: (из 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


 
Valeri ©   (2004-06-24 14:47) [6]

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

TTable, DBTreeView


 
Valeri ©   (2004-06-24 14:51) [7]

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


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

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


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

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

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:56) [10]

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

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


 
Valeri ©   (2004-06-24 14:59) [11]

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


 
Valeri ©   (2004-06-24 15:13) [12]

делаю так:
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);

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


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


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

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


 
Valeri ©   (2004-06-24 15:33) [14]

Ура, помогло:
    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:37) [15]


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


 
Valeri ©   (2004-06-24 15:51) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
4-1086508984
GuAV
2004-06-06 12:03
2004.07.18
USB


1-1088979367
jktu
2004-07-05 02:16
2004.07.18
Как сделать свою функцию


3-1087487412
*Denis*
2004-06-17 19:50
2004.07.18
Blob поля


11-1077122347
DDA
2004-02-18 19:39
2004.07.18
Delete folder?


10-1021230720
jo frodo
2002-05-12 23:12
2004.07.18
переводы CORBA services