Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.19;
Скачать: CL | DM;

Вниз

При сохранении созданой записи она исчезает   Найти похожие ветки 

 
AlexeyK   (2008-08-20 13:50) [0]

Доброго времени суток!

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

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

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

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

Да, и еще один нюанс: в БД Access была использавана функция реплики, могло ли это быть причиной?


 
stas ©   (2008-08-20 14:21) [1]


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

ОГО!
ADOQuery
CursorLocation: = clServer
CursorType := ctKeyset


 
AlexeyK   (2008-08-20 14:35) [2]


> ADOQueryCursorLocation: = clServer
> CursorType := ctKeyset


Пробовал, правда с ADOTable, но тогда не работает сортировка (использовал SORT и по IndexField), а без нее никуда.
Выдает ошибку "текущий проводник не поддерживает необходимые интерфейсы для сортировки"


 
stas ©   (2008-08-20 14:48) [3]

в AdoQuery -
select * from mytable
Order by FieldName


 
AlexeyK   (2008-08-20 15:22) [4]

Спасибо попробую.
но вот только немного неудобно, переделывать многое прийдеться.

еще вопрос:
я пишу оболочку для работы с одной БД, и планируется сделать так, на серваке лежит база а на клиентских машинах только оболочка и доступ к базе идет через сеть, т.е. к одной базе подключаются несколько пользователей.
в даном случае при использовании CursorLocation: = clServer   проблем не будет?


 
stas ©   (2008-08-20 15:38) [5]

Недолжно.
Лучше вообще сделать редактирование отдельным окном и запросом, а в гриде только отображать данные.
Сортировать можно еще с помощью грида, только не стандартного а eh или cx


 
MsGuns ©   (2008-08-20 15:47) [6]

1. Заменить TADOTable на TADODataSet
2. Курсор клиентский, а не серверный - в данном случае он и нафиг не нужен, а тормозить будет
3. Для ЛЮБОЙ сортировки вполне достаточно св-во датасета Sort, при этом никакие индексы не нужны вообще

Редактирование и добавление рекомендую организовать не в самой сетке (в этом случае надо громоздить обработчики BeforeXXX/AfterXXX для проверки правильности заполнения данных пользователем), а в модальном окне с не DB-aware контролами (TEdit,TCombobox,TMemo..), а внесение изменений в таблицу выполнять отдельным TADOCommand/TADOQuery с последуещим переоткрытием датасета и поиском обновленной (добавленной) записи методом Locate


 
Sergey13 ©   (2008-08-20 15:53) [7]

> [6] MsGuns ©   (20.08.08 15:47)

Если вместо последней запятой поставить жирную точку - абсолютно правильная рекомендация. 8-)


 
AlexeyK   (2008-08-20 15:56) [8]

MsGuns спаисбо за совет, но в своем случаее желательно  обойтись без "переоткрытия датасета и поиска обновленной (добавленной) записи методом Locate"

Забыл отметить как раз редактирование идет в отдельно окне через TEdit,TCombobox,TMemo.., а DBGrid использую только для просмотра, и в конце не буду его вообще использовать.


 
MsGuns ©   (2008-08-20 16:09) [9]

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

Коран запрещает ?


 
MsGuns ©   (2008-08-20 16:12) [10]

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

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


 
Sergey13 ©   (2008-08-20 16:17) [11]

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

Просто я их люблю и берегу, как и сеть. И стараюсь не нагружать пустой работой.


 
AlexeyK   (2008-08-20 16:24) [12]


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


Дело не в паническом страхе, а в удобстве пользования, и условий использования программы!


 
Anatoly Podgoretsky ©   (2008-08-20 16:37) [13]


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

В топку


 
Anatoly Podgoretsky ©   (2008-08-20 16:37) [14]


> в AdoQuery

В топку


 
Anatoly Podgoretsky ©   (2008-08-20 16:39) [15]


> CursorLocation: = clServer

Что на колени хочешь поставить сервер или клиента?


 
Anatoly Podgoretsky ©   (2008-08-20 16:40) [16]


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

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


 
stas ©   (2008-08-20 16:59) [17]


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


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


 
AlexeyK ©   (2008-08-20 17:03) [18]


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


Дело в том что к записи доступа нет после сохранения, сохранил - а ее нет!
а сетка просто для просмотра!


 
stas ©   (2008-08-20 17:05) [19]

AlexeyK ©   (20.08.08 17:03) [18]
ну, а ты как сохранил, в том же датасете(который к сетке подключен)  сделал POST?


 
AlexeyK ©   (2008-08-20 17:07) [20]

Проблему решил по совету stas"a, использовав ADOQuery.
Спасибо stas!

но возможно есть ли какие-то другие решения с использованием курсора clUseClient?


 
AlexeyK ©   (2008-08-20 17:12) [21]

stas ©   (20.08.08 17:05) [19]
да, том же датасете, но сохранял через DBNavigator


 
stas ©   (2008-08-20 17:15) [22]

ну, так вот не сохранять в том же датасете.
через AdoCommand запрос на INSERT или UPDATE.
об это msguns в начале писал.


 
MsGuns ©   (2008-08-20 17:27) [23]

>но возможно есть ли какие-то другие решения с использованием курсора clUseClient?

Каким боком РЕШЕНИЕ зависит от курсора для акцеса ?
Почитайте что ли справку о кусоре в TADOConnection - тогда, возможно, исчезнут идиотские вопросы


 
MsGuns ©   (2008-08-20 17:38) [24]

>Sergey13 ©   (20.08.08 16:17) [11]
>Просто я их люблю и берегу, как и сеть. И стараюсь не нагружать пустой работой.

Глупости. На то он и сервер, чтобы "нагружать" его.
Кроме того, только переоткрытие гарантирует получение АКТУАЛЬНОГО состояния БД, включая изменения, внесенные другими пользователями.
А чтобы не провисала сетка, не надо гнать на клиент стотыщмильонов записей, тем более, что клиенту этому такие горы невозможно усмотреть физически.


 
Anatoly Podgoretsky ©   (2008-08-20 17:41) [25]


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

В таком случае о каком CursorLocation: = clServer может идти речь?


 
stas ©   (2008-08-20 17:46) [26]

Anatoly Podgoretsky ©   (20.08.08 17:41) [25]
Курсор создается на сервере т.е. в этом случае само ядро JET за ним следит, но для каждой машины это свое ядро и свой серверный курсор.


 
AlexeyK ©   (2008-08-20 18:55) [27]

Думаю вопрос закрыт.
Всем большое спасибо!


 
Anatoly Podgoretsky ©   (2008-08-20 19:22) [28]

> stas  (20.08.2008 17:46:26)  [26]

Кто то недавно обижался, мол какой сервер если его нет.


 
Sergey13 ©   (2008-08-21 08:23) [29]

> [24] MsGuns ©   (20.08.08 17:38)
> Глупости. На то он и сервер, чтобы "нагружать" его.

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

> Кроме того, только переоткрытие гарантирует получение АКТУАЛЬНОГО
> состояния БД
И сколько времени продолжается после открытия состояние актуальности?


 
sniknik ©   (2008-08-21 08:27) [30]

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


 
stas ©   (2008-08-21 10:02) [31]

Anatoly Podgoretsky ©   (20.08.08 17:41) [25]
Так как на каждой машине свой сервер и серверный курсор создается на сервере каждой машины, то сервер установкой серверного курсора на колени поставить неполучится.


 
Anatoly Podgoretsky ©   (2008-08-21 15:40) [32]

> stas  (21.08.2008 10:02:31)  [31]

Как ты создашь серверный курсор без сервера?


 
stas ©   (2008-08-21 16:13) [33]

а где в stas ©   (21.08.08 10:02) [31] я написал что сервера нет?


 
Anatoly Podgoretsky ©   (2008-08-21 19:10) [34]

> stas  (21.08.2008 16:13:33)  [33]

Ищи, иначе не понятны претензии.


 
stas ©   (2008-08-21 19:34) [35]

Anatoly Podgoretsky ©   (21.08.08 19:10) [34]
У тебя ко мне претензии.
А топикстартер сделал как я сказал у него все заработало и он забыл уже об этом вопросе.


 
Anatoly Podgoretsky ©   (2008-08-21 22:18) [36]

Это у тебя ко мне почему то претензии, то у тебя Акцесс сервер, то нет.


 
Anatoly Podgoretsky ©   (2008-08-21 22:20) [37]

Кроме того, я говорю о конструкции CursorLocation: = clServer, а не об Акцессе. Вопрос повторить?



Страницы: 1 вся ветка

Текущий архив: 2009.04.19;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.02 c
15-1235035785
Kerk
2009-02-19 12:29
2009.04.19
Нижегородцы!


4-1208521138
eror
2008-04-18 16:18
2009.04.19
Требуется нажать в неактивном окне кнопку


2-1236075272
GenaWow
2009-03-03 13:14
2009.04.19
Свйство CharCase у TMemo


2-1234955716
b@v
2009-02-18 14:15
2009.04.19
Как узнать имя каталога


15-1234818834
AlexDan
2009-02-17 00:13
2009.04.19
Уравнения затухающих волн..