![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Восстановить записи таблицы 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