powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка при редактировании данных в форме
25 сообщений из 55, страница 1 из 3
Ошибка при редактировании данных в форме
    #32781037
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-server 2000 + Access 2000, все сервис-паки.
Применила уже неоднократно мной использованный способ создания АДО - рекордсета как источника подчиненной формы через вызов хранимой процедуры. Процедура достает список по накладной и довешивает к нему справочные тексты и параметры. Назначена Unique Table как всегда, но одно поле (количество штук по накладной) редактировать не удается. Ясно, что такая конструкция не позволяет изменять значения ключевого поля, но почему выдает ошибку попытка изменить значение поля, ни с чем не связанного? При этом новое значение сохраняется, но дальнейшее продолжение работы невозможно, форму приходится закрывать через десяток сообщений об ошибке, а если этот рекордсет попытаться редактировать без формы через процедуру, сообщения другие, но ошибка все равно возникает. Я не могу разобраться, в чем дело, помогите, пожалуйста.

Остальные поля, кроме проблемного и ключевого, редактируются нормально.
Не умею вставить здесь картинку в сообщение. Если кто-нибудь объяснит, как это делается, буду очень признательна.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781040
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про картинку
картинку можно приложить как файл.

про ошибку.
без запроса (текста хп) можно гадать только.



(с выражением лица)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781043
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
ALTER                  PROCEDURE InvoicesCompositionP
  @OperationID int, @DepartmentID int , @InvoiceTypeID int 
AS 
-- отбирает список книг по накладной

BEGIN
SELECT dbo.InvoicesComposition.*,
BooksCatalog.Authors, BooksCatalog.Volume, BooksCatalog.EditionName, BooksCatalog.HCover, 
BooksCatalog.Cost AS CatPrice, BooksCatalog.NDSTax AS CatNDStax, BooksCatalog.Monopoly, 
BooksCatalog.EAN,
Quantity-Sold-Returned AS Rest, 
CASE WHEN BasePrice >  0  THEN ROUND(PriceNDS/( 1 +BooksCatalog.NDStax)/BasePrice, 4 ) ELSE  0  END AS Discount, 
--IIf([BasePrice]> 0 ,round((Round([InvoicesComposition]![Price]*([InvoicesComposition]![NDSTax]+ 1 ), 2 )/( 1 +[BooksCatalog]![ndstax]))/[BasePrice], 4 ), 0 ) AS Discount, 
ROUND(dbo.InvoicesComposition.Price, 2 )*Round(quantity, 2 ) AS CostM, 
ROUND(ROUND(dbo.InvoicesComposition.BasePrice*dbo.BooksCatalog.NDStax, 2 ) + dbo.InvoicesComposition.BasePrice, 2 )  AS BasePriceNDS,
CASE WHEN PaymentPercent = 1  THEN  0  ELSE  1  END AS IsPercent,
CASE WHEN Quantity-Sold-Returned= 0  THEN  1  ELSE  0  END AS IsClosedFROM 
(
SELECT OperationID, OperationID_Old, DepartmentID, InvoiceTypeID,
InvoicePosition, EditionID

FROM dbo.InvoicesComposition 
WHERE OperationID_Old = @OperationID AND DepartmentID = @DepartmentID AND InvoiceTypeID = @InvoiceTypeID
) InvoiceComposition

INNER JOIN dbo.InvoicesComposition ON 
dbo.InvoicesComposition.OperationID = InvoiceComposition.OperationID 
AND dbo.InvoicesComposition.EditionID = InvoiceComposition.EditionID 

INNER JOIN dbo.BooksCatalog WITH (NOLOCK) ON dbo.BooksCatalog.EditionID = InvoiceComposition.EditionID 


ORDER BY dbo.InvoicesComposition.InvoicePosition, dbo.BooksCatalog.Authors, dbo.BooksCatalog.Volume, dbo.BooksCatalog.EditionName, dbo.BooksCatalog.HCover DESC , dbo.InvoicesComposition.EditionID
END
Примерно так, странно выглядит, потому что в процессе переезда со старой конструкции таблиц на новую при одновременном юзании софта, написанного во время оно для старях конструкций.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781044
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторError uploading file.There is not enough space on the disk.
Картинка не прикладывается.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781045
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то я тут "количество штук по накладной" не опознал.
Как его зовут?

(с выражением лица)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781046
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT dbo.InvoicesComposition.*,
, оно там среди прочего, все поля из этой таблицы.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781049
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.б. потому проблема, что Quantity упоминается в вычисляемых полях?
Так Price тоже участвует в вычислениях, а с ним проблемы нет...
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781058
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопросы
- кто объявлен Unique Table (dbo.InvoicesComposition.InvoicePosition ?)
- как зовут поле "количество штук по накладной"
- какое определение для этого поля (не является ли оно вычислимым полем?)
советы
1)
для начала бы выкинул выводимую таблицу

Код: plaintext
1.
2.
3.
4.
5.
6.
(
SELECT OperationID, OperationID_Old, DepartmentID, InvoiceTypeID,
InvoicePosition, EditionID

FROM dbo.InvoicesComposition 
WHERE OperationID_Old = @OperationID AND DepartmentID = @DepartmentID AND InvoiceTypeID = @InvoiceTypeID
) InvoiceComposition

и ее условие отбора поместил в условие отбора запроса.

2) в расчете на то, что Unique Table это dbo.InvoiceComposition
и "количество штук по накладной" - обычное поле, не пересекающееся по имени с прочими полями отбора,
- переписал бы запрос так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
FROM
dbo.BooksCatalog INNER JOIN dbo.InvoicesComposition ON 
 dbo.BooksCatalog.EditionID = InvoiceComposition.EditionID 

WHERE
  OperationID_Old = @OperationID AND 
  DepartmentID = @DepartmentID AND 
  InvoiceTypeID = @InvoiceTypeID

ORDER BY dbo.InvoicesComposition.InvoicePosition, dbo.BooksCatalog.Authors, dbo.BooksCatalog.Volume, dbo.BooksCatalog.EditionName, dbo.BooksCatalog.HCover DESC , dbo.InvoicesComposition.EditionID



(с выражением лица)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781072
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha вопросы
- кто объявлен Unique Table (dbo.InvoicesComposition.InvoicePosition ?)
dbo.InvoicesComposition
Victosha
- как зовут поле "количество штук по накладной"

есс-но, Quantity, извиняюсь за недомыслие.
Victosha
- какое определение для этого поля (не является ли оно вычислимым полем?)
Просто поле, напрямую из таблицы, никакой экзотики.
Victosha
советы
1)
для начала бы выкинул выводимую таблицу

Код: plaintext
1.
2.
3.
4.
5.
6.
(
SELECT OperationID, OperationID_Old, DepartmentID, InvoiceTypeID,
InvoicePosition, EditionID

FROM dbo.InvoicesComposition 
WHERE OperationID_Old = @OperationID AND DepartmentID = @DepartmentID AND InvoiceTypeID = @InvoiceTypeID
) InvoiceComposition

и ее условие отбора поместил в условие отбора запроса.

2) в расчете на то, что Unique Table это dbo.InvoiceComposition
и "количество штук по накладной" - обычное поле, не пересекающееся по имени с прочими полями отбора,
- переписал бы запрос так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
FROM
dbo.BooksCatalog INNER JOIN dbo.InvoicesComposition ON 
 dbo.BooksCatalog.EditionID = InvoiceComposition.EditionID 

WHERE
  OperationID_Old = @OperationID AND 
  DepartmentID = @DepartmentID AND 
  InvoiceTypeID = @InvoiceTypeID

ORDER BY dbo.InvoicesComposition.InvoicePosition, dbo.BooksCatalog.Authors, dbo.BooksCatalog.Volume, dbo.BooksCatalog.EditionName, dbo.BooksCatalog.HCover DESC , dbo.InvoicesComposition.EditionID



(с выражением лица)
Так и будет, когда единственным параметром останется жить @OperationID, а идентификатором накладной - поле OperationID (без _Old и без связки по трем полям, жить старой конструкции осталось максимум неделю.)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781077
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"советы", я, наверно, все-таки оставил бы в силе.
А по существу вопроса - не знаю.
Попробуй для вычислимых полей использовать полную квалификацию для quantity - dbo.InvoicesComposition.quantity

(с выражением лица)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781085
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовала, изменила SELECT. То же самое, -2147217864 Row cannot be located for update. Some values may have been changed since it was last read.

[quot VictoshaПопробуй для вычислимых полей использовать полную квалификацию для quantity - dbo.InvoicesComposition.quantity
[/quot] Имеется в виду, что в SELECT'е надо вместо звездочки назвать все поля по имени? Сейчас попробую.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781095
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь полный перечень полей открытым текстом и простой INNER JOIN.
Все равно та же ошибка...
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781100
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга_ТПопробовала, изменила SELECT. То же самое, -2147217864 Row cannot be located for update. Some values may have been changed since it was last read.

[quot VictoshaПопробуй для вычислимых полей использовать полную квалификацию для quantity - dbo.InvoicesComposition.quantity
Имеется в виду, что в SELECT'е надо вместо звездочки назвать все поля по имени? Сейчас попробую.[/quot]
нет
имеется ввиду вместо
ROUND(dbo.InvoicesComposition.Price,2)*Round(quantity,2) AS CostM,

написать
ROUND(dbo.InvoicesComposition.Price,2)*Round(dbo.InvoicesComposition.quantity,2) AS CostM,
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32781877
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделала. Характер поведения формы тот же самый, только перед сообщением о возможной попытке одновременного изменения данных несколькими данными выскакивает еще одно сообщение:

Invalid object name 'IRowset'

Что это за зверь, я не поняла. Какой-то конфликт в драйвере при обращении к серверу? Пожалуйста, подскажите, куда рыть.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32782278
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднимаю тему.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32782295
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если новую форму создать, дать ей тот же источник и зафиксировать параметры
ошибка повторяется?


(с выражением лица)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32782320
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При работе с рекордсетом через форму только набор ошибок фатальнее. Я катаю этот рекордсет через процедуру, он и в процедуре на rst.Update глючит.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32782438
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже не знаю, что сказать...
может с команду синхронизации проверить?


(с выражением лица)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32782590
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять-таки, без формы и никакой команды синхронизации нет. Сам рекордсет из-под аксеса бастует и на 'IRowset' ссылается. А что это такое, я толком понять не могу и никто мне не отвечает, видать, что-то тривиальное...
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32782791
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднимаю тему.
Что означает ошибка
Invalid object name 'IRowset'
?
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32782850
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга_ТОпять-таки, без формы и никакой команды синхронизации нет. Сам рекордсет из-под аксеса бастует и на 'IRowset' ссылается. А что это такое, я толком понять не могу и никто мне не отвечает, видать, что-то тривиальное...

так это не на форме?
а при чем тогда "назначена uniquetable"?

что-то я не уверен, что что-нибудь получится...

покажи как формируешь, открываешь и изменяешь рекордсет...

( он должен быть adOpenKeySet, с "клиентским курсором", и заказан тип блокировки adLockOptimistic )
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32783103
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в форме при назначении источника - стоит Unick Table, а в модельном коде, соответственно, такой параметр не нужен. Женская интуиция подсказывает мне, что проблема совсем не в форме. Полученный аксесом рекордсет больной.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Set conn = New ADODB.Connection
conn.Provider = "MSDataShape"
conn.ConnectionString = "DATA PROVIDER=SQLOLEDB.1;SERVER=MyServer;APP=Microsoft Access;DATABASE=MyBase;Trusted_Connection=Yes"
rst.CursorLocation = adUseClient
conn.Open
'  @OperarionID int, @DepartmentID int, @InvoiceTypeID int
rst.Open ("exec InvoicesCompositionP 49748, 1, 52"), conn, adOpenDynamic, adLockOptimistic,  1 

Debug.Print rst!EditionID & " " & rst!Quantity
rst.MoveNext
Debug.Print rst!EditionID & " " & rst!Quantity
rst!Quantity = rst!Quantity +  5 
rst.Update
Debug.Print rst!EditionID & " " & rst!Quantity
На rst.Update все это начинает ругаться насчет изменений, внесенных другим пользователем.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32783129
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скупая мужская интуиция подсказывает мне, что что-то здесь не тут.
Как могут сочетаться adUseClient и adOpenDynamic?
Правда не исключено, что к делу это не относится.
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32783251
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ЛП
это точно - не относится...

2 Ольга_Т

Кажется, все не так страшно, как мне сначала подумалось…

Проблема, кажется, именно в Unique Table и Resync
(интересно - что же это такое - образование?)

Как мне показалось, Ваша процедура должна возвращать одну запись для заказанных параметров, при этом соответствующие поля не подлежат редактированию. Если эти предположения верны – то ту же процедуру можно использовать как Resync Command. Если я не прав, то желательно написать специальную процедуру, которая будет испльзоваться в этом качестве…

Попробуйте так:
rst.Open ("exec InvoicesCompositionP 49748, 1, 52"), conn, adOpenDynamic, adLockOptimistic, 1

rst.Properties("Unique Table")=”dbo.InvoicesComposition”

rs.Properties("Resync Command") = " exec InvoicesCompositionP 49748, 1, 52"
Debug.Print rst!EditionID & " " & rst!Quantity
rst.MoveNext
Debug.Print rst!EditionID & " " & rst!Quantity
rst!Quantity = rst!Quantity + 5
rst.Update
rs.Resync adAffectCurrent
Debug.Print rst!EditionID & " " & rst!Quantity

Это должно бы заработать…

<… тут почиканы сопли…>



(с выражением лица)
...
Рейтинг: 0 / 0
Ошибка при редактировании данных в форме
    #32783276
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha
Это должно бы заработать…


хотя все же лучше нарисовать "честную" процедуру для синхронизации...
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка при редактировании данных в форме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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