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

Вниз

Можно ли менять поля в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-63134
Konstantin
2004-01-10 20:58
2004.01.20
Как сохранить содержимое Timage как монохромный рисунок?


8-63259
pasha_676
2003-09-17 12:22
2004.01.20
DirectX9, 8 Заголовочные файлы


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


1-63070
Димка
2004-01-08 19:29
2004.01.20
Как определить завершение процесса


14-63320
Nous Mellon
2003-12-30 19:14
2004.01.20
Софт для мобильных телефонов





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