Форум: "Базы";
Текущий архив: 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