Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.04 c
15-1232824237
Unknown user
2009-01-24 22:10
2009.04.19
Работа с потоками в Delphi


15-1234819801
Юрий
2009-02-17 00:30
2009.04.19
С днем рождения ! 17 февраля 2009 вторник


15-1235057883
Бурато
2009-02-19 18:38
2009.04.19
Алгебра


6-1202129355
kDenis
2008-02-04 15:49
2009.04.19
winhttp.dll


15-1235076565
Sergey Masloff
2009-02-19 23:49
2009.04.19
SOAP в Delphi. Что делать с зависонами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский