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

Вниз

Можно ли менять поля в TADOQuery? И что при этом произойдет?   Найти похожие ветки 

 
SergP ©   (2003-12-22 03:44) [0]

Нужен небольшой совет:
Вобщем у меня клиент одного форума. Каждый пост имеет свой post_id . Создаю сообщение. Ему присваивается временный (заведомо большой) post_id (начиная от 2000000000 и дальше).
Теперь когда я отправляю на форум все накопленные сообщения, то при каждом соединении отправляется одно сообщение. Скрипты возвращают post_id который этому сообщению присвоился при занесении в базу MySQL (там это автоинкрементное поле).
Теперь мне нужно поменять в моей локально базе post_id для отправленого сообщения.
Сейчас использую TAdoTable. Указываю индекс post_id, перехожу на последнюю запись и если там post_id >=2000000000 то отправляю сообщение, а затем заношу в базу уже его постоянный post_id полученый от скриптов.
Но проблема в том что сообщение не всегда может быть отправлено. Может оказаться что у авторизация не прошла или у пользователя недостаточно прав для постинга в конкретный форум или такого топика уже нет. Тогда мне нужно оставить это сообщение как есть и перейти к отправлению следующего. А с этим у меня проблема. вернее не знаю как это проще сделать.
Если я буду юзать TADOQuery и выберу все записи где post_id >=2000000000 , а потом буду их перебирать в цикле, то могу ли я в TADOQuery менять значение полей в записи?
И что будет если запрос такой:
select * from posts where post_id>=2000000000
а я начну менять у записей post_id (менять на значение которое меньше 2000000000? Будут ли при этом пропадать измененные записи из результата запроса или нет?
Или посоветуйте как лучше сделать...

Access. Provider=Microsoft.Jet.OLEDB.4.0


 
JibSkeart ©   (2003-12-22 11:16) [1]

а поконнкретней ?


 
SergP ©   (2003-12-22 11:51) [2]

М-да. Я сонный был когда писал.

Вобщем если я выберу записи:
select * from posts where post_id>=2000000000
а потом в цикле
adoquery.first;
while not adoquery.eof do
begin
//можно ли здесь модифицировать post_id
//и не изменится ли при этом набор записей запроса
// так как записи выбраны по post_id>=2000000000 а для некоторых
//я изменю на значение меньшее 2000000000 ?
adoquery.next;
end;

Если нельзя то как можно такое написать попроще?
Сиысл в том что нужно просмотреть все такие записи (post_id>=2000000000 ) и у некоторых поменять post_id, а у некоторых оставить как есть...


 
JibSkeart ©   (2003-12-22 11:58) [3]

изменить можно если это не уникальный индекс
в принчипе набор данных не должен изменится если ,
не делал рефреша :)

смотря какие это "некоторые"
а обязательно смотреть циклом ??


 
SergP ©   (2003-12-22 14:02) [4]

Это индексное поле и с неповторяющимися значениями... Но я собираюсь менять на значение которое не будет совпадать с уже имеющимися...


 
KSergey ©   (2003-12-22 14:26) [5]

Вообще-то, первое предложение - просто попробовать, это не сложно, правда же? ;)
А так на вскидку - да вроде ничего не дожно измениться, раз уж записи выбраны в DataSet и в нем нет локальной сортировки - то вроде на перебор (на тек. позицию в DataSet) это не повлияет... Хотя, конечно, надо попробовать.


 
JibSkeart ©   (2003-12-22 14:31) [6]

я вообще имхо я бы вместо
мохинациями с индексом добавил бы поле ключик ,
по мне гемора меньше так .


 
SergP ©   (2003-12-22 15:06) [7]


> JibSkeart © (22.12.03 14:31) [6]

И что это мне даст? Хотя вообще-то это поле и есть ключевым... Но я пока так и не понял для чего нужны эти ключевые поля, и чем они от индексов отличаются...


> SergP © (22.12.03 14:02) [4]

Не успел объяснить зачем в цикле перебирать. На работе не успеешь клавишу нажать как уже у кого-то проблемы и меня зовут...

Вобщем мне нужно отправить по HTTP на сервак несколько сообщений. Написал скрипт с помощью которого можно отправлять по одному сообщению.
Т.е. я выбираю в TADOQuery все записи которые требуется отравить, перебираю их в цикле и отправляю по отдельности. Если сообщение не может быть отправлено, то у него сохраняется post_id, а если отправлено, то полю post_id присваивается то что вернули скрипты с сервака.
Вот я и незнал:
1. Можно ли модифицировать поля записей в TADOQuery, которые выбраны select"ом,
2. и не изменится ли набор выбраных записей если я в одной из них изменю post_id?
Например выбраны записи где where post_id>=2000000000, а я в одной из них меняю post_id c 2000000003 на 1323. Не исчезнет ли эта запись из выбраных селектом?


> KSergey © (22.12.03 14:26) [5]

Я вижу что ты понял что я имею ввиду из моих предыдущих постов. Наверное мне все же придется экспериментировать... Но бывают моменты когда после долгих экспериментов уже не хочется ни с чем экспериментировать.


 
JibSkeart ©   (2003-12-22 15:16) [8]

нет не это
поле ключ не identity а просто поле в котором ты хранишь
допустим 1 твой аналог 20000000


 
SergP ©   (2003-12-22 18:30) [9]


> JibSkeart © (22.12.03 15:16) [8]
> нет не это
> поле ключ не identity а просто поле в котором ты хранишь
>
> допустим 1 твой аналог 20000000


Не совсем понял... Это типа создаю еще одно поле и записываю новые значения туда, а потом после всего одним запросом переношу значения из этого дополнительного поля в поле post_id? Так что-ли,



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

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
7-63418
ККВ
2003-11-05 13:55
2004.01.20
Буква CD


4-63439
Idealist
2003-11-15 01:46
2004.01.20
Нужна помощь


14-63393
Undert
2003-12-28 16:25
2004.01.20
Кто как отпраздновал xMas ?


3-63024
Igorr
2003-12-22 16:40
2004.01.20
Как правильно работать с BLOB


14-63400
Rouse_
2003-12-25 21:10
2004.01.20
Вот и Новый Год скоро...