Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по рекордсэту!
 
 автор: П.Полиграфович   (25.06.2008 в 17:54)   личное сообщение
 
 

На форме поле со списком групп, хочу забирать значение для др.поля на форме, при выборе опред. группы.
Не пишет ошибки, и не обрабатывает!?? В чем проблема не понимаю.
Подскажите, что-нибудь


Private Sub Группа_AfterUpdate()
Dim recst As Recordset
    Set recst = CurrentDb.OpenRecordset("SELECT [SumInDay] FROM [Группы] WHERE [Группа] ='" & Me.Группа & "'")
    If recst.RecordCount <> 0 Then
        With rst
             Me!Сумма = recst!SumInDay
        End With
    End If
    recst.Close
    Exit Sub

Может какие-то другие методы есть ..

  Ответить  
 
 автор: osmor   (26.06.2008 в 09:42)   личное сообщение
 
 

Рекордсет точно не пустой?
зачем With rst ?
Может есть смысл в поле со списком в котором группы отображаются добавить столбец с данными из поля SumInDay, и данные из этого столбца подставлять в поле?
=me.группа.columns(2) ' 2 порядковый номер столбца начиная с 0

  Ответить  
 
 автор: KrukVN   (26.06.2008 в 10:08)   личное сообщение
 
 

Может мешать нЕверное заклинание:

With rst
...
End With

  Ответить  
 
 автор: ГлазастыйМышь   (26.06.2008 в 10:41)   личное сообщение
 
 

а зачем здесь открывать рекордсет?
Может лучше так

Private Sub Группа_AfterUpdate() 
Dim lSum as Double 
    lSum  = nz(DLookup("SumInDay","Группы","Группа ='" & Me.Группа & "'"),0) 
    If lSum <> 0 Then 
       Me.Сумма = lSum  
    End If 
Exit Sub 

  Ответить  
 
 автор: KrukVN   (26.06.2008 в 11:05)   личное сообщение
 
 

уж лучше рекордсет чем эти DLookup'ы
я эти D-функции стараюсь вообще не замечать :)

  Ответить  
 
 автор: П.Полиграфович   (26.06.2008 в 13:29)   личное сообщение
 
 

Скопирил, не работает через процедуру. Что еще более странно, что при подстановке в поле Сумма следующего:
=DLookUp("[SumInDay]";"Группы";"[Группа] = '" & Формы!Заказы!Группа & "'")
тоже ни на что не ругается и не подставляет значение? Аномалия

  Ответить  
 
 автор: П.Полиграфович   (26.06.2008 в 11:35)   личное сообщение
 
 

Рекордсет не пустой. Таблица Группы-->в ней 3 поля-->код, группа, SumInDay(Тип денежный) все заполнено.
Подставил в поле сумма выражение =me.группа.column(2) пишет #Имя? хотя в combobox "группа" сейчас отображаются 2 столбца: группа и Suminday
With убрал. ???
Может как-то через OpenArg и почему все же recordset не работает??

  Ответить  
 
 автор: FORMAT   (26.06.2008 в 11:47)   личное сообщение
 
 

If recst.RecordCount <> 0 Then
Me.Сумма = 0
do while not recst.EOF
Me.Сумма = me.Сумма+recst!SumInDay
recst.movenext
loop

End If

  Ответить  
 
 автор: osmor   (26.06.2008 в 11:50)   личное сообщение
10 Кб.
 
 

пример

  Ответить  
 
 автор: П.Полиграфович   (26.06.2008 в 13:16)   личное сообщение
97 Кб.
 
 

Osmor: так я и сделал. Разобрался <Me. > не надо было ставить, но данные теперь не заносятся в таблицу "Заказы", т.к. датасорс изменился с поля "Сумма" на "=Группа.column(2)"
Как теперь это решить?? Базу прикрепил, подскажите что не так
Format:
НЕ Работает А зачем мне по записям переходить, у меня же одна запись?
Что не так с рекордсетом??

  Ответить  
 
 автор: osmor   (26.06.2008 в 17:38)   личное сообщение
 
 

Что с рекордсетом.... Рекордсет у вас по ходу пустой.
Поскольку присоединенный столбец в поле со списком "Группа" это столбец 1, то поле со списком принимает значения из поля КОД. т.е.
Me!Группа - вернет код который соответвует выбранной группе (1,2,3 и т.п.)
т.е. выш рекордсет будет пустой, т.е. в таблице нет записей у которых поле Группа равнялось бы числу.

ЧТо бызаработал Ваш вариант код должен быть таким

lSum = Nz(DLookup("SumInDay", "Группы", "код = " & Me!Группа), 0)
       Me![Сумма].Value = lSum



или если реализовывать вариант с столбцом с ценой в поле со списком

Private Sub Группа_AfterUpdate()
Me![Сумма].Value = Nz(Me!Группа.Column(2), 0)
End Sub

  Ответить  
 
 автор: П.Полиграфович   (27.06.2008 в 15:35)   личное сообщение
94 Кб.
 
 

Да Osmor вы как всегда правы! Все зависит от номера присоединенного столбца, его типа данных и совместимого типа данных поля, к которому прикрепляем => код соответсвующий.
Делал через поле подстановки (Access организует связь и прикрепяет индекс. поле)

 lSum = Nz(DLookup("S", "Группы", "[Код] = '" & Me.Группа & "'"), 0)

выдавал типичную ошибку для DlookUp "Предыдущая операция прервана пользователем"

При использовании селекта выбирающего только одно поле (в моем случае) [группы]работает, как

lSum = Nz(DLookup("SumInDay", "Группы", "Группа = " & Me!Группа), 0) 
 Me![Сумма].Value = lSum

так и:

Private Sub Группа_AfterUpdate()
Dim recst As Recordset
    Set recst = CurrentDb.OpenRecordset("SELECT [SumInDay] FROM [Группы] WHERE [Группа] ='" & Me.Группа & "'")
    If recst.RecordCount <> 0 Then
        Me!Сумма = recst!SumInDay
    End If
    recst.Close
    Exit Sub
End Sub

НО что не могу понять?:
При использовании этих двух способов при выполнении кода:

strSQL = "INSERT INTO [detail] ...
...
         "" & Me!Сумма & ", " & Me!Группа& ");"
                       With DoCmd
                       .SetWarnings False
                       .RunSQL strSQL

выдает следующее: файл параметр.bmp
т.е. поле "группа" он обрабатывает, как параметр. ПОЧЕМУ?
Спасибо за информацию

  Ответить  
 
 автор: Кабан   (27.06.2008 в 15:58)   личное сообщение
 
 

вместо

Me!Сумма & ", " & Me!Группа& ");" 
возможно надо (Me!Группа - текстовое?)

Me!Сумма & ", '" & Me!Группа & "');" 

  Ответить  
 
 автор: П.Полиграфович   (27.06.2008 в 18:03)   личное сообщение
 
 

Точно, и всего то нужно было, оба варианта стали рабочими - с рекордсетом и DlookUp-ом..

  Ответить  
 
 автор: osmor   (27.06.2008 в 16:19)   личное сообщение
 
 

зачем вы поменяли присоединенный столбец?

  Ответить  
 
 автор: П.Полиграфович   (27.06.2008 в 18:42)   личное сообщение
 
 

Osmor, я сделал еще 2 варианта, в которых связь таблиц "Заказы" и "Группы" - по полям соот-но [группа] и [группа] (а не [группа] и [код]), что потребовало изменить тип данных поля [группа] таблицы "заказы" на строковый, точнее да поменял в рекордсорсе
SELECT Группы.Группа, Группы.Код 

с присоединенный столбец "2" на "1"
а выбор значения в каждом из вариантов - через dlookup и recordset.
Только в таблицу заказы вместо кода группы улетает наименование группы.
Это не есть хорошо???
При связи по полю [код], все тоже работает и через рекордсет:

Private Sub Группа_AfterUpdate()
Dim recst As Recordset
    Set recst = CurrentDb.OpenRecordset("SELECT [SumInDay] FROM [Группы] WHERE [Код] =" & Me.Группа & "")
    If recst.RecordCount <> 0 Then
        Me!Сумма = recst!SumInDay
    End If
    recst.Close
    Exit Sub

и через Dlookup
и через Группа.column(2), в общем все trabaja!
Как говорится Mucho gracias por todo

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList