Поиск и ввод данных с помощью VB 6 в СУБД Access

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 15.11.2008 (Сб) 20:17

Код: Выделить всё
З.З.Ы. Добавь в "избранное" гугль. Полезная штука. )

Не хорошо смеятся над убогими :lol: У вас гугл ручной уже. Ты прям так и вводишь listview+scroll? или просто подряд пишешь?
Я готова учиться... не все же сразу.

У меня еще один вопрос назрел. Я хочу сделать форму поиска универсальной и ЛистВью универсальным для любой таблицы, но не могу понять как лучше сделать отображение заголовков в ЛистВью. Они же должны быть для каждой таблицы свои и присваиваться они должны автоматом.
Я сначала думала сделать так: ListView1.ColumnHeaders.Add , , adodcFind.Recordset.Fields(1).Name, но он отображает Имя поля, а мне нужно чтобы отображалась Подпись, которую я ввожу для поля в Акцесс (прям открываю файлик Акцесс и ввожу в свойство Подпись для поля значение). В Акцессе он отображает именно подпись (в запросе или в табличке), а как это свойство Поля получить в ВБ? Или вообще может другой какой фокус нужно исполнить?

И по поводу поиска еще: А этот поиск API функцией СендМессадж никак организовать нельзя? В ЛистБоксе работает, здесь ведь тоже что то похожее...
Хотя и так в принципе работает, но для больших объемов значений СендМессадж все же лучше будет. Сразу замечу, что я понимаю про преимущества поиска записи в рекордсете. Это ваще мега оптимально для большого колличества значений, я понимаю. Интересно в данном случае про API.
Большое спасибо!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 15.11.2008 (Сб) 20:38

Юля Крюкова писал(а):
Код: Выделить всё
З.З.Ы. Добавь в "избранное" гугль. Полезная штука. )

Не хорошо смеятся над убогими :lol: У вас гугл ручной уже. Ты прям так и вводишь listview+scroll? или просто подряд пишешь?
Я готова учиться... не все же сразу.

У меня еще один вопрос назрел. Я хочу сделать форму поиска универсальной и ЛистВью универсальным для любой таблицы, но не могу понять как лучше сделать отображение заголовков в ЛистВью. Они же должны быть для каждой таблицы свои и присваиваться они должны автоматом.
Я сначала думала сделать так: ListView1.ColumnHeaders.Add , , adodcFind.Recordset.Fields(1).Name, но он отображает Имя поля, а мне нужно чтобы отображалась Подпись, которую я ввожу для поля в Акцесс (прям открываю файлик Акцесс и ввожу в свойство Подпись для поля значение). В Акцессе он отображает именно подпись (в запросе или в табличке), а как это свойство Поля получить в ВБ? Или вообще может другой какой фокус нужно исполнить?
Большое спасибо!

Да кто ж смеётся-то? Я просто советую. ))
Хоть подряд, хоть с "+". Это эквивалентно.

Как вытащить "подпись" - не знаю (. А вот как "Описание" - могу набросать примерчик. Там правда действительно фокусы.
label:
cli
jmp label

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 15.11.2008 (Сб) 21:07

Как вытащить "подпись" - не знаю (. А вот как "Описание" - могу набросать примерчик. Там правда действительно фокусы.)


Нет нужно именно "Подпись", ну это название поля в Акцессе. А "Описание"... я даже не вижу что это. И зачем оно тоже не знаю :). я от примеров правда никогда не отказываюсь, но не хочу хорошего человека зря напрягать и так уже в неоплатном долгу... Лучше скажи зачем оно, может мне оно не нужно совсем.
Спасибо за все!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 15.11.2008 (Сб) 22:01

Юля Крюкова писал(а):Нет нужно именно "Подпись", ну это название поля в Акцессе. А "Описание"... я даже не вижу что это. И зачем оно тоже не знаю :). я от примеров правда никогда не отказываюсь, но не хочу хорошего человека зря напрягать и так уже в неоплатном долгу... Лучше скажи зачем оно, может мне оно не нужно совсем.
Спасибо за все!

Да знаю я что такое "подпись" =))

В акцессе у тебя при конструировании таблицы есть три колонки. имя поля, тип данных и Описание. Вот как его вытащить я знаю. )

По вытаскиванию "Подписи" что-то есть тут:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=40036YM
Но там используют DAO. Его плюсов/минусов я не знаю, ибо никогда не использовал. )
label:
cli
jmp label

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 15.11.2008 (Сб) 23:00

"iGrok
В акцессе у тебя при конструировании таблицы есть три колонки. имя поля, тип данных и Описание. Вот как его вытащить я знаю. )

По вытаскиванию "Подписи" что-то есть тут:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=40036YM
Но там используют DAO. Его плюсов/минусов я не знаю, ибо никогда не использовал. )


Я прошла по ссылке и наткнулась на фразу из рубрики ЯПЛАКАЛ, цитирую:
Я не знаю из каких источников ты это берешь, это полный бред, извини
- очень настораживает!
Ладно, если честно, я не особый спец во всем этом, я только учусь и мне очень сложно воспринимать споры таких же как я. Если кто может объяснить на данном этапе что к чему и если кто в свое время делал универсальную форму поиска - с удовольствием посмотрю. Для меня пока все это ну очень сложно.

По поводу описания - не нужно, спасибо. Не зачем мудрить. Должно быть все гораздо проще. Может кто нибудь из мега спецов заглянет в мою тему и скажет что есть очень простое и правильное решение. Я уже думаю не создать ли мне несколько форм поиска для каждой таблицы и не морочить голову (тем более что табличек для поиска всего штук 10 нужно, скопирую и все тут...). Задавать все данные явно - это в 100 раз легче, чем выдумывать сложные операции по автоматизации процесса объявления заголовков, создание свойств формы для каждой конкретной таблицы и т.п. хрень. У мя маленькая базочка данных... хотелось бы конечно сделать все профессионально, но кто сказал что профессиональность в сложных решениях? Скорость выполнения задачи - вот главный показатель! А сколько она места будет занимать... ну не зря же винты по терабайту стали выпускать :). А если со временем научусь финты ушами вытворять, тогда да, в 20 строчек буду оболочки под БД творить. Тем более, когда все библиотеки под это дело уже написаны будут :lol: и грех мне тогда мега специалистке будет как то иначе, а пока начинающая можно всякую фигню исполнять :D - никто и не заметит :D.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 15.11.2008 (Сб) 23:41

Юля Крюкова писал(а):Скорость выполнения задачи - вот главный показатель!

Тогда сделай ОДНУ форму, а в завивимости от имени таблицы задавай названия полей. )
Т.е. при открытии формы поиска смотри, для какой таблицы ты её открываешь, и в зависимости от этого задавай набор полей. Это лучше, чем делать десяток форм. )

Насчёт поиска и вообще БД, можешь посмотреть этот пример. Там не совсем то, конечно.. Но, возможно, что-то окажется полезным.
label:
cli
jmp label

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 16.11.2008 (Вс) 9:30

iGrok писал(а):
Юля Крюкова писал(а):Скорость выполнения задачи - вот главный показатель!

Тогда сделай ОДНУ форму, а в завивимости от имени таблицы задавай названия полей. )
Т.е. при открытии формы поиска смотри, для какой таблицы ты её открываешь, и в зависимости от этого задавай набор полей. Это лучше, чем делать десяток форм. )


iGrok писал(а):Насчёт поиска и вообще БД, можешь посмотреть этот пример. Там не совсем то, конечно.. Но, возможно, что-то окажется полезным.


Да, я с утра встала и подумала, что все эти параметры можно задавать под конкретную таблицу. Утро вечера мудренее :)!

За пример спасибо! Изучаю... скорей всего найду что нибудь для себя сейчас...

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 23.11.2008 (Вс) 20:25

Снова всем привет!

Я делаю поиск с помощью Recordset.Find (), и когда запись не находиться, то строка MsgBox adodcFind.Recordset.Fields(1).Value выдает сообщение об ошибке что то типа "BOF или EOF имеет значение True или текущая запись удалена. Для выполнения операции требуется текущая запись." - это и понятно, ведь запись не найдена, значит курсор где то за пределами Рекордсета. Подскажите, пожалуйста, как сделать проверку нашлась ли запись или нет, чтобы дальше с ней можно было производить какие то действия. Какое свойство нужно проверять и на какое значение??? :?:

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение SLIM » 23.11.2008 (Вс) 21:49

Вариантов опять таки несколько.
Можно так
Код: Выделить всё
If Not Recordset.EOF AND Not Recordset.BOF Then...
'В переводе на русский - если одновременно наблюдается начало и конец Recordset то записей собственно нет

Можно так
Код: Выделить всё
if Recordset.RecordCount>0 Then....
'Работает только при клиентском курсоре, а он устанавливается у Connection-а

Можно обрабатывать ошибки
Код: Выделить всё
On Error Go To 'метка на которую нужно перейти для последующей обработки ошибки

Можно....да думаю много что можно. Поискать нужно...
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 23.11.2008 (Вс) 21:55

Юля Крюкова писал(а):Подскажите, пожалуйста, как сделать проверку нашлась ли запись или нет, чтобы дальше с ней можно было производить какие то действия. Какое свойство нужно проверять и на какое значение???

Смотри Recordset.EOF и Recordset.BOF. Если одно из них - True, считай, что ничего не найдено. )

Общий смысл примерно таков
Код: Выделить всё
If Recordset.EOF or Recordset.BOF Then
  'не нашли
Else
  'нашли
End If

Единственное, что лучше при этом сверять значение искомого поля. У меня при некоторых условиях поиска, когда ничего не было найдено, рекордсет проскакивал на следующую по алфавиту запись. Т.е. если в колонке было "1", "2", "4", "5", а я искал "3", курсор оказывался на записи "4".
Разбираться почему так было влом - поэтому просто ввёл дополнительную проверку искомого значения. )

З.Ы. 2SLIM:
Лучше - первый вариант. С EOF и BOF.
Отлавливать ошибки, когда есть стандартное средство определения закончившегося рекордсета - не есть гуд. А число записей тебе при Find в принципе ничего не даст. Т.е. выдаст общее кол-во записей.

SLIM писал(а):
Код: Выделить всё
If Not Recordset.EOF AND Not Recordset.BOF Then...
'В переводе на русский - если одновременно наблюдается начало и конец Recordset то записей собственно нет


В переводе на русский - если курсор оказался или перед первой записью(BOF), или за последней(EOF) - то мы ничего не нашли. =)
При .Find кол-во записей в рекордсете остаётся прежним. Т.е. записи, собственно, есть. =)
Только курсор перекидывается на искомую(или не очень) запись.

Если честно, ни разу не видел срабатывание .BOF при .Find, но всё равно проверку "на всякий" ставлю. )
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение SLIM » 24.11.2008 (Пн) 0:16

iGrok писал(а):В переводе на русский - если курсор оказался или перед первой записью(BOF), или за последней(EOF) - то мы ничего не нашли. =)

Это я как раз знаю. Просто запутывать не стал....
iGrok писал(а):При .Find кол-во записей в рекордсете остаётся прежним. Т.е. записи, собственно, есть. =)

Если чнстно не помню точно, но толи прои Find, толи при Filter у меня такой вариант работал. Просто редко данными методами пользуюсь. Возможно ты и прав....
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 24.11.2008 (Пн) 0:35

SLIM писал(а):Если чнстно не помню точно, но толи прои Find, толи при Filter у меня такой вариант работал. Просто редко данными методами пользуюсь. Возможно ты и прав....

При .Filter работал. =)
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение SLIM » 24.11.2008 (Пн) 9:57

iGrok писал(а):При .Filter работал. =)

Тогда понятно.
Пишите жизнь на чистовик.....переписать не удастся.....

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 25.11.2008 (Вт) 0:34

iGrok писал(а):Если честно, ни разу не видел срабатывание .BOF при .Find, но всё равно проверку "на всякий" ставлю. )


Потому что искал всегд с первой к последней, наверно? ;)
Суть метода .Find - проверять каждую запись на совпадение заданному условию, обходя все записи с первой (или отдельно указанной) к последней (adSearchForward - по умолчанию), соответнужно проверять нужно только recordset.EOF на true. Если true - значит достигли конца файла, потому что направление обхода adSearchForward, если направление обхода adSearchBackward, значит прверять recordset.BOF. Если вышли за пределы recordseta - значит все - не нашли. Пральна?

iGrok писал(а):Единственное, что лучше при этом сверять значение искомого поля. У меня при некоторых условиях поиска, когда ничего не было найдено, рекордсет проскакивал на следующую по алфавиту запись. Т.е. если в колонке было "1", "2", "4", "5", а я искал "3", курсор оказывался на записи "4".
Разбираться почему так было влом - поэтому просто ввёл дополнительную проверку искомого значения. )

Этого не может быть, если пользуешься методом .find, потому что описание метода я описала выше и это ваще не реально. Если пример близок к истене, то может быть поиск находил значение ID поля, может явно не указал колонку поиска... и искало по всему рекордсету...??? Ведь 4 - это 3-ье по счету значение :roll: , как вариант... Ну не возможно с помощью find обходя значения колонки ничего не найти и переместить курсор на значение искомое + 1...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 25.11.2008 (Вт) 2:52

Юля Крюкова писал(а):Пральна?

Ага. ) Похоже на правду. Только adSearchBackward никогда не использовал. И, если честно, описания метода никогде не читал. )
Но в целом всё логично. =)

Юля Крюкова писал(а):Этого не может быть, если пользуешься методом .find, потому что описание метода я описала выше и это ваще не реально. Если пример близок к истене, то может быть поиск находил значение ID поля, может явно не указал колонку поиска... и искало по всему рекордсету...??? Ведь 4 - это 3-ье по счету значение :roll: , как вариант... Ну не возможно с помощью find обходя значения колонки ничего не найти и переместить курсор на значение искомое + 1...

Не на искомое+1, а не следующее по сортировке. ) '3' и '4' я привёл для примера. Реально искалось что-то, типа "F1 = '80018'". И если при этом такого значения не было, курсор оказывался на записи с F1 = '80024'. (Следующей по сортировке). Учитывая, что записей было около 18к - порядковый номер никак не мог быть '80018'. Тем более, это строка, а не число, тем более, это поле и есть ID записи.. =)

А вообще я вспомнил, почему так получалось. )
Поиск вёлся по dbf-файлу, а он тогда немного побился, в результате чего мы долго пытались понять, почему такие косяки в работе с БД. )
Акцесс открывал его нормально, а при поиске вёл себя точно так же.. И только потом нашли сотню строк с битой структурой.. )
Такие "побития" случались не часто, но из-за косяков при поиске лезли неправильные отчёты, исправлять которые было гораздо геморнее, чем ввести дополнительную проверку, и выдавать ошибку "не найдено", вынужая персонал сразу обращаться в ИТ. А то они ведь даже не смотрели, что у них вылезает цена не от того артикула.. Вылезло - значит так и должно быть.. )
label:
cli
jmp label

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 29.11.2008 (Сб) 0:00

Помогите пожалуйста с методом Adodc1.Recordset.AddNew
Как правильно с помощью этого метода в табличке поля заполнить? Можно коротенький пример на пару строчек, если не сложно. А то что то я всю голову сломала. По сайту смотрела, там какие то сложные задачи решаются, а у меня данные просто не добавляются. Хелп!

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение SLIM » 29.11.2008 (Сб) 0:15

Есть такая штука в VB называется Object Browser - там написано о метода,свойствах и событиях объектов. В частности об AddNew там написано
Код: Выделить всё
Sub AddNew([FieldList], [Values])

Т.е. указываем поле в которое нужно добавить значение а через запятую указываем само значение. Однако если нужно добавить значение не в одно поле, то нужно будет после этого перейти в конец записей. Что неудобно, поэтому используют Array и выглядит это примерно так
Код: Выделить всё
Sub AddNew Array("Поле1","Поле2","Поле3"), Array("ЗначениеПоля1","ЗначениеПоля2","ЗначениеПоля3")


[Добавлено: Если я понял верное(прочитал) то написано к ADODC - а что это такое я не знаю. Я писал по ADODB]
Пишите жизнь на чистовик.....переписать не удастся.....

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 29.11.2008 (Сб) 10:13

SLIM писал(а):[Добавлено: Если я понял верное(прочитал) то написано к ADODC - а что это такое я не знаю. Я писал по ADODB]


alibek же рассказывал:
ADODC и Data — это специальные компоненты, упрощающие работу с базами данных. Они позволяют подключиться к источнику данных и связывать с собой остальные элементы управления формы, после чего обновление данных и отображение этих данных на элементах управления будет осуществляться автоматически, самим контролом ADODC или Data. ADODC больше предназначен для работы через ADO, Data больше предназначен для работы через DAO.
Но у этих компонентов есть ряд ограничений и глюков, из-за которых их лучше не использовать. Лучше работать непосредственно с ADO или DAO — для связывания с данными таких элементов управления, как текстовые поля и списки, код несложный, а различные гриды умеют и сами работать непосредственно с ADODB.Recordset или DAO.Recordset.


Научите, пожалуйста более подробно как это делать:
Лучше работать непосредственно с ADO или DAO — для связывания с данными таких элементов управления, как текстовые поля и списки, код несложный, а различные гриды умеют и сами работать непосредственно с ADODB.Recordset или DAO.Recordset.


Я умею textbox-ы, lable-ы и подобные контролы связывать только через Adodc или Data, все рекомендуют этого не делать. Расскажит пожалуйста как по-другому можно? Желательно с примерами. И у меня еще проблема с добавлением данных в таблицу. Я делаю так:

Код: Выделить всё
'Мне нужно добавить в таблицу несколько строк, количество определяется введенными в поля txtUshet(2).Text и txtUshet(3).Text значениями. Это числа 1 и 3 например.     
Начинается цикл, повториться 3 раза:
        For i = CInt(txtUshet(2).Text) To CInt(txtUshet(3).Text)
        Adodc_Blank.Recordset.AddNew 'прошу добавить новую запись
        Adodc_Blank.Recordset.Fields("Blank_Name_ID") = CInt(lblUchetID(0).Caption) 'здесь возникает ошибка "Object variable or With block variable to set"
        Adodc_Blank.Recordset.Fields("Blank_Rekviziti") = CStr(txtUshet(0).Text & i)
        Adodc_Blank.Recordset.Fields("SK_ID") = CInt(lblUchetID(1).Caption)
        Adodc_Blank.Recordset.Fields("Broker_ID") = CInt(lblUchetID(2).Caption)
        Adodc_Blank.Recordset.Fields("Status_ID") = 1
        Adodc_Blank.Recordset.Fields("Blank_Status_Data") = Format(Now(), "dd/mm/yyyy")
        Adodc_Blank.Recordset.Fields("Agent_ID") = CInt(lblUchetID(3).Caption)
        Adodc_Blank.Recordset.Fields("Otobrazat") = True
        Adodc_Blank.Recordset.Update
        Next

Где не так??? Я такую форму заполнения данных нагуглила где то... SLIM через массив как то предлагает, я так вообще не знаю. Научите, плиз!

Я пробую так :
Код: Выделить всё
        Adodc_Blank.Recordset.AddNew ("Blank_Name_ID" , CInt(lblUchetID(0).Caption))
- так вообще синтаксическая ошибка!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 29.11.2008 (Сб) 10:44

Юля Крюкова писал(а):Научите, пожалуйста более подробно как это делать:
Лучше работать непосредственно с ADO или DAO — для связывания с данными таких элементов управления, как текстовые поля и списки, код несложный, а различные гриды умеют и сами работать непосредственно с ADODB.Recordset или DAO.Recordset.

Если никто не успеет раньше - ближе к вечеру напишу.

Юля Крюкова писал(а):И у меня еще проблема с добавлением данных в таблицу. Я делаю так:
Код: Выделить всё
...

Где не так??? Я такую форму заполнения данных нагуглила где то... SLIM через массив как то предлагает, я так вообще не знаю. Научите, плиз!

Я пробую так :
Код: Выделить всё
        Adodc_Blank.Recordset.AddNew ("Blank_Name_ID" , CInt(lblUchetID(0).Caption))
- так вообще синтаксическая ошибка!

Да вроде всё так. Покажи, как выглядит запрос на выборку в ADODC ?
label:
cli
jmp label

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 29.11.2008 (Сб) 11:05

Да вроде всё так. Покажи, как выглядит запрос на выборку в ADODC ?

Нет запроса. Стандартно выбираю 2-Table и указываю таблицу с которой хочу связаться. Мне все данные в таблице нужно заполнить, поэтому я выбираю таблицу полностью.

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 29.11.2008 (Сб) 11:15

Я еще один пример нашла (во вложении).
Если как у них делать, то будет:
Код: Выделить всё
       
       For i = CInt(txtUshet(2).Text) To CInt(txtUshet(3).Text)
            With Adodc_Blank.Recordset
                .AddNew
                !Blank_Name_ID = CInt(lblUchetID(0).Caption)
                !Blank_Rekviziti = CInt(lblUchetID(0).Caption)
                !SK_ID = CStr(txtUshet(0).Text & i)
                !Broker_ID = CInt(lblUchetID(2).Caption)
                !Status_ID = 1
                !Blank_Status_Data = Format(Now(), "dd/mm/yyyy")
                !Agent_ID = CInt(lblUchetID(3).Caption)
                !Otobrazat = True
                .Update
            End With
        Next

Стопориться все с той же ошибкой на .AddNew . Когда выдает ошибку, смотрю на значение Adodc_Blank.Recordset (мышкой навожу) , а оно = Nothing - это нормально?
Вложения
ADOExample.rar
Я еще пример нашла, там по другому данные добавляются. У меня ошибка как всегд на .Add. У меня таблица свежая, без данных, может в этом дело?
(10.59 Кб) Скачиваний: 100

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 29.11.2008 (Сб) 14:33

Юля Крюкова писал(а):
Да вроде всё так. Покажи, как выглядит запрос на выборку в ADODC ?

Нет запроса. Стандартно выбираю 2-Table и указываю таблицу с которой хочу связаться. Мне все данные в таблице нужно заполнить, поэтому я выбираю таблицу полностью.

Э.. Я правильно понимаю, что в ADODC у тебя выборка из двух таблиц?
label:
cli
jmp label

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 29.11.2008 (Сб) 18:53

iGrok писал(а):Э.. Я правильно понимаю, что в ADODC у тебя выборка из двух таблиц?


Нет, запутала наверно. Таблица одна, 2-Table - это настройка Adodc, там еще 3-Text есть - это для SQL запроса. У меня одна таблица, в которую я добавляю данные. Вернее пытаюсь, но у меня ничего не выходит... :(

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 29.11.2008 (Сб) 19:59

А ларчик просто открывался! Определила опытным путем! Мозг не применялся ни на секунду, просто воткнула зачем то эту строчку, посмотреть что будет. И глядика ж ты, заработало!!!

Нужно было поставить строку в начале процедуры:
Код: Выделить всё
Adodc_Blank.Refresh 'НУЖНО ВСЕГДА СТАВИТЬ ПЕРЕД ОБРАЩЕНИИ К РЕКОРДСЕТ


Я себе даже коментарий особый к ней добавила, чтобы потом неделями не гадать почему ошибки и подобная хрень.
Кто объяснит почему так нужно делать, если все данные в Adodc я забиваю в свойствах, буду очень благодарна, т.к это для меня до сих пор загадка.

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 04.12.2008 (Чт) 21:25

alibek писал что :
Лучше работать непосредственно с ADO или DAO — для связывания с данными таких элементов управления, как текстовые поля и списки, код несложный, а различные гриды умеют и сами работать непосредственно с ADODB.Recordset или DAO.Recordset.


Подскажте плиз где про это почитать можно.

Кто нибудь знает как сосчитать количество столбцов в таблице??? Мне нужно в ListView данные загружать, но форма то универсальная у меня, поэтому хотелось бы автоматизировать подсчет столбцов и загружать данные из табличек в соответствии с количеством столбцов. Можно конечно их заранее узнать и через свойство формы передавать, но так не хочу... Автоматически бы... Хочу сделать запрос и загрузить данные в ListView согласно количеству колонок.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение alibek » 04.12.2008 (Чт) 22:54

У рекордсета (ADODB.Recordset) есть коллекция полей Fields. Fields.Count — число полей, Fields(i).Name, Fields(i).Type, Fields(i).Attribute и т.п. — узнать параметры поля.
Lasciate ogni speranza, voi ch'entrate.

Юля Крюкова
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 04.11.2008 (Вт) 16:37

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение Юля Крюкова » 04.12.2008 (Чт) 23:21

alibek писал(а):У рекордсета (ADODB.Recordset) есть коллекция полей Fields. Fields.Count — число полей, Fields(i).Name, Fields(i).Type, Fields(i).Attribute и т.п. — узнать параметры поля.


alibek, покажи как это в коде выглядит примерно, пожалуйста. Я же синтаксиса не знаю совсем. Или если это где то на сайте есть - просто скажи что есть, я еще поищу...

И если знаешь как в VSFlexGrid поиск организовать подскажи тоже пожалуйста. Очень надо. Я вместо ListView хочу этот контрол воткнуть. Если совсем точно, то этот контрол называется ComponentOne VSFlexGrid 8.0 . Основная проблема с этим гридом: не могу понять как в него сообщить что нужно выделить определенную строку, например найденную в рекордсете. В листвью это понятно было, а здесь нет... :( И как потом прочитать нужные мне данные из него тоже не знаю, но это скорей всего будет легче уже. Присоветуй плиз что нибудь (хотя бы в теории), ты же все знаешь... Может вообще лучше стандартным пользоваться??? Но этот настраивать можно как хочешь - мне понравился так...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 05.12.2008 (Пт) 0:41

Юля Крюкова писал(а):
alibek писал(а):У рекордсета (ADODB.Recordset) есть коллекция полей Fields. Fields.Count — число полей, Fields(i).Name, Fields(i).Type, Fields(i).Attribute и т.п. — узнать параметры поля.


alibek, покажи как это в коде выглядит примерно, пожалуйста. Я же синтаксиса не знаю совсем. Или если это где то на сайте есть - просто скажи что есть, я еще поищу...


Ну например так.
Код: Выделить всё
For i = 0 to Recordset.Fields.Count - 1
    AddField Fields(i).Name
Next i

AddField должна добавлять колонку в грид или листвью.
Если в листвью - то там достаточно просто (ListView.ColumnHeaders.Add)
Если грид - там должна быть предусмотрена своя функция для добавления колонки.
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение SLIM » 05.12.2008 (Пт) 21:50

Юля Крюкова писал(а):И если знаешь как в VSFlexGrid поиск организовать подскажи тоже пожалуйста. Очень надо. Я вместо ListView хочу этот контрол воткнуть.

Эх...всетаки взяла грид.
А мне так нравится ListView.....он такой красивый.....и в винде везде встречается....эх
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Поиск и ввод данных с помощью VB 6 в СУБД Access

Сообщение iGrok » 05.12.2008 (Пт) 22:42

SLIM писал(а):
Юля Крюкова писал(а):И если знаешь как в VSFlexGrid поиск организовать подскажи тоже пожалуйста. Очень надо. Я вместо ListView хочу этот контрол воткнуть.

Эх...всетаки взяла грид.
А мне так нравится ListView.....он такой красивый.....и в винде везде встречается....эх

Это не повод останавливаться на нём.
Кстати, гриды бывают и покрасивее ListView. И уж полюбому пофункциональней. Вполне возможно, что этот как раз из тех.

Лирическое отступление:
Дело в том, что гриды бывают разными. Их столько, что знать, как что работает во всех - невозможно. Я, к примеру, про VSFlexGrid даже не слышал.
Поэтому и подсказать не могу. (

Лично я юзаю vbAccelerator sGrid2. Хотя никому его и не советую. Кто-то говорил, что он глючный.. Но меня он всем устраивает. )
Помнится MSHFlexGrid(не путать с вышеуказанным VSFlexGrid) при 10к записей тормозил так, что невозможно было работать. А в стандартном DataGrid не было раскраски строк. Ну и нужен был бесплатный компонент с открытым кодом, чтобы можно было что-то подправить..
label:
cli
jmp label

Пред.След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 68

    TopList