Sub find(namefio As String)
Data1.Recordset.FindLast "[Name] = '" & namefio & "'"
If Data1.Recordset.NoMatch Then MsgBox "Ф.И.О. не найдено"
Text1 = Data1.Recordset.AbsolutePosition + 1
End Sub
использовать
....
Data1.DatabaseName=база аксеса ' типа-->(App.Path & "\Base\Base.mdb")
предварительно у Text2 и DBGrid1 выставить DataSource=Data1
Text2.DataField=Name
Data1.RecordSource = "select * from какаято _таблица" или так Data1.RecordSource = "select ID as [Дело №] , Name as [Фамилия Имя Отчество] from какаято _таблица"
Data1.Refresh
....
call find ("Вася Пупкин")
....
DBGrid тебе в помошь и Data1 тоже(для простоты работы)
Вариантов тут конучно много. Можно поийти и путем ListView. Я допустим для осуществления поиска по ListView не использую поиск непосредственно в самом контроле, а ищу просто с рекордсета. Например если в форме поиска введен определенный ID, то ищу не в ListView а в БД Access. Так получается быстрее, да и впринципе удобно. Ну а если найдено, то уже делаешь что хочешь. По поводу редактирования. Ну опять таки есть там ListItem, а у него SubItem. То есть зная номер ListItem-а (индекс) можно исправить и его самого (ListItem - это сама первая колонка в ListView) и принадлежащие к нему SubItem-ы (все остальные, нумеруются с 1). Смотря что нужно редактировать. К сожалению нет прямого редактирования SubItem-ов, есть только если не ошибаюсь самих ListItem-ов (где-то в свойствах).
Юля Крюкова писал(а):а MS FlexGrid где можно эту колонку скрыть не устраивает тем, что там нельзя редактировать данные...
Юля Крюкова писал(а):Правда я не думала на тему программного редактирования, но это все как то уж очень замудрёно... как сказал один умный человек: "Люблю программирование за то что в нем можно гланды вырезать и через задницу" но не хочется в данный момент этим заниматься.
Юля Крюкова писал(а):Я точно такую же базу уж е один раз в Access'е написала, там как раз этим я и занималась, на VB хочу как нибудь проще и правильней что ли сделать.
Юля Крюкова писал(а):Акцесс же не у всех стоит, а на VB можно на любой комп поставить.
Юля Крюкова писал(а):А вообще DATA и ADODC если сравнивать ADODC типа лучше в книжках пишут?
Юля Крюкова писал(а):Это звучит заманчиво, но не могли бы Вы как то более предметно, я просто только начинаю изучение VB и не все понимаю. Может пример есть какой или ссылка?
Юля Крюкова писал(а):
а MS FlexGrid где можно эту колонку скрыть не устраивает тем, что там нельзя редактировать данные...
Неверно
Все так замудрено всегда
Акцесс же не у всех стоит, а на VB можно на любой комп поставить.
Это откуда такие великие знания? Для того чтобы программа работала - VB ставить не надо. А вот Access-кую программу не запустиш без Access. Но можно вполне использовать Access даже если он не установлен с VB.
Это какие такие книги опять пишут. Они для печи-буржуйки сойдут
Так. Значится так. Сначала определись что нужно. Сначала видимо визуализировать данные. С Listview это просто.
Далее - нужно определить как искать - внутри контрола-обертки или внутри Recordset-а. Если последний вариант - то что использовать Ole, ADO, DAO и т.д?
Юля Крюкова писал(а):Ценю что возитесь со мной. Спасибо!
Юля Крюкова писал(а):Как я понимаю в MS FlexGrid данные редактировать можно, но только программно, а сам контрол служит только для отображения данных
Юля Крюкова писал(а):Все относительно... Все замудрено, если не знаешь ( я как раз в таком положении), а когда узнаешь все сразу вроде и не замудрено.
Юля Крюкова писал(а):Я думала что для конкретного случая есть очень простое решение, как я понимаю придется все таки идти путем программного извлечения и редактирования данных. Это не самое страшное.
Юля Крюкова писал(а):При беглом взгляде различие не сильное, здесь даже многие вещи можно легче сделать.
Юля Крюкова писал(а):Я имела ввиду что программа на VB будет работать на любом компе, даже если там Access не установлен. А с массовым переходом на OpenOffice не богатых фирм (да и богатых впринципе) т.к. оно дешевле, Access везде посносили и моя База теперь не работает. А она мне очень нужна... ну ладно это все лирика.
Юля Крюкова писал(а):База теперь не работает. А она мне очень нужна... ну ладно это все лирика.
Юля Крюкова писал(а):Это я прочитала в книжке под названием "Visual Basic на практике" под общей редакцией Г.М. Магданурова на стр. 222 русским по белому " ...Для работы с базой данных в Visual Basic существует специальный компонент Data (рис. 6.1), но в настоящее время этот компонент считается устаревшим и использовать его не рекомендуется." Плохая книжка, да? Ладно выкину...
Юля Крюкова писал(а):Да, лучше всего, как мне кажется начать с визуализации данных. Подскажите пожалуйста где взять Listview, среди стандартных контролов не вижу что то...
Юля Крюкова писал(а):Я рассматривала, но DBGrid очень некрасиво выглядит. Первая колонка (пустая, где стрелочка рисуется, звездочка и подобная хрень во время добавления записи и т.д.) мне очень не нравится, а MS FlexGrid где можно эту колонку скрыть не устраивает тем, что там нельзя редактировать данные... Правда я не думала на тему программного редактирования, но это все как то уж очень замудрёно... как сказал один умный человек: "Люблю программирование за то что в нем можно гланды вырезать и через задницу" но не хочется в данный момент этим заниматься. Я точно такую же базу уж е один раз в Access'е написала, там как раз этим я и занималась, на VB хочу как нибудь проще и правильней что ли сделать. И опыта заодно набраться. Акцесс же не у всех стоит, а на VB можно на любой комп поставить. А вообще DATA и ADODC если сравнивать ADODC типа лучше в книжках пишут? Или на каждый конкретный случай нужно тот или другой использовать? По поводу совместимости контрлов - если раньше ADODC контролов было мало, то теперь навалом. И ADODC вроде ничем на первый взгляд не хуже...
alibek писал(а):Лучше работать непосредственно с ADO или DAO
alibek писал(а):ListView хорош тем, что довольно простой и с ним легко работать, но загружать данные нужно будет вручную (построчно)
alibek писал(а):Я бы советовал использовать грид или ListView для отображения, а редактирование элементов сделать в отдельной форме или фрейме.
alibek писал(а):при добавлении элемента или его изменении она автоматически переключается в режим редактирования.
Юля Крюкова писал(а):
База теперь не работает. А она мне очень нужна... ну ладно это все лирика.
И здесь есть выходы кстати
Юля Крюкова писал(а):SLIM, а подробнее про выход можешь рассказать.
'code_vb
Private Sub Form_Load()
Dim i As Integer
Dim lst As ListItem
Dim lsi As ListSubItem
Dim j As Integer
With Me.ListView1
.Appearance = ccFlat
.AllowColumnReorder = False 'Объясните, пожалуйста, что это за свойство.
.BorderStyle = ccNone
.Checkboxes = True
.FlatScrollBar = True 'Это свойство тоже не понятно.
.FullRowSelect = True
.GridLines = False
.HideSelection = True ' И про это, если не трудно..
.HotTracking = False ' И это не понятно...
.HoverSelection = True 'Это прикольное свойство, но вопрос - можно ли цвет выделения менять?
.LabelWrap = True ' Это тоже не понятно.
.LabelEdit = lvwAutomatic ' Не понятно чем от lvwManual отличается, подскажите, плиз.
.MultiSelect = False
.Sorted = False ' Сортирует как текст, а по другому можно?
.View = lvwReport ' Вот это мне больше всего понравилось!!! :) Тут все понятно. :)
For i = 0 To 3
.ColumnHeaders.Add , "header" & i, "Header " & i
Next
i = 0
For i = 0 To 10
Set lst = .ListItems.Add(, "item" & i, "Item " & i) 'Это присваивание ключей и значений ListItem-ов стандартное или есть какой то еще метод? И вообще эта синтаксическая конструкция с set и присваиванием некого сложного значения переменной, объявленой ранее (в данном случае как Dim lst as ListItem) где применяется? Много где видела, но как читать правильно до конца не понимаю?
For j = 1 To .ColumnHeaders.Count
Set lsi = lst.ListSubItems.Add(, lst.Key & "_subitem" & j, "SubItem " & j)
Next
Next
End With
End Sub
- Код: Выделить всё
Set lst = .ListItems.Add(, "item" & i, "Item " & i) 'Это присваивание ключей и значений ListItem-ов стандартное или есть какой то еще метод? И вообще эта синтаксическая конструкция с set и присваиванием некого сложного значения переменной, объявленой ранее (в данном случае как Dim lst as ListItem) где применяется? Много где видела, но как читать правильно до конца не понимаю?
Dim lst as ListItem
Set lst = .ListItems.Add(, "item" & i, "Item " & i)
lst.SubItem(1) = "привет Юлия Крюкова"
SLIM писал(а):Вариантов тут конучно много. Можно поийти и путем ListView. Я допустим для осуществления поиска по ListView не использую поиск непосредственно в самом контроле, а ищу просто с рекордсета. Например если в форме поиска введен определенный ID, то ищу не в ListView а в БД Access. Так получается быстрее, да и впринципе удобно. Ну а если найдено, то уже делаешь что хочешь.
Юля Крюкова писал(а):Я пошла путем ListView - очень удобный контрол, в VBA это все гораздо сложнее было бы. Расскажи как в общем должен правильно организовываться поиск. Если можешь, то лучше оба способа: в ListView и с рекордсета. Если есть пример - не откажусь. Я пыталась сделать поиск сначала в листвью, но видимо не правильно что то указываю и курсор не переходит на нужную мне строку. Можно, как мне кажется, сделать еще поиск через фильтр (я пока не вникала в технологию как это исполнить, но это уже второй вопрос) или просто сделать запрос и отобразить результат в ЛистВью. Вариантов много, но хочется самый лучший. Какой он?
Юля Крюкова писал(а):Я пошла путем ListView - очень удобный контрол, в VBA это все гораздо сложнее было бы. Расскажи как в общем должен правильно организовываться поиск. Если можешь, то лучше оба способа: в ListView и с рекордсета. Если есть пример - не откажусь. Я пыталась сделать поиск сначала в листвью, но видимо не правильно что то указываю и курсор не переходит на нужную мне строку. Можно, как мне кажется, сделать еще поиск через фильтр (я пока не вникала в технологию как это исполнить, но это уже второй вопрос) или просто сделать запрос и отобразить результат в ЛистВью. Вариантов много, но хочется самый лучший. Какой он?
alibek писал(а):SLIM, не говори глупости. Ты не понял ответ iGrok, он поиск осуществляет в рекордсете, а не в ListView.
iGrok писал(а):2SLIM:
Find и Filter - проще и быстрее, чем гонять SQL-запросы на каждый поиск записи. Впрочем, всё зависит от предполагаемого кол-ва записей в таблице. Если у тебя табличка на 5млн записей - то SQL-запросы будут лучше и быстрее.
SLIM писал(а):Я если честно пример не смотрел. Поэтому просто мнение высказывал. В чем глупость конкретно то?
Но пост то читал?
iGrok предлагает при загрузке указывать элементам ключи, при поиске использовать Find и получать доступ к элементу по ключу.
В отличии от твоего ответа, в котором ты так и не предложил способа, чтобы найденный элемент отыскать в списке ListView.
Private Sub cmdFind_Click()
Dim itm As ListItem
Set itm = lstFind.FindItem(txtFindValue.Text)
If Not itm Is Nothing Then
Debug.Print itm.Text
lstFind.ListItems(itm.Index).Selected = True
End If
End Sub
Private Sub Form_Activate()
Dim i As Long
Dim lst As ListItem
Dim lsi As ListSubItem
Dim intColumnWidthText As Integer
Dim intColumnWidthAPI As Integer
'Внешний вид
With Me.lstFind
.AllowColumnReorder = True
.BorderStyle = ccNone
.Checkboxes = False
.FlatScrollBar = False
.FullRowSelect = True
.GridLines = True
.LabelEdit = lvwManual
.MultiSelect = False
.Sorted = False
.View = lvwReport
' Именую заголовки
.ColumnHeaders.Add , , "Заголовок 1"
.ColumnHeaders.Add , , "Заголовок 2"
'Загружаю данные в ListView
adodcFind.Refresh
adodcFind.Recordset.MoveFirst
For i = 1 To adodcFind.Recordset.RecordCount
Set lst = .ListItems.Add(, , i)
Set lsi = lst.ListSubItems.Add(, "ID" & adodcFind.Recordset.Fields(0).Value, adodcFind.Recordset.Fields(1).Value)
adodcFind.Recordset.MoveNext
Next
'Выравниваю колонки или по ширине текста заголовка или по ширине текста самого длинного поля
For i = 0 To .ColumnHeaders.Count - 1
intColumnWidthText = CInt(TextWidth(.ColumnHeaders(i + 1).Text) + 14 * 15)
SendMessage .hwnd, LVM_SETCOLUMNWIDTH, i&, LVSCW_AUTOSIZE
intColumnWidthAPI = .ColumnHeaders(i + 1).Width
If intColumnWidthText >= intColumnWidthAPI Then
.ColumnHeaders(i + 1).Width = intColumnWidthText
Else
.ColumnHeaders(i + 1).Width = intColumnWidthAPI
End If
Next
End With
End Sub
iGrok писал(а):А может быть, дело в .HideSelection = True? (оно такое по умолчанию)
fPartial - поиск по частичному совпадению строки. Если не задано, или 0 - по идее будет искать только полное совпадение.
З.Ы. Если честно, пример рисовал "на коленке", про FindItem узнал за полчаса до написания примера. Поэтому о значении параметров могу делать только предположения )
Юля Крюкова писал(а):iGrok писал(а):А может быть, дело в .HideSelection = True? (оно такое по умолчанию)
ДА!!!! Ура! Все дело в .HideSelection!!! Для отображения данных должно быть .HideSelection = FalsefPartial - поиск по частичному совпадению строки. Если не задано, или 0 - по идее будет искать только полное совпадение.
З.Ы. Если честно, пример рисовал "на коленке", про FindItem узнал за полчаса до написания примера. Поэтому о значении параметров могу делать только предположения )
А ты поставил "1" чтобы по первому знаку искало или...?
Юля Крюкова писал(а):Я никак научиться не могу по MSDN искать... Добавила в избранное
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Mail.ru [бот] и гости: 65