Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Браузер просмотра товаров базы данных, Ошибка "несовпадение типов" 
:(
    Опции темы
Raiser
Дата 23.12.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Нужна ваша помощь!  smile 
Есть база данных в Access, браузер просмотра этой базы данных необходимо сделать в Excel'e. Базу я сделал, в экселе сделал браузер. 
Запускаю DAO, но после запуска браузера выдается ошибка:
Run-time error: несовпадение типов
Вот код формы:
Код

Private db As Database
Private Sub lstProiz_Click()
Dim rs As Recordset
Dim SQLquiry As String
Dim iCat As String
Dim i As Long
Dim iCatID As Long
If lstProiz.ListIndex = -1 Then Exit Sub
lblCategory.Caption = lstProiz.Text
iCatID = lstProiz.List(lstProiz.ListIndex, 1)
SQLquiry = "SELECT Наименование, ДатаВыпуска, ЕдиницаИзмерения, Стоимость " _
 & "FROM Товары WHERE НомерКатегории=" & CStr(iCatID) & " Order BY Наименование"
Application.Cursor = xlWait
Set rs = db.OpenRecordset(SQLquiry)
With lstCategory
 .Clear
  .AddItem rs.Fields("Наименование").Name
  .List(0, 1) = rs.Fields("ДатаВыпуска").Name
  .List(0, 2) = rs.Fields("ЕдиницаИзмерения").Name
  .List(0, 3) = rs.Fields("Стоимость").Name
End With
i = 1
Do Until rs.EOF
  With lstCategory
    .AddItem rs.Fields("Наименование").Value
    .List(i, 1) = rs.Fields("ДатаВыпуска").Value
    .List(i, 2) = rs.Fields("ЕдиницаИзмерения").Value
    .List(i, 3) = rs.Fields("Стоимость").Value
  End With
  i = i + 1
  rs.MoveNext
Loop
rs.Close
Application.Cursor = xlDefault
End Sub

Private Sub UserForm_Initialize()
Dim rs As Recordset
Dim SQLquiry As String
Dim i As Long
lblCategory.Caption = ""
With lstProiz
  .ColumnCount = 2
  .ColumnWidths = "90;0"
End With
With lstCategory
  .ColumnCount = 4
  .ColumnWidths = "100;30;100;30"
End With
Application.Cursor = xlWait
Set db = OpenDatabase(Name:=ThisWorkbook.Path & "\производители и товары.mdb")
SQLquiry = "SELECT НомерКатегории, НазваниеКатегории FROM Категории"
Set rs = db.OpenRecordset(SQLquiry)
i = 0
Do Until rs.EOF
  lstProiz.AddItem rs.Fields("НазваниеКатегории")
  lstProiz.List(i, 1) = rs.Fields("НомерКатегории")
  i = i + 1
  rs.MoveNext
Loop
rs.Close
Application.Cursor = xlDefault
End Sub



Это сообщение отредактировал(а) Raiser - 23.12.2006, 11:10
PM MAIL   Вверх
dionisiu
Дата 23.12.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



А на какой строке выдаёт ошибку?
Если на строке 
Код

Set rs = db.OpenRecordset(SQLquiry)


То попробуй вместо 
Код

Private db As Database



Сделать 
Код

Private db As DAO.Database


PM MAIL ICQ   Вверх
Raiser
Дата 23.12.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Я в VB не очень разбираюсь, не найду - как настроить, чтобы показывало на какой строке ошибка. Потому что запускаю - выдает ошибку и все.
Что ты предложил не помогло, по-прежнему та же ошибка. Помогите, очень нужно в инсте 
PM MAIL   Вверх
Akina
Дата 24.12.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Raiser @  23.12.2006,  12:52 Найти цитируемый пост)
как настроить, чтобы показывало на какой строке ошибка

Если у тебя открыт GUI работы с VBA в Экселе. то при возникновении ошибки переключись на него - строка, в которой возникла ошибка, будет подсвечена желтым цветом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dionisiu
Дата 25.12.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



Такой ещё вариант:
Код

Dim rs As Recordset


замени на 
Код

Dim rs As DAO.Recordset


Если при написании кода было использовано автозаполнение, то там два варианта Recordset, насколько я понимаю, один из них DAO, а другой ADO, но какой из них какой - не понятно. Обычно я работаю с DAO, и при автозаполнении использую первый сверху. Однако, ошибиться там легко.

В любом случае, стоит попробовать метод, предложенный Akina.
Как вариант - в сообщении об ошибке высвечивается кнопка Debug, нужно нажать её вместо End. Произойдёт останов программы с сохранением текущих значений переменных и строка будет подсвечена желтым. Обычно сообщение об ошибке является модальным окном и мешает обратиться к коду до его закрытия, при этом кнопка "Х" (закрытие) эквивалентна End и обрывает процесс отладки с потерей места ошибки.

Ещё замечание: возможно, при обращении к базе данных тип поля в ней не соответствует той переменной, в которую происходит присвоение значения, то есть стринговые данные присваиваются лонговой переменной (или наоборот).
Как вариант, можно убрать из кода модуля строку 
Код

Option Explicit 
(в самом верху кода), если она есть, и убрать объявления переменных (не рекордсета). Однако, этот шаг крайний, его использование ведёт к крайне нехорошим результатам при разрастании кода (Эта строка запрещает использование необъявленных переменных)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.