powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Recordset и Union
14 сообщений из 14, страница 1 из 1
Recordset и Union
    #36492078
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем создаю рекордсет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Set PriceForm = Form2
Set PriceChildGrid = PriceForm.TDBGrid2

SourceBase = "D:\Spider 7\Прейскурант\DataBase.mdb;"

connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SourceBase & ";Persist Security Info=False"
connection.Open

SQL = "SELECT Прейскурант.Код_пр, Прейскурант_материалы.Название_работы, Прейскурант_под.Кол, Прейскурант_материалы.ЕдИзм, Прейскурант_материалы.Цена, [Кол]*[Цена] AS ИтогоЦена, Прейскурант_материалы.Поставщик, Прейскурант_материалы.Валютная, Прейскурант_под.Код_пр_под " & _
        "FROM Прейскурант INNER JOIN (Прейскурант_материалы INNER JOIN Прейскурант_под ON Прейскурант_материалы.Код_материала = Прейскурант_под.Код_материала) ON Прейскурант.Код_пр = Прейскурант_под.Код_пр " & _
        "ORDER BY Прейскурант_под.Код_пр_под DESC " & _
        "UNION ALL " & _
        "SELECT Прейскурант.Код_пр, 'Організаційно-технічний супровід встановлення обладнання' AS Название_работы, CVar([ТехСопр])*100 AS Кол, '%' AS ЕдИзм, Null AS Цена, Sum(Прейскурант_под.Кол*Прейскурант_материалы.Цена*Прейскурант.ТехСопр) AS ИтогоЦена, Null AS Поставщик, Null AS Валютная, Прейскурант.Код_пр*(-1) AS Код_пр_под " & _
        "FROM Прейскурант INNER JOIN (Прейскурант_материалы INNER JOIN Прейскурант_под ON Прейскурант_материалы.Код_материала = Прейскурант_под.Код_материала) ON Прейскурант.Код_пр = Прейскурант_под.Код_пр " & _
        "GROUP BY Прейскурант.Код_пр, CVar([ТехСопр])*100 " & _
        "ORDER BY Код_пр_под DESC"

rsChildPrice.CursorLocation = adUseClient
rsChildPrice.CursorType = adOpenDynamic

rsChildPrice.LockType = adLockOptimistic
rsChildPrice.Open SQL, connection

Set PriceChildGrid.DataSource = rsChildPrice

В выборке записей используется запрос на объединение и как следствие если в гриде редактировать запись то возникает ошибка: «Недостаточно сведений из основной таблицы для обновления»
Пробовал на событие BeforeColUpdate вешать запрос на обновление затем ставить отмену BeforeColUpdate и вызывать Requery но, увы, в данном событие нельзя вызывать Requery а следствие отмены события приводи к тому что последующие события AfterColUpdate и т.д. не вызываются.
Делать дополнительную форму для редактирования записи очень не хочется.
Может кто-то сталкивался с такой проблемой? Подскажите, как лучше выйти из сложившийся ситуации.
...
Рейтинг: 0 / 0
Recordset и Union
    #36492186
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

Поле "Прейскурант.Код_пр" объявлено как ключ таблицы?
...
Рейтинг: 0 / 0
Recordset и Union
    #36492291
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

...
Рейтинг: 0 / 0
Recordset и Union
    #36492298
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

А если не отменять BeforeColUpdate, но перехватить ошибку и не выводить ее (при этом сделав собственный апдейт)?
...
Рейтинг: 0 / 0
Recordset и Union
    #36492306
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно поле 'Організаційно-технічний супровід встановлення обладнання' нужно было бы добавить в главный грид и проблемы бы не было но захотели именно в таком виде но если у меня не получится то сделаю правильно.
...
Рейтинг: 0 / 0
Recordset и Union
    #36492309
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBkaКонечно поле 'Організаційно-технічний супровід встановлення обладнання' нужно было бы добавить в главный грид и проблемы бы не было но захотели именно в таком виде но если у меня не получится то сделаю правильно.
Щас попробую
...
Рейтинг: 0 / 0
Recordset и Union
    #36492314
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProTpaBka,

А если не отменять BeforeColUpdate, но перехватить ошибку и не выводить ее (при этом сделав собственный апдейт)?
Щас попробую
...
Рейтинг: 0 / 0
Recordset и Union
    #36492345
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
Private Sub TDBGrid2_Error(ByVal DataError As Integer, Response As Integer)
On Error Resume Next
Response =  0 
rsChildPrice.Requery
End Sub
Если недобавлять On Error Resume Next то выпазит на rsChildPrice.Requery все та же ошибка:
«Недостаточно сведений из основной таблицы для обновления»
а так курсор невозможно сдвинуть с текущей записи.
обновления нет.
...
Рейтинг: 0 / 0
Recordset и Union
    #36492355
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

погодите пока делать Requery, это отдельная тема

возможно ли добиться ситуации, что ваш апдейтер правильно апдейтит базу и при этом пользователю не вылезает ошибка?
...
Рейтинг: 0 / 0
Recordset и Union
    #36492359
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче буду делать как оно должно быть.
Добалю новое поле в главный грид с датафилд=ТехСопр
А из запроса выкину:
"UNION ALL " & _
"SELECT Прейскурант.Код_пр, 'Організаційно-технічний супровід встановлення обладнання' AS Название_работы, CVar([ТехСопр])*100 AS Кол, '%' AS ЕдИзм, Null AS Цена, Sum(Прейскурант_под.Кол*Прейскурант_материалы.Цена*Прейскурант.ТехСопр) AS ИтогоЦена, Null AS Поставщик, Null AS Валютная, Прейскурант.Код_пр*(-1) AS Код_пр_под " & _
"FROM Прейскурант INNER JOIN (Прейскурант_материалы INNER JOIN Прейскурант_под ON Прейскурант_материалы.Код_материала = Прейскурант_под.Код_материала) ON Прейскурант.Код_пр = Прейскурант_под.Код_пр " & _
"GROUP BY Прейскурант.Код_пр, CVar([ТехСопр])*100 " & _
"ORDER BY Код_пр_под DESC"
...
Рейтинг: 0 / 0
Recordset и Union
    #36492369
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProTpaBka,

погодите пока делать Requery, это отдельная тема

возможно ли добиться ситуации, что ваш апдейтер правильно апдейтит базу и при этом пользователю не вылезает ошибка?
Ошибка не вылезает, но курсор невозможно передвинуть с текущей записи.
...
Рейтинг: 0 / 0
Recordset и Union
    #36493149
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все таки получилось с небольшим извратом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub TDBGrid2_BeforeColUpdate(ByVal ColIndex As Integer, OldValue As Variant, Cancel As Integer)
SQL = "UPDATE Прейскурант_под SET ........."
connection.Execute SQL
Cancel =  1 
Timer1.Interval =  10 
End Sub

Private Sub Timer1_Timer()
rsChildPrice.Requery
Timer1.Interval =  0 
End Sub
...
Рейтинг: 0 / 0
Recordset и Union
    #36493215
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

Собственно, я и хотел преложить вам делать requery по таймеру после того, как вы добъетесь апдейта без ошибки. Но вы ввели меня в заблуждение, сказав, что не получается выйти из строки.

ПыСы - таймер лучше выключить до Requery, а то он может сработать еще несколько раз
...
Рейтинг: 0 / 0
Recordset и Union
    #36493260
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProTpaBka,
ПыСы - таймер лучше выключить до Requery, а то он может сработать еще несколько раз
ok спасибо
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Recordset и Union
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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