| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > удаление данных |
| Автор: OlegFPM 4.5.2004, 12:13 |
| Народ подскажите как физически удалить данные с таблицы Paradox. Команда Table.delet срабатывает, но надо чтобы физически данные удалялись из файла. Как я понимаю надо использовать упаковку, но как ее реализовать без unit BDE. |
| Автор: Maverick 4.5.2004, 12:29 |
| А как вы, простите без BDE с Paradox соединились? Добавлено @ 12:37 Это через БДЕ... прям из хелпа выдрал... // Pack a Paradox or dBASE table // The table must be opened exclusively 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; |
| Автор: Maverick 4.5.2004, 12:39 |
| Ключевая функция DbiPackTable.... поищи в хелпе.... |
| Автор: Akella 5.5.2004, 08:17 |
| Насколько я знаю, то записи из таблиц Paradox удаляются навсегда, а не так как dBase (только помечаются). Я даже не понимаю, что дает упаковка Paradox-таблиц, может просто сбор мусора? |
| Автор: Maverick 5.5.2004, 08:38 | ||
Ну вот это же из хелпа дельфийского.... Если зажигаются звезды. значит, это кому-нибудь нужно.... |
| Автор: x77 5.5.2004, 08:41 |
| dsergey, записи удаляются, но место, где они были остаётся. упаковка просто уберёт эти пустые места. |
| Автор: Akella 6.5.2004, 14:51 |
| Я заполнил несколько таблиц Paradox данными (по несколько тысяч записей), затем сделал удаление. "Снял" размеры. Выполнил упаковку. "Снял" размеры. Никакой разницы. |
| Автор: Maverick 6.5.2004, 15:04 |
| Попробуй вызвать RecNo последней записи после удаления... давно было,но я как-то был в шоке, когда таблица с 2 записями выдала 6 000 с чем-то номером последней записи. После этого я начал их паковать.... |