Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизВосстановить записи таблицы 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c