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

Вниз

Проблема при удалении данных из таблицы   Найти похожие ветки 

 
Jet ©   (2004-05-31 16:51) [0]

Есть код:
--
if (Form2.temp.RecordCount > 0 ) then
 begin
  Form2.temp.First;
  for i := 1 to Form2.temp.RecordCount do
   begin
    Form2.temp.Delete;
    Form2.temp.Next;
   end;
 end;

--
После выполнения пишет, что кол-во записей = 0, но в DB-viewere
показывает все записи, но только помеченные для удаления и физический размер файла прежний.
Как реально удалить записи из таблицы?


 
Vlad ©   (2004-05-31 16:52) [1]


> Jet ©   (31.05.04 16:51)  

DbiPackTable


 
Vlad ©   (2004-05-31 16:53) [2]


>   for i := 1 to Form2.temp.RecordCount do
>    begin
>     Form2.temp.Delete;
>     Form2.temp.Next;
>    end;

Так ты через одну удаляешь
а вот так все:
while not Form2.temp.Eof do Form2.temp.Delete


 
YurikGL ©   (2004-05-31 17:10) [3]

if (Form2.temp.RecordCount > 0 ) then
repeat
Form2.temp.Delete;
until Form2.temp.eof


 
Sandman25 ©   (2004-05-31 17:12) [4]

[3] YurikGL ©   (31.05.04 17:10)

Тогда уже либо
for I := 1 to RecordCount do
 Delete;
либо
while not Eof do
 Delete


 
Jet ©   (2004-05-31 17:17) [5]

Да delete не срабатывает, я ведь описал выше. А next забыл здесь стереть в проге без нее.
--
После выполнения пишет, что кол-во записей = 0, но в DB-viewere
показывает все записи, но только помеченные для удаления и физический размер файла прежний.
Как реально (физически) удалить записи из таблицы?


 
Anatoly Podgoretsky ©   (2004-05-31 17:21) [6]

А совет [1] не помог, а другого не будет, это единственный по укаковке, кроме персоздания таблиц с нуля.


 
Vlad ©   (2004-05-31 17:23) [7]


> Jet ©   (31.05.04 17:17) [5]

Delete срабатывает.
Если ты не знаком с работой DBF - так и скажи.
Записи не удаляются физически, они только помечаются к удалению.
Чтобы удалить их физически, нужно сделать упаковку таблицы.
Как ? Читай Vlad ©   (31.05.04 16:52) [1]


 
YurikGL ©   (2004-05-31 17:31) [8]

Vlad ©   (31.05.04 16:53) [2]

Через одну, он записи не удаляет, просто когда курсор доходит до конца, он удаляет каждый раз последнюю запись.


 
Vlad ©   (2004-05-31 17:35) [9]


> YurikGL ©   (31.05.04 17:31) [8]

Когда доходит до конца, свойство Eof принимает значение true и цикл прекращается


 
YurikGL ©   (2004-05-31 17:37) [10]


> >   for i := 1 to Form2.temp.RecordCount do
> >    begin
> >     Form2.temp.Delete;
> >     Form2.temp.Next;
> >    end;


И где здесь EOF?

:)


 
Anatoly Podgoretsky ©   (2004-05-31 17:40) [11]

YurikGL ©   (31.05.04 17:37) [10]

EOF здесь не нужен, могут быть конечно другие непрятности при работе в сети.


 
Курдль ©   (2004-05-31 17:42) [12]

А нехило бы объяснить, что такое Form2.temp!
И какая конечная цель?
Судя по декларации "dBase FoxPro" temp может быть TTable.
А судя по for i := 1 to Form2.temp.RecordCount do цель - очистка таблицы. Так может быть совершить Form2.temp.EmptyTable?


 
Vlad ©   (2004-05-31 17:43) [13]


> YurikGL ©   (31.05.04 17:37) [10]

Если имеется ввиду это, то тут по-любому записи будут удаляться через одну. До тех пор пока не Eof, а далее в обратном порядке.


 
Anatoly Podgoretsky ©   (2004-05-31 17:49) [14]

Курдль ©   (31.05.04 17:42) [12]
Недостаточно информации, что бы это советовать, может стоять фильтр. Но если действительно надо очистить таблицу, то это лучший метод, конечно если сделать предположение, что это БДЕ, пока ни в одной его ветке нет информации о движке.

Vlad ©   (31.05.04 17:43) [13]
Не будут он же написал, что привел не тот код и мало еще чего он нам не сказал.


 
YurikGL ©   (2004-05-31 18:05) [15]


> Как реально (физически) удалить записи из таблицы?


SQL - коммандой.


 
Jet ©   (2004-05-31 18:13) [16]

BDE.
temp - таблица
--
emptytable - доступ не эксклюзивен, не поможет
Как я понял нужно сдлеать упаковку для удаления помеченных записей?


 
Anatoly Podgoretsky ©   (2004-05-31 21:26) [17]

YurikGL ©   (31.05.04 18:05) [15]
Не то

Jet ©   (31.05.04 18:13) [16]
Так для упаковки тоже нужен монопольный доступ, кроме того если ты хочишь очистить всю таблицу, то emptytable оптимальнее. Результат пустая таблица, почти мгновенно, по крайней мере глазами не заметишь.


 
Jet ©   (2004-05-31 22:17) [18]

Anatoly Podgoretsky ©    
--
А можно перед очисткой включить эксклюзивный режим, очистить таблицу, а потом выключить его?


 
Anatoly Podgoretsky ©   (2004-05-31 22:24) [19]

Так и делают


 
Jet ©   (2004-05-31 22:27) [20]

Всем спасибо, с утра попробую.



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

Форум: "Базы";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.056 c
3-1086006839
DimonNew
2004-05-31 16:33
2004.06.27
Вставка даты и рисунка


4-1085107194
BoxTer
2004-05-21 06:39
2004.06.27
Как убить процесс ntvdm.exe


8-1081527041
Андрей Арт
2004-04-09 20:10
2004.06.27
Звук


8-1081713176
Gott
2004-04-11 23:52
2004.06.27
Запись


14-1086460588
Marser
2004-06-05 22:36
2004.06.27
Список мастеров





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