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

Вниз

Заклинило на примитивной вещи - не могу отредактировать запись!   Найти похожие ветки 

 
Michael5   (2005-11-07 00:58) [0]

OverviewADOTable.First;
for x:=1 to OverviewADOTable.RecordCount do begin
OverviewADOTable.Edit;
OverviewADOTable.FieldByName("sheetname").AsString:=ComboBox4.Text;
OverviewADOTable.Post;
OverviewADOTable.Next;
end;

____________________________________________
Просматриваю всю выборку, и в каждой записи меняю значение.
Пусть в выборке только одна запись. Тогда после присваивания полю значения, которое в комбобоксе, при первом же проходе цикла, на строке

OverviewADOTable.Next;

выдается ошибка: BOF или EOF имеет значение true, либо текущая  запись удалена. Для выполняемой операции требуется текущая запись.
В общем, для любого количества записей, на последней происходит эта ошибка.
Всю себе голову поломал, что я делаю неправильно?
Причем, после того, как отобьешься от сообщений об ошибке, видишь, что запись произошла, правильно и туда, куда надо...


 
Michael5   (2005-11-07 01:00) [1]

Извиняюсь, только ошибка не на строке
OverviewADOTable.Next;, а на строке

OverviewADOTable.Post;


 
sniknik ©   (2005-11-07 01:26) [2]

http://delphimaster.net/view/3-1130309787/
почитай для интересу. и хотя я не так критичен (пользуюсь иногда ;) но всеже в данном случае поддерживаю мнеие Johnmen-а, ... с оговоркой. не понимаеш как это работает не пользуйся. есть стандартные методы в гнигах/хелпе описаны. ну зачем сразу извращатся?

и потом ADOTable тоже не пользуйся, сделай тут поиск по ADOTable, тоже почитай. это не BDE-шная таблица, это "обманка". не пользуйся.


 
Cardinal ©   (2005-11-07 09:57) [3]

все работает? тогда глуши ошибку ))
--
попробуйте x := 2 что ли


 
Michael5   (2005-11-07 13:47) [4]


> sniknik ©   (07.11.05 01:26) [2]


Дело в том, что это и вычитано из книг - RecordCount, First, Next, Post...

Нюансов различия между различными способами доступа к БД, к сожалению, не знаю. По мне, АДО и АДО, не хуже или лучше других. А вот, кстати, про БДЕ я уже успел тут прочитать, типа, мне как минимум, должно было бы быть стыдно, если б я им пользовался...
Потом, АДО - стандартный вариант для базы Акцесс, кажется...
В-третьих, поиск по сайту не работает...

Лучше прямо скажите, как мне этот фрагмент переписать... А я выводы для всего остального сделаю!


 
Amoeba ©   (2005-11-07 17:57) [5]


> for x:=1 to OverviewADOTable.RecordCount do begin

Замени на
while not OverviewADOTable.Eof do begin


 
sniknik ©   (2005-11-07 20:50) [6]

Michael5   (07.11.05 13:47) [4]
по моему ты не понял, тебе не говорят не пользоваться АДО, тебе говорят не пользуйся ADOTable (тейбле с приставкой адо). т.к. то что в BDE было приличным компонентом, для локальных таблиц (Table), в ADO стало граблями для начинающих. (вернее не в ADO, в нем его нет, а в реализации борланда, его  обертки для ADO)
просто смени его на ADODataSet (обьяснять почему уже достало ;), не вериш... ну как хочеш, грабли твои).


 
Michael5   (2005-11-07 21:05) [7]

Нет, это тоже не помогает.

Зато заметил, что происходит: сбой происходит на предпоследнем шаге.
Пусть записей две (RecordCount=2).
Тогда при первом проходе цикла
for x:=1 to OverviewADOTable.RecordCount do begin
OverviewADOTable.Edit;
OverviewADOTable.FieldByName("sheetname").AsString:=ComboBox4.Text;
//здесь рекордкаунт все еще равен 2
OverviewADOTable.Post;
//А после поста он становится равным 1!!!

Соответственно следующей (Next) записи уже не стало, и начинается неразбериха.

Так что, что происходит, понятно...
Но что делать-то?!


 
Michael5   (2005-11-07 21:14) [8]


> sniknik ©   (07.11.05 20:50) [6]


Уважаемый sniknik: я же пользуюсь одним из вариантов (АДОТейбл в данном случае, а не датасетом, к примеру) не потому, что я такой упертый...
Просто я не знаю различий между ними. И делаю, что первое под руку попалось.

Теперь я научился на своей ошибке, буду знать.
Спасибо большое за помощь :)

Теперь все, что ли, переписывать, с тейбла на датасет?...


 
Плохиш ©   (2005-11-07 23:15) [9]


> Michael5   (07.11.05 21:05) [7]
> Нет, это тоже не помогает.
>
> Зато заметил, что происходит: сбой происходит на предпоследнем
> шаге.
> Пусть записей две (RecordCount=2).
> Тогда при первом проходе цикла
> for x:=1 to OverviewADOTable.RecordCount do begin
> OverviewADOTable.Edit;
> OverviewADOTable.FieldByName("sheetname").AsString:=ComboBox4.
> Text;
> //здесь рекордкаунт все еще равен 2
> OverviewADOTable.Post;
> //А после поста он становится равным 1!!!

<Telepator on>
Филтер у таблицы включён и новое значение в него не попадает.
<Telepator off>


 
Michael5   (2005-11-07 23:34) [10]

Ессно, фильтр включен.

Логика моя такая:
не шарить же по всем записям, которых будет тысячи. Проще отфильтровать сразу нужное и скопом все отредактировать.

Теперь-то я понимаю, что ошибался! :) Спасибо, Плохиш!

Значит, вся загвоздка в фильтрованной ADOTable... А как все-таки исправить мой код, не переходя на ADODataSet? Выключать фильтр, проверять каждую запись по моему условию фильтра, редактировать, потом снова включать фильтр? (Фильтрованный вид требуется для пользователя)


 
Плохиш ©   (2005-11-08 00:02) [11]


> А как все-таки исправить мой код, не переходя на ADODataSet?

Надо лечить не болезнь, а причины приводящие к ней!


 
sniknik ©   (2005-11-08 00:10) [12]

> не потому, что я такой упертый...
и тем не менее впечатление что очень...

в [7]
> Нет, это тоже не помогает.
а код оставлен как был, два совета [5] и [6] проигнорированы. какое же это "это тоже не помогает" если ты ничего не поменял? или ты советы как молитвы читаеш над своим кодом? так оно конечно "тоже не помогает".

> Логика моя такая:
> не шарить же по всем записям, которых будет тысячи. Проще отфильтровать сразу нужное и скопом все отредактировать.
фильтры "как в локальной логике" (работе с локальными/файл серверными таблицами), также непустимы как и ADOTable! но вовсе не потому почему у тебя ошибка идет. тут чисто твой глюк и упертость, нежелание следовать советам которые сам и спрашиваеш.


 
Michael5   (2005-11-08 09:36) [13]

Спокойно...
С ADODataSet"ом все работает, [5] и особенно [6] приняты к сведению.
[5], кстати, не помогло (впрочем, я это уже говорил).

Вывод такой (для себя сделал): ADOTable только для отображения, добавления новых записей.
Для редактирования - датасет (выборка)


 
sniknik ©   (2005-11-08 11:13) [14]

> Вывод такой (для себя сделал): ADOTable только для отображения
неправильный. ADOTable для помойки адназначно,  тудаже за компанию ADOQuery, хотя его "вина" и поменьше. а пользоваться только тем что имеет корни в самом ADO (конект, рекордсет, команд, RDS).

главный "проступок" этих компонент в том что они "навязывают" логику аналогичную своим аналогам из BDE. но то что хорошо там, то здесь часто верх идиотизма.
если взялся за новую технологию, учи как она работает а не тяни неверные представления из другой.

совет (действительно хороший ;) залезь в палитру компонент и просто удали эту парочку, чтобы соблазнов не было.
и кстати не надо спорить, что и с ними можно работать... можно, если разбираешся, можно легко и через ADOTable запрос сделать, но смысл то не в том, что можно, а что нельзя а в психологии начинающего -> "есть одноименный компонет значит и работает аналогично... значит и учить ничего нового не будем, возьмем его, а не то что советуют и что вроде роднее".

вообще, это очень большая ошибка борланда, что она добавила этих "незаконнороженных" в палитру ADO. даже не имхо.



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

Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.014 c
14-1131477282
LordOfRock
2005-11-08 22:14
2005.11.27
Властелин Колец 3: Возвращение Бомжа


6-1122170765
mm0
2005-07-24 06:06
2005.11.27
Помогите зделать POST запрос для отправки СМС


2-1131461802
alex_1234
2005-11-08 17:56
2005.11.27
Опять туплю: left join ???


14-1130908536
Slider007
2005-11-02 08:15
2005.11.27
Про вчерашний гололед в Новосибирске


1-1130994246
ZSergey
2005-11-03 08:04
2005.11.27
Где косяк при написании DLL ...





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