Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADO - значение толькочто добавленных строк? [D5]


ghost_by ©   (2002-04-19 08:12:00) 

Есть в таблице поле - AutoInc, после добавления записи в эту таблицу, мне нужно получить значение этого поля для связывания с другой тоблицей, но вот в чем проблема - значение из этого поля всегда = 0. Т.Е. если открыть базу - все ОК, но если добавить новую запись - что то не так, в добавленных записях свегда =0.

Что делать? Закрывать и заново открывать таблицу, или есть метод попроще?

(D5+ADO+Jet4.0), может все дело в Jet4.0?


jonik pegas   (2002-05-08 14:21:00) [1]

>Stranger
С автоинкрементом если пользователь не один то может получить не свою запись. В данном случае наверно ввести еще одно поле куда прописывать временный програмно сгенерированный ключ и по нему искать. В MS SQL можно использовать NEW_ID()


Stranger   (2002-05-08 13:06:00) [2]

Я использовал следующие варианты.
Если у тебя в записи есть еще одно уникальное поле, то запрашиваешь по нему, ведь ты должен знать
значения остальных полей во вновь вставленной записи, и получаешь нужный ID.
Если таких полей нет, то добавляешь свой ID, например GUID, есть функция генерации GUIDа,
и по нему потом получаешь значение автоинкрементного ID,
либо же, если ID автоинкрементный, то у вновь вставленной записи ID максимальный, следовательно
запросом:
Select
max(ID) as LastID
from
<Имя таблицы>
ты получаешь ID только что вставленной записи,
вызов этого запроса можно вставить в обработчик события AfterPost


wicked   (2002-04-22 13:56:00) [3]

делай после post"а resync... например, в обработчике OnAfterPost...


ghost_by   (2002-04-22 13:36:00) [4]

HELP! Очень нужно!


ghost_by   (2002-04-21 01:18:00) [5]

Автор вопроса не указал какая БД- ACCESS 97.

ADODataSet1.Properties["Update Criteria"].value :=adCriteriaKey;
ADODataSet1.Properties["Update Resync"].Value := adResyncAll;
Вроде как данный метод не помогает с ACCESS97. Неужели нет решения данной проблемы?


KSergey   (2002-04-19 12:37:00) [6]

>SelfDestructor
Автор вопроса не указал какая БД пользуется, но на сколько я помню (на основании приведенных выше статей в высказываении Юрий Жуков) для Access2000 это действительно так, а вот для предыдущих версий и других БД - это не срабатывает.
Например, применительно к MS SQL данная тема периодически пережевывается в форуме sql.ru, хотя и там, похоже, все уже что можно было пережевали и выяснили.


SelfDestructor   (2002-04-19 10:49:00) [7]

Странно, у меня при работе с теми же самыми вещами(ADO + Jet4.0) таких проблем не возникало. После того, как я делал Post, я брал значение FieldByName("ID"), тип которого в Access2000 был "Счетчик" и мне возвращалось корректное автоматически сгенерированное значение ID. Может дело в том, что у меня C++Builder, но ведь там всё тоже самое.


Юрий Жуков   (2002-04-19 08:53:00) [8]

ADODataSet1.Properties["Update Criteria"].value :=adCriteriaKey;
ADODataSet1.Properties["Update Resync"].Value := adResyncAll;
Еще обрати внимание на "Resync Command".

Также прочитай здесь
http://www.delphikingdom.com/helloworld/ado01.htm
http://www.delphikingdom.com/helloworld/ado02.htm
http://www.delphikingdom.com/helloworld/ado03.htm


Наверх

Титульная страница Поиск, карта сайта Написать письмо