Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2011, 11:43   #1
uni
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 19
Восклицание Как передать данные из БД в ComBox

Добрый день. Необходимо передать столбец из БД в ComboBox.

Вот мой нерабочий код

Код:
Private Sub ComboBox1_DropButtonClick()


 Dim db As ADODB.Connection
 Dim rec As ADODB.Recordset

    
 Set db = New ADODB.Connection
 Call db.Open("Provider='sqloledb';Data Source='" + Server + "';Initial Catalog='" + DataBase + "'", User, Password)
 Set rec = New ADODB.Recordset
 
 sqld = "SELECT SklPrcRst_Rcd, SklPrcRst_Nm FROM SklPrcRst"
 
 rec.Open sqld, db
 
 While Not rec.EOF
    ComboBox1.AddItems rec!SklPrcRst_Nm
    rec.MoveNext
 Wend
  
 rec.Close
Set rec = Nothing
db.Close
Set db = Nothing
 
End Sub
Выдает вот такую ошибку

Код:
Run-time Error '438'
Object doesn't support this property or method
Подскажите, что там с методом не так и как надо? Излазил много форумов, но пока ничего рабочего не нашел.
uni вне форума Ответить с цитированием
Старый 21.07.2011, 12:00   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Выдает вот такую ошибку
На какой строке ошибка?

Одну ошибку сразу увидел:
Код:
ComboBox1.AddItems rec!SklPrcRst_Nm
Правильно будет
Код:
ComboBox1.AddItem rec!SklPrcRst_Nm
EducatedFool вне форума Ответить с цитированием
Старый 21.07.2011, 12:07   #3
uni
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 19
По умолчанию

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

Хм, он почему то мне несколько раз выводит список, т.е. названия повторяются циклически(((

Т.е. у меня например запрос выдает 3 строчки, а то что написано на vba выдает 6 или даже 9 строчек...

Последний раз редактировалось uni; 21.07.2011 в 12:11.
uni вне форума Ответить с цитированием
Старый 21.07.2011, 12:29   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
------------
 rec.Open sqld, db
 ComboBox1.Column()=rec.GetRows
 rec.Close
------------
И отображаете второй столбец в ComboBox1 ,установив ширину первого 0,количество столбцов 2
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 21.07.2011 в 12:35.
doober вне форума Ответить с цитированием
Старый 21.07.2011, 12:35   #5
uni
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Код:
------------
 rec.Open sqld, db
 ComboBox1.Column()=rec.GetRows
 rec.Close
------------
И отображаете второй столбец в ComboBox1
Так мне не нужен второй столбец, мне необходимо что бы в ComboBox попадало ровно 3(это пример, кол-во строчек может быть любым, но должно попадать именно то кол-во которое отображается в запросе на sql, а не увеличенное кол-во в n раз) строчки. Может я вас не понял.
uni вне форума Ответить с цитированием
Старый 21.07.2011, 13:33   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Вы вообще меня не поняли.
Во вложении пример
Вложения
Тип файла: rar Пример.rar (11.8 Кб, 19 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 21.07.2011, 13:55   #7
uni
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 19
По умолчанию

doober спасибо за пример. теперь ясно...
uni вне форума Ответить с цитированием
Старый 22.07.2011, 07:51   #8
uni
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 19
По умолчанию

Замечание, что бы вывести второй столбец, необходимо записать GetRows с параметрами, вот так
Код:
rs.GetRows(-1, , 1)
uni вне форума Ответить с цитированием
Старый 22.07.2011, 08:20   #9
uni
Пользователь
 
Регистрация: 05.06.2011
Сообщений: 19
По умолчанию

Мде, теперь как то надо значение второго поля передать в ComboBox1_Change() что бы он запускал запрос в БД.

Т.е. у нас есть ComboBox1_DropButtonClick() здесь мы из БД получаем список наших прайсов.
Двлее нужно использовать метод ComboBox_Change() что бы при выборе прайса запускался запрос на формирование этого самого прайса.

Код:
Private Sub ComboBox1_DropButtonClick()

 Dim db As ADODB.Connection
 Dim rec As ADODB.Recordset, rs As ADODB.Recordset
 
 Set db = New ADODB.Connection
 Call db.Open("Provider='sqloledb';Data Source='" + Server + "';Initial Catalog='" + DataBase + "'", User, Password)
 Set rec = New ADODB.Recordset
 
 sqld = "SELECT SklPrcRst_Rcd, SklPrcRst_Nm FROM SklPrcRst"
 
 rec.Open sqld, db
 
 If Not rec.State = 1 Then Exit Sub
 Set rs = db.Execute(sqld)
 ComboBox1.Column() = rs.GetRows(-1, , 1)



End Sub

Private Sub ComboBox1_Change()

Dim rec2 as ADODB.Recordset

Set rec2 = New ADODB.Recordset

sqld2 = "select sklgr_nm, skln_CD,Skln_Rcd, Skln_NMAlt, Sum (SklKrt_qt ) Ost, Sum (Sklkrt_sum) SummAll_Rub , " + _
			 "kor.nmei_qtosn as kor,  bl.nmei_qtosn as bl, ArcCn, (ArcCn*bl.nmei_qtosn ) as CnBl, " + _
"			(ArcCn*kor.nmei_qtosn) as CnKor" + _
"from skln" + _
"left join sklkrt on sklkrt_rcdnom = skln_rcd" + _
"left join sklgr on sklgr_rcd = skln_rcdgrp" + _
"left join SKLNOMEI kor on kor.nmei_rcdnom=skln_rcd and kor.nmei_cd=3" + _
"left join SKLNOMEI bl on bl.nmei_rcdnom=skln_rcd and bl.nmei_cd=2 " + _
"left join SklPrc on SklPrc_RcdOpa = SklKrt_RcdOpa" + _
"left JOIN " + _
"(" + _
"  select CA.SklPrcArc_Prc as SklPrcArc_Prc, CA.sklprcarc_cn1b as ArcCn, " + _
"    CA.sklprcarc_dat as sklprcarc_dat" + _
"  from sklprcarc CA" + _
"  where CA.SklPrcArc_PrcR = " + rec!SklPrcRst_RCD + _
"   AND CA.SklPrcArc_Dat = " + _
 "   ( SELECT MAX(A1.SklPrcArc_Dat)" + _
"      FROM SklPrcArc A1 " + _
     " WHERE A1.SklPrcArc_Dat <= GETDATE()      " + _     
    "  AND A1.SklPrcArc_PrcR = " + rec!SklPrcRst_RCD + _
   "     AND A1.SklPrcArc_Prc = CA.SklPrcArc_Prc 	" + _
  "    GROUP BY A1.SklPrcArc_Prc,A1.SklPrcArc_PrcR" + _
 "   )                        " + _
") Arc ON Arc.SklPrcArc_Prc = SklPrc_Rcd " + _
"where sklKrt_qt <> 0  and " + _
"			ArcCn <> 0 --and " + _
"		--	SklKrt_Stor = '65535'" + _
"group by sklgr_nm, skln_cd, Skln_Rcd, Skln_NMAlt, kor.nmei_qtosn ,  bl.nmei_qtosn , Arc.ArcCn" + _
"order by sklgr_nm, Skln_NMAlt" 


rec2.Close
Set rec2 = Nothing
rec.Close
Set rec = Nothing
db.Close
Set db = Nothing

End Sub
Как из первого метода передать rec!SklPrcRst_RCD я не знаю, понимаю что первый метод не должен быть приватным и должен возвращать значение rec!SklPrcRst_RCD. Но разве так можно

Код:
Sub ComboBox1_DropButtonClick(rcd as integer)
...
rcd = rec!SklPrcRst_RCD

Private Sub ComboBox1_Change ()
Call ComboBox1_ DropButtonClick(rcd)
Короче, понятно что второй код это чушь, но я хз как сделать...
uni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать данные из текстового файла в массив (с++) impossible Помощь студентам 0 04.05.2011 18:56
как передать данные с формы в родительское окно? Arassir JavaScript, Ajax 2 03.02.2011 05:38
Как Передать данные из формы в отчет? ZiG24RUS Microsoft Office Access 1 29.05.2009 23:31
Как передать данные уже в запущеную программу dr.Chas Общие вопросы Delphi 15 18.06.2008 22:16
Как передать данные из SQL в файл _ozzy_ БД в Delphi 0 12.06.2008 16:50