Вопрос? как получить выбраные данные на починеной форме в поле MEMO

Ystinov
Дата: 02.01.2012 03:18:00
Доброго времени суток всем! С наступившим новым 2012 годом Вас.

суть дела: есть форма из неё открываю форму с подчиненной отобранной по нужному критерию в подчиненной есть поле в котором ставим галочки т.е. делаем выбор.
Как по нажатию клавиши посмотреть что выбрано что бы передать значения выбранных строк в поле(тип данного поля в таблице MEMO т.е. значение записей в базе склеиваются в единую строку)на первой форме.
Программист-Любитель
Дата: 02.01.2012 12:35:21
Хранить взведенные галочки, "склеенную" строку из всех выбранных опций получать ф-ией в запросе.
Ystinov
Дата: 02.01.2012 13:32:13
Программист-Любитель,

Точней немогу понять как получить доступ к данным. т.е. Могу создать запрос который вырежет табличку со взведеными флажками но как из результата который вернет запрос достать данные что бы можно было в цикле склеить Str=Str & ", " & Result
ё
Дата: 03.01.2012 14:30:25
Ystinov
Программист-Любитель,

Точней немогу понять как получить доступ к данным. т.е. Могу создать запрос который вырежет табличку со взведеными флажками но как из результата который вернет запрос достать данные что бы можно было в цикле склеить Str=Str & ", " & Result

например, так - Объединение значений
Ystinov
Дата: 03.01.2012 20:40:36
Всем СПАСИБО большое на корябал уже вот код правдо ужасно черновой но если что могу попытаться объяснить если кому надо
Private Sub bt_Ok_close_fr_Click()
Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim str_my As String
    Dim str As String
Me.Pri_tab_diagnoz.Form.Requery
    str = "SELECT *FROM tab_diagnoz WHERE (((tab_diagnoz.tip_diagnoza)=""" & Me.OpenArgs & """)and (tab_diagnoz.vibor)=true);"
    Set db = CurrentDb()
    Set rst = db.OpenRecordset(str, dbOpenDynaset)
   'Set rst = db.OpenRecordset("tab_diagnoz", dbOpenDynaset) 'dbOpenSnapshot)
   If rst.RecordCount <> 0 Then
    rst.MoveFirst
    
    Do While Not rst.EOF
        str_my = str_my & rst![kod] & " : " & rst![diagnoz] & " "
        rst.MoveNext
    Loop
 Select Case Me.OpenArgs
    Case "Логопедический"
  '  [Form_input_regestr_boln].SetFocus
    [Form_input_regestr_boln].diagnoz_logoped.Value = str_my
    Case "Психиатрический"
    [Form_input_regestr_boln].diagnoz_psihiatricheski.Value = str_my
    Case Else
    MsgBox "не передан пареметр фильтра типа диагноза", vbInformation, " Сообщение"
    End Select
     '  [Form_input_regestr_boln].Refresh
'        [Form_input_regestr_boln].Requery
  '  MsgBox str_my, vbInformation, " МЕССЕЖ"
 '   rst.MoveFirst
    
  '  Do While Not rst.EOF
        'rst.[vibor] = "False"
  '      rst.MoveNext
 '   Loop
    Else
    MsgBox "Диагноз не выбран", vbInformation, " Сообщение"
   ' Select Case Me.OpenArgs
   ' Case "Логопедический"
  '  [Form_input_regestr_boln].SetFocus
  '  [Form_input_regestr_boln].diagnoz_logoped.Value = ""
 '   Case "Психиатрический"
 '   [Form_input_regestr_boln].diagnoz_psihiatricheski.Value = ""
 '   Case Else
 '   MsgBox "не передан пареметр фильтра типа диагноза", vbInformation, " Сообщение"
 '   End Select
    End If
    'нужно сбросить все флаги для нового выбора диагноза
    DoCmd.RunSQL ("UPDATE tab_diagnoz SET tab_diagnoz.vibor = False WHERE (((tab_diagnoz.tip_diagnoza)=""" & Me.OpenArgs & """));")
    Me.Pri_tab_diagnoz.Requery
    rst.Close
    db.Close
    Set db = Nothing




On Error GoTo Err_bt_Ok_close_fr_Click


    DoCmd.Close

Exit_bt_Ok_close_fr_Click:
    Exit Sub

Err_bt_Ok_close_fr_Click:
    MsgBox Err.Description
    Resume Exit_bt_Ok_close_fr_Click
    
End Sub


P.S. еще не плохо бы Админам форума прикрутить кнопку редактировать а то пометить тему как решено даже незнаю как.
Программист-Любитель
Дата: 03.01.2012 21:50:17
А теперь сходите-ка в ФАК и прочитайте, почему вместо RunSQL рекомендуется Execute.
ё
Дата: 03.01.2012 22:30:33
Программист-Любитель
А теперь сходите-ка в ФАК ...

туда же ))
1
Form_input_regestr_boln - плохой способ обращения к форме
2
...по ссылке, все же по-проще был способ контакенации
ну да ладно..

раз уж сделали цикл по рекордсету, то в нём бы и "поснимали" флаг ... - зачем ещё запрос ?
3
On Error GoTo Err_bt_Ok_close_fr_Click - строго "для мебели"
Ystinov
Дата: 04.01.2012 15:09:06
Да все в роде бы сделал но тут остались точнее появились вопросы еще

Form_input_regestr_boln - плохой способ обращения к форме --
обращение такое потому что знаний в этой области практически равны нулю

2
...по ссылке, все же по-проще был способ контакенации
ну да ладно..

раз уж сделали цикл по рекордсету, то в нём бы и "поснимали" флаг ... - зачем ещё запрос ?

не очень понял если можно ткните прямо носом просто думал что сначало надо было забрать выбранные данные в переменную потом почистить табличку или что то не так Можно было обойтись короче?

3
On Error GoTo Err_bt_Ok_close_fr_Click - строго "для мебели" - нет это не для мебели форма закрываясь переносит данные в поле на предыдущей форме
ё
Дата: 04.01.2012 15:32:41
Ystinov
Да все в роде бы сделал но тут остались точнее появились вопросы еще

Form_input_regestr_boln - плохой способ обращения к форме --
обращение такое потому что знаний в этой области практически равны нулю

2
...по ссылке, все же по-проще был способ контакенации
ну да ладно..

раз уж сделали цикл по рекордсету, то в нём бы и "поснимали" флаг ... - зачем ещё запрос ?

не очень понял если можно ткните прямо носом просто думал что сначало надо было забрать выбранные данные в переменную потом почистить табличку или что то не так Можно было обойтись короче?

3
On Error GoTo Err_bt_Ok_close_fr_Click - строго "для мебели" - нет это не для мебели форма закрываясь переносит данные в поле на предыдущей форме

1
подробности тут - http://www.sql.ru/faq/faq_topic.aspx?fid=156
2
в случае использования АДО-рекордсета (как по ссылке тут 11855638)
вся склейка "в строку" с разделителем, делается одним вызовом метода GetString
Dim Adors As New ADODB.Recordset
    Adors.Open "select nom from Table1 where код=" & ID, CurrentProject.Connection, , , adCmdText
    If Not Adors.EOF Then FieldToLine = Adors.GetString(, , , ";")


Ystinov
не очень понял если можно ткните прямо носом просто думал что сначало надо было забрать выбранные данные в переменную потом почистить табличку или что то не так Можно было обойтись короче?

можно сразу, в том же цикле и "забрать данные" и "почистить табличку"
    Do While Not rst.EOF
        str_my = str_my & rst![kod] & " : " & rst![diagnoz] & " "

        rst.edit
        rst.fields("vibor") = false
        rst.Update

        rst.MoveNext
    Loop

так как вы сделали - это не ошибка, вообщем-то,
просто, имхо, и покороче, и почитабельней ... но вообще - на любителя ))

3
On Error GoTo Err_bt_Ok_close_fr_Click - указывает, что в случае ошибки - перейти на метку обработчика ошибок - Err_bt_Ok_close_fr_Click
у вас эта команда - предпоследней строкой в коде, т.е. - все ошибки которые произойдут ДО этой строки - не обрабатываются, т.е. выполнение кода проста вылетит ...