Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.011 c
14-67507
michael_b
2003-04-03 20:45
2003.04.21
Где взять Кнут 3 том


3-67162
K-Sergey
2003-04-03 13:15
2003.04.21
Как сделать ввод юзера и пассворда при обращении к базе?


1-67383
Гость
2003-04-10 12:08
2003.04.21
Число строк в Memo1


3-67116
sergey32
2003-04-02 15:36
2003.04.21
ADOConnection при закрытии приложения


3-67178
AlexRu
2003-04-03 16:26
2003.04.21
Удаление данных в DBGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский