Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ошибка при (Update) ADO - рекордсета / 16 сообщений из 16, страница 1 из 1
26.12.2003, 11:21
    #32364196
пав
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
при работе с базой Access ,в VB6 ,в эллементе DataGrid отображена иформация из запроса один - ко - многим .Запрос обновляемый это проверено .
Но после внесения изменений в ячейках DataGrid и попытке сделать Update рекордсета возникает ошибка :
"Insufficient key column information for updating or refreshing".Пожалуйста подскажите как сохранить изменения в БД.
...
Рейтинг: 0 / 0
26.12.2003, 12:24
    #32364298
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
Среди списка полей должны присутствовать первичные ключи всех участвующих в запросе таблиц. Но это не гарантирует. Обновлять представления - порочный и тернистый путь, его надо избегать любыми доступными способами.
...
Рейтинг: 0 / 0
26.12.2003, 12:37
    #32364333
пав
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
"Обновлять представления - порочный и тернистый путь ....." -тогда пожалуйста укажите другой путь сохранения внесённых пользователем изменений в БД ?.
...
Рейтинг: 0 / 0
26.12.2003, 12:40
    #32364342
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
rs.Properties("Unique Table")="ИмяТаблицы"
правда непонятно куды это в грид пихать.
...
Рейтинг: 0 / 0
26.12.2003, 15:46
    #32364680
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
автор"Обновлять представления - порочный и тернистый путь ....." -тогда пожалуйста укажите другой путь сохранения внесённых пользователем изменений в БД ?.

Если пользоваться автоматическим построением запросов на изменение, любезно предоставленным ADO, то запрос, формирующий набор данных, должен быть по одной таблице и быть крайне простым, чтобы ADO смогло сгенерировать правильные запросы на обновления. Иначе - subj.

Если запрос, формирующий набор данных, сложный, то надо генерировать запросы на обновление ручками, а не полагаться на автоматику, которая, как известно, работает правильно только в ограниченном диапазоне.
...
Рейтинг: 0 / 0
17.03.2004, 09:18
    #32444708
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
Если работаешь с True DBGrid, то замечу что грид надо рекверить после изменения данных строки, а точнее не грид, а рекордсет на основе которого он открыт. Тогда данные измененные в одной ячейке изменятся и в других записях которые на эти данные ссылаются. Но с этим реквери связан один трабл - скроллинг грида уезжает на начальные позиции и работать так очень геморно, каждый раз нужно обратно крутить скроллинг, а точно это сделать не получается и пожтому все уезжает.
...
Рейтинг: 0 / 0
17.03.2004, 09:19
    #32444711
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
Вот что делать если к гриду привязана временная таблица? Та же ошибка выдается!
...
Рейтинг: 0 / 0
17.03.2004, 10:47
    #32444909
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
А первичный ключ есть на таблице?
...
Рейтинг: 0 / 0
18.03.2004, 15:49
    #32447565
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
Вот как создается временная таблица из клиента:

CREATE TABLE [dbo].[#client] (
[Id_Client] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (500) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]

ALTER TABLE [dbo].[#client] WITH NOCHECK ADD
CONSTRAINT [PK_#client] PRIMARY KEY CLUSTERED
([Id_Client]) ON [PRIMARY]

Вроде ключ есть.
Фигня в том что если зайти под админом - грид дает редактировать данные, а если простым юзером - выскакивает вышеозаченная ошибка. Где грабли?
...
Рейтинг: 0 / 0
18.03.2004, 17:24
    #32447841
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
[dbo] попробуй убрать, и #сlient указывай без квадратных скобок
...
Рейтинг: 0 / 0
19.03.2004, 06:42
    #32448339
Nikita_MV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
Вот, самый надежный путь Не знаю подойдет ли )
Использовать обьект ADODB.Connection
и его метод .Execute
Например:

ADOCon = CREATEOBJECT("ADODB.Connection")
ADOCon.ConnectionString="Driver={Microsoft Visual FoxPro Driver}; SourceType=DBF; SourceDB=D:\maykov"
ADOCon.Open
ADOCon.Execute("INSERT INTO buffer(NUMDOC) Values " 212354")

Естественно SQL запрос может быть и на обновление, и на удаление )
А можно и команду передать :) например:

ADOCon.Execute("SET DELETE OFF")
или
ADOCon.Execute("SET NULL ON")

Может вам и другое надо, но свести к этому програмно всегда можно

А мой вопрос так и висит....
Как в данном случае снять пометки на удаление )
...
Рейтинг: 0 / 0
19.03.2004, 08:29
    #32448401
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
Dankov
Причем здесь [dbo] и квадратные скобки? Говорю же под админом такая структура отрабатывает отлично.
Почему не редактируется временная таблица из грида вижу две причины:
1) Предположительно у админа права на Update таблиц есть по умолчанию, а у юзеров только на селект, но как повесить разрешение на Uрdate временных таблиц если их не видно в tempdb?
2) Под юзером по какой-то причине при создании временной таблицы не создается ключ.

Как быть-то?
...
Рейтинг: 0 / 0
19.03.2004, 10:17
    #32448600
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
авторПричем здесь [dbo] и квадратные скобки? Говорю же под админом такая структура отрабатывает отлично.
Почему не редактируется временная таблица из грида вижу две причины:
1) Предположительно у админа права на Update таблиц есть по умолчанию, а у юзеров только на селект, но как повесить разрешение на Uрdate временных таблиц если их не видно в tempdb?
2) Под юзером по какой-то причине при создании временной таблицы не создается ключ.
Как быть-то?

При том, что дельфи генерит запросы на изменения, и подставляет там в качестве owner неизвестно что (под админом подставится dbo и проблем не будет). Квадратные скобки - потому что это неспецифично для временных таблиц, и таблица может вовсе не стать временной - моё предположение, не более того.

Вообщем, открой профайлер и посмотри какие запросы дельфи шлет.
...
Рейтинг: 0 / 0
19.03.2004, 12:31
    #32449016
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
Dankov
Какое дельфи? Очнись, мы о VB говорим и находимся в разделе VB :)
...
Рейтинг: 0 / 0
19.03.2004, 16:21
    #32449671
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
да, перепутал, сорри. Но сути это меняет, ADO оно в Африке - ADO.
...
Рейтинг: 0 / 0
19.03.2004, 17:02
    #32449792
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка при (Update) ADO - рекордсета
2 пав
А простой юзер в каких ролях фигурирует?

Magnus
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ошибка при (Update) ADO - рекордсета / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]