![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Физическое удаление записей [D5, dBase, FoxPro, Paradox]
Tumcoat © (2003-10-14 08:52:00)
Уважаемые мастера, подскажите, как можно физически удалять записи из базы, а не помечать их как удаленные?
Я знаю что для полной (физической) очистки таблицы есть команда EmptyTable, а как удалить всего одну строку (физически, чтоб места не занимала)?
Заранее спасибо.
Izyum (2003-10-15 09:39:00) [1]
> Tumcoat © (15.10.03 01:39) [12]
Сорри, ошибка вкралась.
Просто где-то рядом какой-то студент задавал вопрос про ФоксПро и институтское задание, вот и попутал.
Tumcoat (2003-10-15 09:12:00) [2]
Да проверил, работает, всем спасибо!!!
Danilka (2003-10-15 08:35:00) [3]
[17] Tumcoat © (15.10.03 08:18)
Значит, в твоей программе где-то еще открыта эта таблица, и программа не может ее открыть в эксклюзивном (монопольном (с)1ц) режиме, вот-это обламывается:
Table1.Exclusive := True;
Table1.Active := True;
Tumcoat (2003-10-15 08:18:00) [4]
> Danilka © (15.10.03 08:08) [16]
Ладно, закрыл Дельфи, ошибка осталась.
Danilka (2003-10-15 08:08:00) [5]
[15] Tumcoat © (15.10.03 08:03)
Угу, и в дельфях была открыт этот проект, в котором была открыта эта таблица: table1.active := true;
Вот они и два коннекта.
Tumcoat (2003-10-15 08:03:00) [6]
> Anatoly Podgoretsky © (15.10.03 07:39) [14]
> Она у тебя открыта в программе и возможно одновременно в
> среде.
На момент проверки программы на компе были запущены только Windows Commander и Delphi.
Anatoly Podgoretsky (2003-10-15 07:39:00) [7]
Она у тебя открыта в программе и возможно одновременно в среде.
Tumcoat (2003-10-15 04:19:00) [8]
> Dr.sam (14.10.03 09:41) [5]
Код попробовал. Не получается. Говорит, что таблица занята, хотя вроде все проверил, и такого быть не должно.
Tumcoat (2003-10-15 01:39:00) [9]
> Izyum © (14.10.03 10:29) [11]
>
> Дык никто и не спорит, но вот в чем вопрос: зачем мучить
> студентов (а изначально вопрос был о какой-то лабе) изучением
> технолгий, которые они не будут использовать в реальной
> жизни? Разве только если пойдут работать в какуюто бюджетную
> организацию, где софт написан лет 20 назад, а переход на
> новые платформы считается нецелесообразным по многим причинам,
> начиная от банального финансирования до неподготовленности
> персонала:)
Какая лаба!?? Какие студенты!!?? Я уже два года как институт закончил (и забыл о нем как о кошмарном сне)!
Просто я работаю как раз в
> в какой-то бюджетной организации, где софт написан лет 20
> назад, а переход на новые платформы считается нецелесообразным
> по многим причинам, начиная от банального финансирования
> до неподготовленности персонала
Вот так-то !!! :-))))
> Dr.sam
Спасибо за код, сегодня попробую.
Izyum (2003-10-14 10:29:00) [10]
> Danilka © (14.10.03 10:26) [10]
> [7] Izyum © (14.10.03 10:09)
> Думаю, это правильная тенденция - переход на скуль-серверные
> технологии, где нет такого понятия.
Дык никто и не спорит, но вот в чем вопрос: зачем мучить студентов (а изначально вопрос был о какой-то лабе) изучением технолгий, которые они не будут использовать в реальной жизни? Разве только если пойдут работать в какуюто бюджетную организацию, где софт написан лет 20 назад, а переход на новые платформы считается нецелесообразным по многим причинам, начиная от банального финансирования до неподготовленности персонала:)
Danilka (2003-10-14 10:26:00) [11]
[7] Izyum © (14.10.03 10:09)
Думаю, это правильная тенденция - переход на скуль-серверные технологии, где нет такого понятия.
Izyum (2003-10-14 10:15:00) [12]
> Anatoly Podgoretsky © (14.10.03 10:12) [8]
> Теримн может и не знаю,
ИМХО к Вам этот пост не относится:)
Anatoly Podgoretsky (2003-10-14 10:12:00) [13]
Теримн может и не знаю, но для таких Tumcoat дал подробнейшее ниже описание процесса и задачи. Не должно было возникать проблемы между упаковкой и удалением.
Izyum (2003-10-14 10:09:00) [14]
> Anatoly Podgoretsky © (14.10.03 09:41) [6]
> AbrosimovA © (14.10.03 09:38) [4]
> Ты хоть бы вопрос прочитала, он все таки про упаковку, а
> не про удаление.
Не так много современных программистов знают воще термин "упаковка" таблицы:)
Anatoly Podgoretsky (2003-10-14 09:41:00) [15]
AbrosimovA © (14.10.03 09:38) [4]
Ты хоть бы вопрос прочитала, он все таки про упаковку, а не про удаление.
Dr.sam (2003-10-14 09:41:00) [16]
Упаковка таблицы (удаление всех помеченных на удаление записей)
В uses надо указать DbiTypes, DbiErrs, DbiProcs
procedure TForm1.BitBtn15Click(Sender: TObject);
var
Error: DbiResult;
ErrorMsg: String;
Special: DBIMSG;
begin
table1.Active := False;
try
Table1.Exclusive := True;
Table1.Active := True;
Error := DbiPackTable(Table1.DBHandle, Table1.Handle, nil, szdBASE, True);
Table1.Active := False;
Table1.Exclusive := False;
finally
Table1.Active := True;
end;
case Error of
DBIERR_NONE:
ErrorMsg := "Упаковка таблицы выполнена успешно";
DBIERR_INVALIDPARAM:
ErrorMsg := "Указанное имя таблицы или указатель на имя таблицы " +"равен NULL";
DBIERR_INVALIDHNDL:
ErrorMsg := "Указанный дескриптор базя данных или курсора " +
"неравен или равен NULL";
DBIERR_NOSUCHTABLE:
ErrorMsg := "Таблица с таким именем не существует";
DBIERR_UNKNOWNTBLTYPE:
ErrorMsg := "Не известный тип таблицы";
DBIERR_NEEDEXCLACCESS:
ErrorMsg := "Таблица открыта не в эксклюзивном режиме";
else
DbiGetErrorString(Error, Special);
ErrorMsg := "[" + IntToStr(Error) + "]: " + Special;
end;
MessageDlg(ErrorMsg, mtWarning, [mbOk], 0);
end;
AbrosimovA (2003-10-14 09:38:00) [17]
Я делал к примеру так:
Table1.First;//Переход на начало базы
Table1.MoveBy(2);//Переход на 3-ю запись(строку)
Table1.Delete;//Удаление выбранной(текущей) записи
Table1.First;//Переход опять на начало и одновременно
принять изменения
Всё работает.
Anatoly Podgoretsky (2003-10-14 09:23:00) [18]
dbiPackTable c примерами
Tumcoat (2003-10-14 09:10:00) [19]
> sniknik © (14.10.03 09:01) [1]
> только для всего файла
> и всех помеченных на удаление записей.
Тогда плиз подскажи хоть как удалить все помеченные на удаление записи?
sniknik (2003-10-14 09:01:00) [20]
а для одной строки такой возможности нет (только если сам файл править будеш как текстовый), только для всего файла и всех помеченных на удаление записей.