Конференция "Базы" » При сохранении созданой записи она исчезает [D7, Access]
 
  • AlexeyK (20.08.08 13:50) [0]
    Доброго времени суток!

    Есть таблица с 60 полями, работаю через ADO.
    Во избежании ошибки "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени последнего чтения" при событии FormShow использую
    ...TelTable.Properties['Update Resync'].Value:=adResyncAll;

    Проблема вот в чем:
    после сохранения созданой записи, она исчезает с набора данных и ее не видно в DBGrid'e.
    Но реально в базе она сохраняется и после закрытия/открытия проги все данные видно.

    В чем может быть причина?

    Зараннее всем спасибо за советы

    Да, и еще один нюанс: в БД Access была использавана функция реплики, могло ли это быть причиной?
  • stas © (20.08.08 14:21) [1]

    > >Есть таблица с 60 полями

    ОГО!
    ADOQuery
    CursorLocation: = clServer
    CursorType := ctKeyset
  • AlexeyK (20.08.08 14:35) [2]

    > ADOQueryCursorLocation: = clServer
    > CursorType := ctKeyset


    Пробовал, правда с ADOTable, но тогда не работает сортировка (использовал SORT и по IndexField), а без нее никуда.
    Выдает ошибку "текущий проводник не поддерживает необходимые интерфейсы для сортировки"
  • stas © (20.08.08 14:48) [3]
    в AdoQuery -
    select * from mytable
    Order by FieldName
  • AlexeyK (20.08.08 15:22) [4]
    Спасибо попробую.
    но вот только немного неудобно, переделывать многое прийдеться.

    еще вопрос:
    я пишу оболочку для работы с одной БД, и планируется сделать так, на серваке лежит база а на клиентских машинах только оболочка и доступ к базе идет через сеть, т.е. к одной базе подключаются несколько пользователей.
    в даном случае при использовании CursorLocation: = clServer   проблем не будет?
  • stas © (20.08.08 15:38) [5]
    Недолжно.
    Лучше вообще сделать редактирование отдельным окном и запросом, а в гриде только отображать данные.
    Сортировать можно еще с помощью грида, только не стандартного а eh или cx
  • MsGuns © (20.08.08 15:47) [6]
    1. Заменить TADOTable на TADODataSet
    2. Курсор клиентский, а не серверный - в данном случае он и нафиг не нужен, а тормозить будет
    3. Для ЛЮБОЙ сортировки вполне достаточно св-во датасета Sort, при этом никакие индексы не нужны вообще

    Редактирование и добавление рекомендую организовать не в самой сетке (в этом случае надо громоздить обработчики BeforeXXX/AfterXXX для проверки правильности заполнения данных пользователем), а в модальном окне с не DB-aware контролами (TEdit,TCombobox,TMemo..), а внесение изменений в таблицу выполнять отдельным TADOCommand/TADOQuery с последуещим переоткрытием датасета и поиском обновленной (добавленной) записи методом Locate
  • Sergey13 © (20.08.08 15:53) [7]
    > [6] MsGuns ©   (20.08.08 15:47)

    Если вместо последней запятой поставить жирную точку - абсолютно правильная рекомендация. 8-)
  • AlexeyK (20.08.08 15:56) [8]
    MsGuns спаисбо за совет, но в своем случаее желательно  обойтись без "переоткрытия датасета и поиска обновленной (добавленной) записи методом Locate"

    Забыл отметить как раз редактирование идет в отдельно окне через TEdit,TCombobox,TMemo.., а DBGrid использую только для просмотра, и в конце не буду его вообще использовать.
  • MsGuns © (20.08.08 16:09) [9]
    >AlexeyK   (20.08.08 15:56) [8]
    >MsGuns спаисбо за совет, но в своем случаее желательно  обойтись без "переоткрытия датасета >и поиска обновленной (добавленной) записи методом Locate"

    Коран запрещает ?
  • MsGuns © (20.08.08 16:12) [10]
    >Sergey13 ©   (20.08.08 15:53) [7]
    >Если вместо последней запятой поставить жирную точку - абсолютно правильная рекомендация. 8-)

    Чего вы так все панически избегаете переоткрытий на стабильных серверах ?
  • Sergey13 © (20.08.08 16:17) [11]
    > [10] MsGuns ©   (20.08.08 16:12)
    > Чего вы так все панически избегаете переоткрытий на стабильных серверах ?

    Просто я их люблю и берегу, как и сеть. И стараюсь не нагружать пустой работой.
  • AlexeyK (20.08.08 16:24) [12]

    > Коран запрещает ?
    > Чего вы так все панически избегаете переоткрытий на стабильных серверах ?


    Дело не в паническом страхе, а в удобстве пользования, и условий использования программы!
  • Anatoly Podgoretsky © (20.08.08 16:37) [13]

    > Пробовал, правда с ADOTable

    В топку
  • Anatoly Podgoretsky © (20.08.08 16:37) [14]

    > в AdoQuery

    В топку
  • Anatoly Podgoretsky © (20.08.08 16:39) [15]

    > CursorLocation: = clServer

    Что на колени хочешь поставить сервер или клиента?
  • Anatoly Podgoretsky © (20.08.08 16:40) [16]

    > а DBGrid использую только для просмотра, и в конце не буду
    > его вообще использовать.

    Ну и зачем тогда вообще вопрос, какая разница если сетки нет.
  • stas © (20.08.08 16:59) [17]

    > Anatoly Podgoretsky ©   (20.08.08 16:39) [15]
    > Что на колени хочешь поставить сервер или клиента?


    Каким образом если это акцесс?
  • AlexeyK © (20.08.08 17:03) [18]

    > Ну и зачем тогда вообще вопрос, какая разница если сетки нет.


    Дело в том что к записи доступа нет после сохранения, сохранил - а ее нет!
    а сетка просто для просмотра!
  • stas © (20.08.08 17:05) [19]
    AlexeyK ©   (20.08.08 17:03) [18]
    ну, а ты как сохранил, в том же датасете(который к сетке подключен)  сделал POST?
  • AlexeyK © (20.08.08 17:07) [20]
    Проблему решил по совету stas'a, использовав ADOQuery.
    Спасибо stas!

    но возможно есть ли какие-то другие решения с использованием курсора clUseClient?
  • AlexeyK © (20.08.08 17:12) [21]
    stas ©   (20.08.08 17:05) [19]
    да, том же датасете, но сохранял через DBNavigator
  • stas © (20.08.08 17:15) [22]
    ну, так вот не сохранять в том же датасете.
    через AdoCommand запрос на INSERT или UPDATE.
    об это msguns в начале писал.
  • MsGuns © (20.08.08 17:27) [23]
    >но возможно есть ли какие-то другие решения с использованием курсора clUseClient?

    Каким боком РЕШЕНИЕ зависит от курсора для акцеса ?
    Почитайте что ли справку о кусоре в TADOConnection - тогда, возможно, исчезнут идиотские вопросы
  • MsGuns © (20.08.08 17:38) [24]
    >Sergey13 ©   (20.08.08 16:17) [11]
    >Просто я их люблю и берегу, как и сеть. И стараюсь не нагружать пустой работой.

    Глупости. На то он и сервер, чтобы "нагружать" его.
    Кроме того, только переоткрытие гарантирует получение АКТУАЛЬНОГО состояния БД, включая изменения, внесенные другими пользователями.
    А чтобы не провисала сетка, не надо гнать на клиент стотыщмильонов записей, тем более, что клиенту этому такие горы невозможно усмотреть физически.
  • Anatoly Podgoretsky © (20.08.08 17:41) [25]

    > Каким образом если это акцесс?

    В таком случае о каком CursorLocation: = clServer может идти речь?
  • stas © (20.08.08 17:46) [26]
    Anatoly Podgoretsky ©   (20.08.08 17:41) [25]
    Курсор создается на сервере т.е. в этом случае само ядро JET за ним следит, но для каждой машины это свое ядро и свой серверный курсор.
  • AlexeyK © (20.08.08 18:55) [27]
    Думаю вопрос закрыт.
    Всем большое спасибо!
  • Anatoly Podgoretsky © (20.08.08 19:22) [28]
    > stas  (20.08.2008 17:46:26)  [26]

    Кто то недавно обижался, мол какой сервер если его нет.
  • Sergey13 © (21.08.08 08:23) [29]
    > [24] MsGuns ©   (20.08.08 17:38)
    > Глупости. На то он и сервер, чтобы "нагружать" его.

    Ключевым в моем посте было не "нагружать", а "пустой работой".

    > Кроме того, только переоткрытие гарантирует получение АКТУАЛЬНОГО
    > состояния БД
    И сколько времени продолжается после открытия состояние актуальности?
  • sniknik © (21.08.08 08:27) [30]
    > Во избежании ошибки "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени последнего чтения"
    > при событии FormShow использую
    > ...TelTable.Properties['Update Resync'].Value:=adResyncAll;
    логичнее было бы использовать ключ, и обновление по нему... а это "немного" не то, не для этого.
  • stas © (21.08.08 10:02) [31]
    Anatoly Podgoretsky ©   (20.08.08 17:41) [25]
    Так как на каждой машине свой сервер и серверный курсор создается на сервере каждой машины, то сервер установкой серверного курсора на колени поставить неполучится.
  • Anatoly Podgoretsky © (21.08.08 15:40) [32]
    > stas  (21.08.2008 10:02:31)  [31]

    Как ты создашь серверный курсор без сервера?
  • stas © (21.08.08 16:13) [33]
    а где в stas ©   (21.08.08 10:02) [31] я написал что сервера нет?
  • Anatoly Podgoretsky © (21.08.08 19:10) [34]
    > stas  (21.08.2008 16:13:33)  [33]

    Ищи, иначе не понятны претензии.
  • stas © (21.08.08 19:34) [35]
    Anatoly Podgoretsky ©   (21.08.08 19:10) [34]
    У тебя ко мне претензии.
    А топикстартер сделал как я сказал у него все заработало и он забыл уже об этом вопросе.
  • Anatoly Podgoretsky © (21.08.08 22:18) [36]
    Это у тебя ко мне почему то претензии, то у тебя Акцесс сервер, то нет.
  • Anatoly Podgoretsky © (21.08.08 22:20) [37]
    Кроме того, я говорю о конструкции CursorLocation: = clServer, а не об Акцессе. Вопрос повторить?
 
Конференция "Базы" » При сохранении созданой записи она исчезает [D7, Access]
Есть новые Нет новых   [134473   +28][b:0.001][p:0.001]