Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
1-1086790419
TUser
2004-06-09 18:13
2004.06.27
Invalid parameter


1-1086770003
AAAlexeyAAA
2004-06-09 12:33
2004.06.27
ООП и arrays


1-1087142108
AAAlexeyAAA
2004-06-13 19:55
2004.06.27
Компилятор насчитал 1+1=1. Почему? Привожу код:


6-1083784947
bars
2004-05-05 23:22
2004.06.27
Соединение для обмена текстовыми сообщениями


8-1081769338
Черноглазов
2004-04-12 15:28
2004.06.27
Как получить видео через USB.





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