Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.034 c
14-1088169312
Samael6
2004-06-25 17:15
2004.07.18
Вопрос по РНР. Может кто-нибудь помочь?


10-1020840236
Олег Лаукарт
2002-05-10 11:36
2004.07.18
Глюк в TSocketConnection и в клиенте (Midas, DCOM)


1-1089216701
Johnny Raw
2004-07-07 20:11
2004.07.18
про TCanvas


1-1089196264
имя
2004-07-07 14:31
2004.07.18
Как в программе получить path если извесно только имя алиаса?


1-1088683954
Plt
2004-07-01 16:12
2004.07.18
Выполнение запроса с помощью TOracleQuery (DOA) в потоке.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский