** avtoritet |
Отправлено: 14.05.2005, 23:15 |
|
Не зарегистрирован
|
У меня dbase IV базы подключены к приложению( индексные файлы .MDX). Альянса нет, а дерижирует базами TTable(Т1). Значит, делаю так:
T1->Delete(); — вроде все удаляет, но по сути то лишь удаленная запись помечается как "помеченная на удаление"(что-то вроде 1С:предпр.), и Т1 с нею не работает.
Вопрос таков, как мне удалить навсегда?
|
|
** avtoritet |
Отправлено: 15.05.2005, 14:54 |
|
Не зарегистрирован
|
Ну парни, мжет я вопрос задал некоректно? Или просто никто не хочет поделиться своими знаниями? |
|
sunower |
Отправлено: 15.05.2005, 15:12 |
|
Не зарегистрирован
|
да это и мне интересно, помогите парни |
|
** avtoritet |
Отправлено: 15.05.2005, 18:09 |
|
Не зарегистрирован
|
Нас таких уже двое(я и суновер)! Разве никто больше не замечал как у них ДБэйсы толстеют?
Откликнитесь, пожалуйста кто-нибудь! |
|
Vlad |
Отправлено: 16.05.2005, 07:47 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Для баз DBF принято сразу неудалять запись, а только помечать,что она удаленная. Для физического удаления используется pack() и всю базу грохнуть zap(). |
|
Vlad |
Отправлено: 16.05.2005, 07:50 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
В догонку : открываешь help и читаешь.....
Delphi syntax
function DbiPackTable (hDb: hDBIDb; hCursor: hDBICur; pszTableName: PChar; pszDriverType: PChar; bRegenIdxs: Bool): DBIResult stdcall;
function DbiDeleteRecord (hCursor: hDBICur; pRecBuf: Pointer): DBIResult stdcall;
и так далее.......... |
|
** avtoritet |
Отправлено: 16.05.2005, 13:02 |
|
Не зарегистрирован
|
Спасибо Влад!
Попробую ... |
|
** avtoritet |
Отправлено: 16.05.2005, 14:28 |
|
Не зарегистрирован
|
to Vlad.
Я наверное немного туп. Но у меня нечерта не получается!
Работаю в БСБ 6. Методов pack() and zap() вообщее нету.
Не знаю ...
Может подкинешь кусочик кода? |
|
Vlad |
Отправлено: 16.05.2005, 16:56 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Естественно что нету, если работаешь через bde, то читаешь хелп bde и юзаешь функции bde. Help называется -Borland Database engine online reference.
p.s. Код завтра кину. у меня на работе только x++; |
|
Guest |
Отправлено: 16.05.2005, 17:13 |
|
Не зарегистрирован
|
CODE |
//---------------------------------------------------------------------------
// Добавление метода Pack
//---------------------------------------------------------------------------
bool __fastcall TFoxTable::Pack (void)
{
bool ret;
if (!DbUseLock()) return false; // Блокировать Active = false; Exclusive = true; Active = true;
ret = true;
try { Check (DbiPackTable (DBHandle, Handle, NULL, NULL, false)); }
catch (Exception &exep)
{ ret = false;
ShowMessage (AnsiString("FoxTable->DbPACK ERROR\n") + exep.Message);
}
return ret;
}
|
|
|
Vlad |
Отправлено: 17.05.2005, 07:45 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Как обещал, но не забудь подключить bde.hpp
Для работы с dbf лучше Apollo,чем bde
void __fastcall TPackForm::Button1Click(TObject *Sender)
{
int i=0;
CURProps Props;
//****
покоцано
//*****
DbiGetCursorProps(Table1->Handle, Props);
/*
*/
DbiPackTable(Table1->DBHandle, Table1->Handle, NULL, NULL, TRUE);
/* покоцано */
}
|
|
Pan-SQL |
Отправлено: 18.05.2005, 07:37 |
|
Не зарегистрирован
|
Попробуй выполнить запрос SQL на удаление: |
|
** avtoritet |
Отправлено: 19.05.2005, 03:30 |
|
Не зарегистрирован
|
to pan-sql.
Запрос запросом! Обычный штоли? Дак, так тоже не катит. Может я твою мыслю не подхвватил? |
|
Vlad |
Отправлено: 19.05.2005, 07:48 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Какие SQL запросы, ?! , чего муть всякую гнать если dbf база под bde, вызвал функцию в монопольном режиме и паканул таблицу. А у кого не получается , да откройте вы dbe.hpp и посмотрите сколько там всяких функций....при минимальном знании английского и то можно догадаться какие что делают.
Удаление записей в dbe на dbf талице:
1. Помечается записись на удаление.
2. Затем таблица открывается в монопольном режиме и пакуется
выше приведенными функциями... |
|