Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / спец контрол / 6 сообщений из 6, страница 1 из 1
14.03.2004, 15:40
    #32441136
Combo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
спец контрол
SQL 2k + .mdb 2k

задача такая:

документ (скажем расходный ордер), в нем есть комбобокс для выбора статьи расхода. Со временем количество статей превысило 4 десятка, т.е. выбирать статью стало делом непростым, да и в отчетах стало сложно разбираться.
Классифицировал статьи ( создал двух уровневую иерархическую таблицу ), для выбора статьи использую treeview, для отображения в форме названия саттьи - текстбох.
Кроме того в combo есть другая проблема - если какой то пункт (статья) больше не должна выбираться пользователем (отмечена как удаленная, но физически находящаяся в таблице), она отсутствует в списке, и, следовательно в старых документех, где она использовалась, комбобокс будет пустым, что не есть правильно.
В комбинации текстбокс + treeview это решить легко, а в комбо как?
Оператор просит сделать возможность использовать подстановку значения по первым буквам, как в комбобоксе, т.к. основные статьи, которые используются регулярно он помнит хорошо, а кол-во по кассе операций в день - несколько десятков и вопрос быстроты ввода очень актуален.
Хотелось пслушать мнения, как можно решить эту задачу.
...
Рейтинг: 0 / 0
14.03.2004, 15:56
    #32441141
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
спец контрол
естли ты пометил
как удаленная
значить тебе она
не нужна. так?
сразу возникает
вопрос; а почему
тогда видны старые
документы, где
используется
помеченная на удаление
статья?
...
Рейтинг: 0 / 0
14.03.2004, 16:00
    #32441143
zexon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
спец контрол
ясен перец - не выкидывать же документы из архивов
...
Рейтинг: 0 / 0
14.03.2004, 16:07
    #32441144
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
спец контрол
самый постой способ - повесить(визуально) на комбобокс в котором идёт выборка, простое текстовое поле, в котор. отображаются все (статьи) в том числе и помеченные как удалённые. Задаёшь этому контролу Enabled=false, Locked=true,
Комбобокс сжать на ширину открывающ. стрелочки.
Получается что польз. из комбобокса выбир. только (активные) позиции, а в полном списке он видит и удалённые.
Но такой способ прокатит только в ленточной форме.
...
Рейтинг: 0 / 0
14.03.2004, 16:19
    #32441149
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
спец контрол
вот и пусть будут
пустыми.
они все равно уже
не нужны, раз
пометили на удаление.
значить и пустота их
не должна пугать.
им по барабану шо
там будет высвечиваться
пусто или густо.
в текучке у тебя не
будет пустот.
а вот естли им
надоть обратитси к архиву
тады сделай им
отдельну форму и там поля
со списком уже не будет
и будет усе видна.
...
Рейтинг: 0 / 0
14.03.2004, 16:50
    #32441161
enter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
спец контрол
может кого и устраивают решения, как предлагает хт
я в свое время сделал так:

при загрузке формы заполняем
поля ExpenceDescr и ExpenceID из базы
а также массив

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Dim modvAr

Public Sub FillList()
    Dim rst As ADODB.Recordset
    Dim cmd As ADODB.Command
    Dim s
    
    On Error GoTo e
    Select Case Me!docid
        Case  2 ,  7 
            s =  "In" 
        Case  1 ,  6 
            s =  "Out" 
    End Select
    Set cmd = New ADODB.Command
    With cmd
       Set .ActiveConnection = ProjectCurCnn
       .CommandType = adCmdStoredProc
       .CommandText =  "ExpencesList" 
        Set rst = .Execute(Parameters:=Array(s,  0 ,  0 ))
        modvAr = rst.GetRows( 2  ^  15 )
   End With
ex:
    On Error Resume Next
    rst.Close
    Set rst = Nothing
    Set cmd = Nothing
    Err.number =  0 
    Exit Sub
e:
    MsgBox Err.number &  ":  "  & Err.Description
    Resume ex
End Sub

'при изменении текста в поле ExpenceDescr

Private Sub ExpenceDescr_Change()
    If modintKeyCode = vbKeyBack _
         Or modintKeyCode = vbKeyDelete _
            Or modintKeyCode = vbKeySpace _
               Or modintKeyCode = vbKeyReturn _
                  Then Exit Sub
               
    Dim l As Long
    Dim s As String
    Dim lid As Long
    
    s = Me!ExpenceDescr.Text
    For l =  0  To Nz(UBound(modvAr,  2 ),  0 )
        If (modvAr( 1 , l) Like s &  "*" ) Then
           Me!ExpenceDescr = modvAr( 1 , l)
           lid = modvAr( 0 , l)
           Exit For
         End If
    Next
    With Me!ExpenceDescr
        .SelStart = Len(s)
        .SelLength = Len(Me!ExpenceDescr.Text) - Len(s)
    End With
    ExpenceID = lid   
End Sub

Так как в списке (в массиве) нет удаленных элемнтов они не подставляются Получается подстановка такая же как в комбобоксе
а для выбора элемента из списка используется отдельный листбокс или тривью
надо еще организовать проверку введенного текста - можно на выгрузке формы, перед записью документа в БД

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Function CheckExpence() As Boolean
    If (Nz(Me!ExpenceID,  0 ) <>  0 ) Then Exit Function
    Dim l As Long
    Dim s As String
    Dim lid As Long
    
    On Error Resume Next
    s = Me!ExpenceDescr
    For l =  0  To Nz(UBound(modvAr,  2 ),  0 )
        If (modvAr( 1 , l) = s) Then
           lid = modvAr( 0 , l)
           Exit For
         End If
    Next
    If lid =  0  Then
       MsgBox  "Не правильно выбрана статья." , vbExclamation, conMsgTitle
       CheckExpence = True
    End If
    ExpenceID = lid
    Err.number =  0 
End Function
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / спец контрол / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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