![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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