про контрол OLE и БД - плииз!

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

про контрол OLE и БД - плииз!

Сообщение hohol_kz » 05.08.2005 (Пт) 7:03

Пролопатил весь форум на предмет своего вопроса. Внятного ответа не нашел, хотя похожие посты были. Итак:

1. Имею БД на Access'2000.
В ней имеется основная таблица с главными записями и подчиненная (тип связи один-ко-многим) с иллюстрациями. Для каждой записи из главной таблицы может быть несколько иллюстраций, а может не быть ни одной.

2. Интерфейс к БД делаю на VB6. В числе прочего, при переходе по главным записям необходимо подгружать иллюстрации. Для этого выбрал OLE-контрол, как самый удобный.

Вот тут и начинаются проблемы. OLE-контрол в качестве поставщика данных принимает Data-контрол и RemoteData-контрол и категорически игнорирует ADODC. Но указанные контролы не хотят работать с mdb-базой версии 2000. Им подавай Provider=Microsoft.Jet.OLEDB.3.5*, т.е. Access предыдущей версии. Иначе нет соединения с базой.

КАК ЖЕ МНЕ ЗАГРУЗИТЬ в OLE-контрол данные из Access'2000 ?!

Несколько дней потратил на эту хрень и не нашел решения. Остается идти на поклон и вот я тут. По ка что как временное и совершенно дрянное решение - сконвертировал базу в формат предыдущей версии и использовал Data-контрол. Но это фактически проигрыш в решении проблемы.

Можно ли подсунуть программно в OLE данные от Recordset обойдять вообще без специальных контролов? Если да, то как? Учитывая, что в OLE надо пролистывать иллюстрации если их несколько, т.е. с БД извлекается несколько записей, а не один объект.

И еще, как изящнее опросить Recordset есть в нем записи или он пустой. Почему-то его свойство .RecordCount в любом случае выдает -1. Тогда нахрен оно вообще существует, это свойство???
Просто хочу сделать так: если Recordset пустой, то он скрывается с глаз долой, а если непустой, то видим и пользователь может работать с ним.

Заранее благодарен всем кто откликнется на мою тему.
Можно пример кода выставить.
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.08.2005 (Пт) 7:25

Чтобы Data понимал 2000, надо поставить сервис-пак на VB.
Качается с http://www.microsoft.com/downloads. VB SP6. 20 метров, если только для VB, 65 - если для всей студии.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 05.08.2005 (Пт) 7:44

Хм, так все просто? Мдяяя... воистину восклес!..

Но у меня стоит первый сервиспак. Я его грузил, потому как без этого не работал CommonDialog - т.е. с чужого проекта он работал, а если я хотел свой засунуть на форму то VB посылал на три буквы.

Личный респект, щас проверю.
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 05.08.2005 (Пт) 7:52

насчет второй траблы:
1. чтоб RecordCount не показывал -1 сначала делай
rs.movefirst
rs.movelast
2. проверка на вшивость:
if rs.bof = true or rs.eof = true then exit sub

или что там те надо

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.08.2005 (Пт) 7:55

Ему надо клиентский курсор поставить. Тогда recordcount сразу будет правильным. Если, конечно, есть необходимость тянуть все данные на машину пользователя...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 05.08.2005 (Пт) 8:43

lord0n писал(а):насчет второй траблы:
1. чтоб RecordCount не показывал -1 сначала делай
rs.movefirst
rs.movelast
2. проверка на вшивость:
if rs.bof = true or rs.eof = true then exit sub
или что там те надо


Вот и я сделал как ты, с проверкой на вшивость.
Сейчас проверил вариант 1 на recordset в котором заведомо есть записи. После
rs.movefirst
rs.movelast

VB вообще обиделся и сказал что обект не поддерживает обратную передачу или Runtime error '-2147217884 (80040e24)'.

Что касается пустого recordset, то что свойство RecordCount должно возвращать в этом случае? У меня выдает ошибку, что требуется функция или значение. Хотя совершенно логично было бы предполагать возврат нуля.
И вообще, непонятна логика создателей: имеется совершенно понятное свойство, но использовать его можно исключительно через задницу...
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 05.08.2005 (Пт) 8:54

GSerg писал(а):Ему надо клиентский курсор поставить. Тогда recordcount сразу будет правильным. Если, конечно, есть необходимость тянуть все данные на машину пользователя...


Поясни пожалуйста, немножко подробнее.
Это свойство CursorLocation или что-то еще?
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

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

Сообщение alibek » 05.08.2005 (Пт) 8:55

Оно самое.
Либо клиентский курсор, либо делаешь запрос select count(*), что в ряде случаев может быть удобнее.
Lasciate ogni speranza, voi ch'entrate.

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 05.08.2005 (Пт) 9:12

Огромный спасибо за последнее разъяснение.
Сработало.
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 05.08.2005 (Пт) 9:22

alibek писал(а):Оно самое.
Либо клиентский курсор, либо делаешь запрос select count(*), что в ряде случаев может быть удобнее.


я бы еще добавил
select * from table where col1 = x

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 05.08.2005 (Пт) 12:37

Как сегодня советовали, скачал сервиспак, установил.
Data-контрол как ругался на Access'2000 формат mdb файла так и ругается.
Не понимает он этот формат
:(
Что делать?
Кто знает как загрузить в OLE-контрол картинку из mdb Access'2000 формата?

Помогите запинать проблему!
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 08.08.2005 (Пн) 7:39

Неужель никто не знает как с этим бороться?
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 08.08.2005 (Пн) 8:12

блин, даже незнаю чем помочь
я, как тока поставил шестой сервис пак у меня все столо на свои места - и базу он видел без ошибок и вобше.
мож у тя в настрой ках контрола досих пор болтается Access 97
хотя в ряд ли :(

ещё попробуй стереть контрол и занова его поставь, мож поможет :)

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 08.08.2005 (Пн) 9:33

Каюсь!.. Посыпаю голову пеплом!.. Не бейте дяденьки дитя неразумное!!!
Это ж надо такое бревно не заметить в собственном глазу :shock: - выставить свойство Connect в Access 2000 а не просто Access.

Спасибо lord0n-у, ткнул чем надо и куда надо! Дай я тебя расцелую.
:D

Резюмирую для тех, кто наступит на те же грабли:
после установки сервиспака, контрол Data действительно видит базу данных Access 2000.

Спасибо всем кто отозвался!
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 144

    TopList