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

Вниз

Почему не удаляются записи из таблицы?   Найти похожие ветки 

 
alexander_ua   (2003-04-02 15:33) [0]

Проблема такая: при удалении записей из базы Paradox физически они не удаляются (я так понимаю, что лишь помечаются как удаленные), соответственно размер файла остается прежним. Подскажите, как все таки удалить записи?


 
Соловьев ©   (2003-04-02 15:38) [1]

Для Paradox:

DbiDoRestructure(DBHandle, 1, ?, nil, nil, nil, False); { см. dbiProcs.int }


 
AlexVit ©   (2003-04-02 15:38) [2]

Пример из хелпа для упаковки Paradox и dBASE таблиц:
"
Example 1: Pack a Paradox or dBASE table.

This example will pack a Paradox or dBASE table therfore removing already deleted rows in a table. This function will also regenerate all out-of-date indexes (maintained indexes). This example uses the following input:

PackTable(Table1)

The function is defined as follows:

// Pack a Paradox or dBASE table
// The table must be opened execlusively before calling this function...
procedure PackTable(Table: TTable);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
// Make sure the table is open exclusively so we can get the db handle...
if not Table.Active then
raise EDatabaseError.Create("Table must be opened to pack");
if not Table.Exclusive then

raise EDatabaseError.Create("Table must be opened exclusively to pack");

// Get the table properties to determine table type...
Check(DbiGetCursorProps(Table.Handle, Props));

// If the table is a Paradox table, you must call DbiDoRestructure...
if Props.szTableType = szPARADOX then begin
// Blank out the structure...
FillChar(TableDesc, sizeof(TableDesc), 0);
// Get the database handle from the table"s cursor handle...

Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
// Put the table name in the table descriptor...
StrPCopy(TableDesc.szTblName, Table.TableName);
// Put the table type in the table descriptor...
StrPCopy(TableDesc.szTblType, Props.szTableType);
// Set the Pack option in the table descriptor to TRUE...
TableDesc.bPack := True;
// Close the table so the restructure can complete...
Table.Close;
// Call DbiDoRestructure...

Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
end
else
// If the table is a dBASE table, simply call DbiPackTable...
if (Props.szTableType = szDBASE) then
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
else
// Pack only works on PAradox or dBASE; nothing else...
raise EDatabaseError.Create("Table must be either of Paradox or dBASE " +

"type to pack");

Table.Open;

end;
"


 
alexander_ua   (2003-04-02 15:51) [3]

так как же мне все-таки программно это сделать?


 
Соловьев ©   (2003-04-02 15:53) [4]


> так как же мне все-таки программно это сделать?

а вверху тебе наверное заклинания написали, которые надо произнести вслух при попытке удаления записи...


 
alexander_ua   (2003-04-02 15:54) [5]

но ведь packtable - это не делфишная функция...


 
Anatoly Podgoretsky ©   (2003-04-02 15:56) [6]

Ну так и что, в программе обычно много не Дельфовых функций и это как то не мешает ей работать.


 
Соловьев ©   (2003-04-02 15:58) [7]


> это не делфишная функция...

вообще-то нет делфийских функций. Есть функции написанные на Object Pascal


 
alexander_ua   (2003-04-02 16:04) [8]

так я узнаю, где ее выкопать?


 
Соловьев ©   (2003-04-02 16:06) [9]


> Соловьев © (02.04.03 15:38)

uses + DBIProc;


 
alexander_ua   (2003-04-02 16:10) [10]

а где взять этот модуль? он ведь не в стандартных?


 
Соловьев ©   (2003-04-02 16:12) [11]

сорри +DBiProc s


 
alexander_ua   (2003-04-02 16:19) [12]

в uses указал dbiprocs, но на packtable говорит, что undeclared identifier


 
Соловьев ©   (2003-04-02 16:27) [13]


> Соловьев © (02.04.03 15:38



 
alexander_ua   (2003-04-02 16:32) [14]

то есть функцию я должен сам описать?


 
Соловьев ©   (2003-04-02 16:42) [15]


> то есть функцию я должен сам описать?

это если


> AlexVit © (02.04.03 15:38


а если

> Соловьев © (02.04.03 15:38

то нет.


 
Anatoly Podgoretsky ©   (2003-04-02 16:45) [16]

alexander_ua (02.04.03 16:32)
Если packtable то да, если dbiDoRestructure то нет, уже описана


 
alexander_ua   (2003-04-02 17:10) [17]

сделал, прога отработала, но результата не видно. все осталось так, как и было


 
Соловьев ©   (2003-04-02 17:13) [18]

код?
как проверяешь что осталось как и было? может F5?


 
alexander_ua   (2003-04-02 17:16) [19]

вышеуказанная процедура отработала для моей таблицы, но ее размер ни на байт не стал меньше


 
Соловьев ©   (2003-04-02 17:20) [20]

код?
может и паковать то нечего.


 
alexander_ua   (2003-04-02 17:24) [21]

Все получилось! Огромнейшее всем спасибо, очень благодарен!!!



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

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

Наверх




Память: 0.51 MB
Время: 0.017 c
14-67478
Style
2003-04-03 11:02
2003.04.21
Вот пошутил над Юзверями 1-ого апреля :)


6-67419
blast
2003-02-28 15:01
2003.04.21
Как ПРОГРАММНО расшарить диски под WinNT??


3-67136
ЛешаК
2003-04-03 06:58
2003.04.21
Explicit Transactions в хранимых процедурах.


6-67411
HDD
2003-02-27 16:41
2003.04.21
Помогите пожалуйста!


1-67285
Smereka
2003-04-05 15:10
2003.04.21
вывод символов в Memo