Как связать программу с базой в Excel?

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

Как связать программу с базой в Excel?

Сообщение kminas » 15.05.2007 (Вт) 14:52

Я пишу программу на VB для заполнения таблиц Word текстовой информацией. Недавно выяснил, что базу для этих таблиц можно подключить из Excel. Разобрался как можно извлекать информацию, но как заставить при этом эту информацию взаимодействовать с компонентами VB не знаю. Ведь в зависимости от вида оборудования, его марки, исполнения и других параметров должен подключаться контейнер кнопок выбора, заполняться список Combobox-ов и т.д. Как это все подсоединить? Может ли кто-нибудь дать ссылку на примеры исходников?
Константин

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 15.05.2007 (Вт) 18:58

Не понял... Проблема в чём - в динамическом создании и добавлении контролов на форму?
Salus populi suprema lex

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 15.05.2007 (Вт) 21:40

dr.MIG писал(а):Не понял... Проблема в чём - в динамическом создании и добавлении контролов на форму?
Конечно и .additem тоже динамично и как это все динамично увязать с данными из Excel, ну, дальше-то будет полегче
Константин

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 17.05.2007 (Чт) 13:12

Непонятно всё равно как-то. Какая проблема добавить элементы в список (Combo1.AddItem "text")? Если по поводу добавления контролов, то почему их обязательно добавлять динамически - пока мне это непонятно. Одним словом анамнез какой-то запутанный...
То есть хотелось бы от автора услышать что-то вроде - извлекаю данные из Excel при помощи ... Надо с ними сделать то-то и то-то. Не получается сделать вот это. И побольше конкретики - что за данные, зачем и каким образом они должны взаимодействовать с элементами управления. В чём вообще заключается конкретная цель.
Salus populi suprema lex

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 24.05.2007 (Чт) 21:04

dr.MIG
Цель, как я уже сказал, заполнение таблиц в Word подготовленным в VB тексте. Так вот мне подсказали, что можно хранить данные в Excel.
Сейчас же я сам напихиваю эти данные в чистый VB и оттуда вставляю в Word. К примеру, в данный момент завершая работу над данными о вентиляторах. Вентиляторы бывают радиальные и осевые, при это в обычном и взрывоопасном исполнении, разные заводы-изготовители и т.д. Так вот при нажатии на одни контролы, открываются одни контейнерами с контролами и в Combo накачивается один текст, при нажатии на другие - другой и контролы другие. В обычной Бейсике все идет более менее нормально. Но мне подсказали, что я буду каждый раз лазить в прогу и редактировать, добавлять новое оборудование и т.д. А если, мол в Экселе создать таблицы, то можно как-то из них извлекать инфу и постоянно там данные редактировать, не трогая прогу. Но как это сделать, умишка не хватает.
Константин

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 24.05.2007 (Чт) 21:26

Код: Выделить всё

Private Sub Command1_Click()
'ADD reference MS EXCEL OBJECT LIBRARY
Dim exl As Excel.Application
Dim wbx As Excel.Workbook
Dim stx As Excel.Worksheet

Set exl = New Excel.Application
Set wbx = exl.Workbooks.Open("C:\mybase.xls")
Set stx = wbx.Worksheets(1)
Debug.Print stx.Range("A1").Value
stx.Range("A1").Value = "qwerty"
wbx.Save
wbx.Close
Set exl = Nothing
End Sub

хотя конечно лучше бы Access.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 27.05.2007 (Вс) 23:29

[quote=kminas]А если, мол в Экселе создать таблицы, то можно как-то из них извлекать инфу и постоянно там данные редактировать, не трогая прогу. Но как это сделать, умишка не хватает.[/quote]

Да. И я тебе больше скажу - я на работе постоянно создаю таблицы в экселе. Заполняю их данными. Извлекаю по необходимости и (^C - ^V) в Word - без проблем... И УМИШКА хватило делать все это не используя программирование вообще!!!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 03.06.2007 (Вс) 22:08

VB_D3D_Денис
Знаешь, представь себе и ятак делаю, уже последних лет 12. Но задооолго до этого выучил русский язык и тоже пользуюсь им БЕЗ программирования и внимательно читаю о чем речь в теме, а потом умничаю.
Константин

igolka
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 03.06.2007 (Вс) 19:13

Сообщение igolka » 03.06.2007 (Вс) 22:55

Мне показалось, что Вам подойдет связка Access с Word! Используя механизмы слияния.

Если есть время "рожать" методы работы с вашими вентиляторами в VB, то в принципе тоже работать будет! ,)

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 04.06.2007 (Пн) 20:13

igolka писал(а):Мне показалось, что Вам подойдет связка Access с Word! Используя механизмы слияния.

Если есть время "рожать" методы работы с вашими вентиляторами в VB, то в принципе тоже работать будет! ,)


Конечно отлично бы подошла, но, во-первых, надо изучать Access, правда я небольшую программку написал на нем лет 5 назад, да сильно подзабыл, надо покупать полный Офис, а у нас и стандартный надо докупить, чтобы мою программу ставить. Кроме того, сейчас сайтом фирменным занимаюсь и времени не хватает. В общем спасибо за совет.
Константин

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 04.06.2007 (Пн) 23:18

igolka
Никакого Worda! Только Access! В нем прекрасно все можно сделать. Автор ветки видит проблему не с того конца. Он думает что его проблема в заполнении таблиц ворда, а на самом деле - проблема в создании упорядоченных данных и последующей печати любых отчетов по выборкам из нее.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 09.06.2007 (Сб) 16:46

VB_D3D_Денис писал(а):igolka
Никакого Worda! Только Access! В нем прекрасно все можно сделать. Автор ветки видит проблему не с того конца. Он думает что его проблема в заполнении таблиц ворда, а на самом деле - проблема в создании упорядоченных данных и последующей печати любых отчетов по выборкам из нее.

Я с Вами СОГЛАСЕН! Но только надо убедить наше руководство купить ПОЛНЫЙ Офис хотя бы тем юзерам, что будут заполнять такие таблицы, а у многих только OpenOfice. Кроме этого надо переубедить руководство, вопреки работникам нашей комп. слудбы сделать сеть в фирме. Кроме того, надо убедит руководство купить полную версию чертежной программы. И прочее и прочее.... например, можете почитать здесь http://forum.ixbt.com/topic.cgi?id=4:82375
Константин

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 07.07.2007 (Сб) 15:21

EUGY писал(а):
Код: Выделить всё
Private Sub Command1_Click()
'ADD reference MS EXCEL OBJECT LIBRARY
Dim exl As Excel.Application
Dim wbx As Excel.Workbook
Dim stx As Excel.Worksheet

Set exl = New Excel.Application
Set wbx = exl.Workbooks.Open("C:\mybase.xls")
Set stx = wbx.Worksheets(1)
Debug.Print stx.Range("A1").Value
stx.Range("A1").Value = "qwerty"
wbx.Save
wbx.Close
Set exl = Nothing
End Sub

хотя конечно лучше бы Access.


в принципе .... могу добавить вот что.
1. Обычно если я работаю с Office 2003, то случайно оказывается что у клиента Оffice 2000 или и того подавно 97 :)
Тогда оптимальнее использовать позднее связывание. (так больше шансов что ты вообще Эксель запустишь) или таскать за собой Excel.exe с набором всего необходимого:)

2. Нас странице Excel лучше взять формат CSV. Если офис не потянет, ты хоть сможешь одну страницу считать через обычные текстовые файлы

3. при вызове Экселя лучше его делать Невидимым, т.ею Exl.Visible = False, этим ты хоть время сэкономишь поскольку прорисовываться ничего не будет при загрузке.

4. Грабля 2. Когда работаешь с экселем Лучше всего по моему мнению Задать параметр Exl.DisplayAlerts = False тогда всякие месаги которые тебе эксель захочет задать не будут тебя беспокоить.

5. В предложеном примере Excel закрывается через Set Exl = Nothing как показала практика, не всегда такой вызов этот самый эксель закрывает. Exl.Quit сама закроет Excel, ну и затем можно Set Exl = Nothing.

6. Можно обозвать первую строку экселя Нужными тебе параметрами и сохранить в форматье DBASE .... (у тебя будет файл DBF который ты сможешь экселем редактировать, а доступ к данным через ADO)
например так:

Код: Выделить всё
Function cnToDBF(PATH As String) As ADODB.Connection
  On Error GoTo Err1
  Set cnToDBF = New ADODB.Connection
  If Dir(PATH) = "" Then Exit Function
  cnToDBF.Open "Driver=Microsoft dBase Driver (*.dbf);DBQ=" & PATH
 
  Exit Function
Err1:
  Set cnToDBF = Nothing
End Function


там свои особенности но работать реально проще будет.

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 07.07.2007 (Сб) 15:53

SSecurity писал(а):в принципе .... могу добавить вот что.

Спасибо за шестой пункт, не знал.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 07.07.2007 (Сб) 16:03

EUGY писал(а):
SSecurity писал(а):в принципе .... могу добавить вот что.

Спасибо за шестой пункт, не знал.


Я сам не знал ... случайно увидел как любимая жена экселем DBF-ку открыла и значения скопировала нужные:)

+7 (921) 167 44 01

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 07.07.2007 (Сб) 16:21

Насколько я понимаю автора ... сожно написать супер-пупер хорошую программу, но добиться структурированного ввода значение - вот проблема "нумбер Ван". Думаю куда проще будет рассказать юзерам екселя что вбивать нужно текст в 4 колонки

Продукт
Тип
Исполнение
Производитель

Вообще говоря, сам эксель будет предлагать варианты, и судя по своей собственной манере ввода ... писать второй раз тоже значение мне будет "в западло", чем просто нажать ВВОД на предлагаемом к подстановке слове. Так у тебя более менее одинаковые значения будут.

Потом открываешь эксель, или то чем ты его заменишь и начинаешь строить список, можно воспользоваться Collection можно Dictionary из MS Scripting Runtime, можно просто массив, и смотришь было значение значит пропускаешь, не было - добавляешь.
В итоге потом наполнишь все списки тем что тебе нужно.


По конфигурации:

Теперь что касается кнопок, берешь любой файл хоть текстовый и в нем делаешь надпись типа

вентилятор,осевой,взрывоопасный,вася пупкин;1;1;1;1;0;0;1

- первые 4 параметра - значения, а единички и нолики - означают какие кнопки включить а какие отключить, и т.д.
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 07.07.2007 (Сб) 23:38

Спасибо ВСЕМ, особенно,SSecurity
буду пробовать!
Константин

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 07.07.2007 (Сб) 23:43

kminas писал(а):Спасибо ВСЕМ, особенно,SSecurity
буду пробовать!


Рад помочь землякам;) да и остальным тожа

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 08.07.2007 (Вс) 23:03

kminas писал(а):например, можете почитать здесь http://forum.ixbt.com/topic.cgi?id=4:82375


Все понял. Примите мои соболезнования, коллега. Я б на вашем месте не парился и просто поискал бы новую работу (что и делал более-менее успешно пару раз). Благо не в деревне живете!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


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

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

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

    TopList