Страница: 1 |
Страница: 1 |
Вопрос: Excel+Access
Добавлено: 27.05.08 20:30
Автор вопроса: Helgi
Доброго времени суток!
Пишу приложение для работы с access базой данных в excel. У меня 5 таблиц, 3 из них справочники, 2
главных. В начале работы приложения я открываю все 5 таблиц(работаю через Recordset) и потом по мере
надобности с манипулирую ими.Так вот, я столкнулся с такой проблемой: Для 3-х таблиц(справочников)
удаление/редактирование/добавление работает, а для главных ругается что таблица открыта только для чтения,
хотя код для открытия набора данных у меня одинаковый для всех таблиц, код на редактирование/удаление/
добавление тоже идентичен, все таблицы лежат в одном MDB файле... с чем это может быть связано?
Пример кода:
'для таблицы-справочника
Sub SotovyUpdate() 'Обновление
QS = "SELECT Marka.M_Marka, Model.MOD_MODEL, Sotovy.S_Opis,
Sotovy.S_Foto,Sotovy.S_Marka,Sotovy.S_Model FROM Model INNER JOIN (Marka INNER JOIN Sotovy ON Marka.M_ID =
Sotovy.S_Marka) ON Model.MOD_ID = Sotovy.S_Model;"
Set RSSot = DB.OpenRecordset(QS, dbOpenDynaset, dbDenyRead + dDenyWrite)
End Sub
With RSSot
.AddNew 'добавление
.Fields("S_MARKA").Value = MARKA_ID
.Fields("S_MODEL").Value = MODEL_ID
.Fields("S_OPIS").Value = SOPIS
.Fields("S_FOTO").Value = path
.Update
End With
'для главной таблицы
Sub SkPokUpdate()
QS = "SELECT M_MARKA,MOD_MODEL,SKPOK_KOLVO,SKPOK_CENA,SKPOK_DATA,S_OPIS,S_FOTO FROM
SkladPok,Model,Marka,Sotovy "
QS = QS & "WHERE(SKPOK_SOTID = S_ID AND S_MARKA = M_ID AND S_MODEL = MOD_ID)"
Set RSSkPok = DB.OpenRecordset(QS, dbOpenDynaset, dbDenyRead + dDenyWrite)
End Sub
With RSSkPok
.AddNew
.Fields("SKPOK_SOTID").Value = S_ID
.Fields("SKPOK_KOLV").Value = Kolv
.Fields("SKPOK_CENA").Value = Cena
.Fields("SKPOK_Data").Value = Data
.Update
End With
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Holsten
Вопросов: 5
Ответов: 100
Профиль | | #1
Добавлено: 27.05.08 20:49
Попробуй для проверки убрать из секции SELECT те поля, которые имеют отношение к "справочникам".
Номер ответа: 2
Автор ответа:
Helgi
Вопросов: 1
Ответов: 2
Профиль | | #2
Добавлено: 27.05.08 21:09
Хм... так работает... а как это можно исправить?
Номер ответа: 3
Автор ответа:
Helgi
Вопросов: 1
Ответов: 2
Профиль | | #3
Добавлено: 27.05.08 21:14
Огромное спасибо) В принципе, исправил) Но если есть более рациональные предложения, буду очень рад)
Номер ответа: 4
Автор ответа:
Holsten
Вопросов: 5
Ответов: 100
Профиль | | #4
Добавлено: 27.05.08 21:26
Попробуй связать поля в секции FROM через INNER JOIN. И кроме того, как-то извратно обновлять/добавлять записи через SELECT с последующим апдейтом рекордсета. Может сразу "INSERT INTO SkladPok (SKPOK_KOLVO,SKPOK_CENA,SKPOK_DATA) VALUES (_,_,_) ...."