Помогите пожалуйста! VLISP + VFoxPro. Построение прямоугольника по данным из БД!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите пожалуйста! VLISP + VFoxPro. Построение прямоугольника по данным из БД!

Помогите пожалуйста! VLISP + VFoxPro. Построение прямоугольника по данным из БД!

Ответ
Поиск в этой теме
Непрочитано 09.02.2009, 00:03 #1
Помогите пожалуйста! VLISP + VFoxPro. Построение прямоугольника по данным из БД!
eternalflame
 
Регистрация: 08.02.2009
Сообщений: 10

Помогите пожалуйста! Такая задача: В VFoxPro составленна таблица из трех столбцов (Box L x B; L; B). Далее выбирая в таблице (уже связана с AutoCAD'ом и открыта его средствами) определенную строку с нужным (Box L x B), нужно чтоб этот прямоугольник строился на чертеже! Можете подсказать как это лучше реализовать и (или) часть кода которая будет забирать данные из ячеек (L) и (B) при выборе определенной строки!

P.S.: Зарание извиняюсь если создал повтор или что-то не так написал. Я в этом деле новичек, поэтому даже не знаю толком что искать, полистал темы, поюзал поиск, но ничего толкового не нашел!
Просмотров: 4931
 
Непрочитано 09.02.2009, 00:39
#2
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Навскидку:
1. Нужен запрос значений L,B в базе по выбранному "Box L x B" (и вообще это число = L*B, или как?). "Box L x B" это ключевое поле в таблице?
2. Далее по определенным L,B создаешь блок, и интерактивно, через _insert )) его вставляешь. (Поиском по insert на форуме найдешь море примеров)

Цитата:
Далее выбирая в таблице (уже связана с AutoCAD'ом и открыта его средствами)
Расскажи-ка какими средствами она связана, и где выбирая. А лучше все выкладывай ))

Продублировалось, сорри.

Упс, еще раз )

Последний раз редактировалось Кулик Алексей aka kpblc, 09.02.2009 в 08:00.
Baldares вне форума  
 
Автор темы   Непрочитано 09.02.2009, 01:44
#3
eternalflame


 
Регистрация: 08.02.2009
Сообщений: 10


Цитата:
Сообщение от Baldares Посмотреть сообщение
1. Нужен запрос значений L,B в базе по выбранному "Box L x B" (и вообще это число = L*B, или как?). "Box L x B" это ключевое поле в таблице?
"Box L x B" - текст. По этому столбцу пользователь выбирает прямоугольник, который он хочет начертить. А "L" и "B" - числа, (длинна и ширина) которые прописаны в программе на ЛИСП.
Сейчас программа выглядит вот таким образом:
Код:
[Выделить все]
(defun dtr(a)
(* pi(/ a 180.))
)
(defun box()
(command "_limits" "" "210,297")
(princ "Укажите положение точки привязки:")
(setq pt1 (getpoint))
; ------Координаты х и у в известной точке----
(setq x (nth 0 pt1)
      y (nth 1 pt1)
)
(setq b (getreal "\Размер L:"))
(setq h (getreal "\Размер B:"))
;------Определение узловых точек---------
(setq pt2 (list (+ x L) y))
(setq pt3 (list (+ x L) (+ y B)))
(setq pt4 (polar pt1 (dtr 90.) B)) 
;-------Отрисовка контура-------------
(command "_line" pt2 pt3 pt4 "")
;-------Простановка размеров----------
(command "_dimlinear" pt1 pt2 (polar pt1 (dtr 270.) 10.))
(command "_dimlinear" pt2 pt3 (polar pt1 (dtr 180.) 10.))
)
Только в данном коде числа "L" и "B" вводятся с клавы, а надо чтобы они определялись из таблицы, когда пользователь нашел в столбце "Box L x B" нужный ему прямоугольник и щелкнул по строке.

Цитата:
Сообщение от Baldares Посмотреть сообщение
Расскажи-ка какими средствами она связана, и где выбирая. А лучше все выкладывай ))
Таблица создана в VFoxPro. Далее Фокс не используется, а работаем только с файлом Box_Base.dbf. С помощью АКАДовского "Диспетсера подключений к БД" База Данных подключается к АвтоКАДу, и теперь её можно просматривать в АвтоКАДе.
Главный вопрос в том, как сделать так, чтобы, когда я выбираю например строчку с "Box 10 x 20", ЛИСП забрал из других двух столбцов значения "10" и "20".
eternalflame вне форума  
 
Непрочитано 09.02.2009, 09:27
#4
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


А как добраться до этого подключения?
Через DbConnect? AutoCAD.GetInterfaceObject("CAO.DbConnect.16")
Чето как-то страшненько (.
Интересней через АДО, имно.

PS Непонятно, "почему молчат..."(с)

Последний раз редактировалось Baldares, 09.02.2009 в 11:00.
Baldares вне форума  
 
Непрочитано 09.02.2009, 11:04
#5
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


1. LISP-программа должна работать внутри AutoCAD
2. Для работы с DBF надо использовать ADO. Можно воспользоваться http://acad.fleming-group.com/Downlo...ADOLisp252.zip
3. К БД посылаешь обычный SQL-запрос.
4. Результаты запроса преобразуешь в LISP-переменные и рисуешь чего угодно.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 09.02.2009, 13:45
#6
eternalflame


 
Регистрация: 08.02.2009
Сообщений: 10


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
2. Для работы с DBF надо использовать ADO. Можно воспользоваться http://acad.fleming-group.com/Downlo...ADOLisp252.zip
Цитата:
Сообщение от Baldares Посмотреть сообщение
Интересней через АДО, имно.
А можно поподробнее про АДО: зачем он в данном случае, как и в какое место кода по отрисовке прямоугольника его привинтить!
Я скачал АДО, пока что бегло пробежал глазами по мануалу, поизучал код предложенного там примера (код АДОЛИСП-библиотеки для меня вообще темный лес) и понял только то, что происходит подключение к БД, потом производятся какие-то действия и происходит отключение от БД. Запустил пример и увидел то же самое только в действии! ((
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
3. К БД посылаешь обычный SQL-запрос.
А когда я счелкаю по нужной мне строке, SQL-запрос не происходит автоматически?
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
4. Результаты запроса преобразуешь в LISP-переменные и рисуешь чего угодно.
А как их преобразовать в ЛИСП-переменные. Например я создал запрос
[FONT=Times New Roman]select*from box_base where boxLxB=box10x20[/FONT]
Он ведь найдет мне всю строчку, а как оттуда выцепить именно "L" и "B"? Да, и как вообще добратся до результатов запроса?

P.S.: ShaggyDoc, Baldares спасибо, что откликнулись!
eternalflame вне форума  
 
Непрочитано 09.02.2009, 14:21
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Сначала организовывается коннект к базе данных, а потом выполняется запрос вида
Код:
[Выделить все]
select * from <ЗдесьИмяТаблицы> where <А_здесь_условие_выбора>;
Результаты выполнения запроса уже обрабатывать отдельно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2009, 14:49
#8
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Все таки как можно добраться до этой палитры "Диспетчера подключения к БД"?
Определить текущую таблицу и запись в ней, L и B, и построить этот чертов прямоугольник.
Даже если можно, то получиться фигово, потому что эта палитра и просмотр таблиц выглядят убого(Акад2008).

На лиспе с формочками напряг.
VBA каюк.
Делай сразу на С++ ))

На caduser искал?
Вот посмотри:
Как написать базу данных на Lisp?
Базы даных Access. Вставка значения с бази в Acad2002
Готовые проги: от Евгения Елпанова
LISP.LIB Чтение Excel файлов, используя ADO
Поиск великая вещь!
Добью:
скажи НЕТ субд!

Последний раз редактировалось Baldares, 09.02.2009 в 15:19.
Baldares вне форума  
 
Непрочитано 09.02.2009, 15:07
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


В этой библиотеке как раз есть примеры. Смотри, как и что возравщается.
LISP изучать придется, это обязательно. В AutoCAD LISP это примерно то же, что язык SQL в мире баз данных.

А упоминавшийся "Диспетсера подключений к БД" в AutoCAD это так, для блондинок. Демонстрация концепции - что в принципе можно подключиться к БД и посмотреть результаты в понятной форме. Но это не для последующего черчения.
ShaggyDoc вне форума  
 
Непрочитано 09.02.2009, 16:12
#10
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Вот в этой ветке есть примеры подключения к разным базам .
Holon вне форума  
 
Автор темы   Непрочитано 09.02.2009, 19:37
#11
eternalflame


 
Регистрация: 08.02.2009
Сообщений: 10


Бррр! От этих кодов голова идет кругом. Ничего, прорвемся! =))

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Сначала организовывается коннект к базе данных, а потом выполняется запрос вида
Код:
[Выделить все]
select * from <ЗдесьИмяТаблицы> where <А_здесь_условие_выбора>;
Результаты выполнения запроса уже обрабатывать отдельно.
Как сделать запрос я знаю, а вот как сделать конект к БД и потом обработать результаты покачто представляю очень смутно! Как я уже понял конект можно реализовать при помоще АДО, только пока еще не совсем сообразил как именно, да и как обработку результата сделать пока не совсем понял!

Цитата:
Сообщение от Baldares Посмотреть сообщение
Все таки как можно добраться до этой палитры "Диспетчера подключения к БД"?
Определить текущую таблицу и запись в ней, L и B, и построить этот чертов прямоугольник.
Даже если можно, то получиться фигово, потому что эта палитра и просмотр таблиц выглядят убого(Акад2008).
До палитры можно в принципе не добираться. Она по сути только для того, чтобы пользователь мог найти название нужной ему строки. Конечно очень хотелось бы чтобы программа работала после клика по строчке и последующей команды (box), но как говорится "Мали ли чего хочется!.." В целом надо чтобы пользователь мог полистать таблицу, найти устраивающий его прямоугольник, ввести название строки и кликнув мышкой на любом месте чертежа, получить чертеж!

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
В этой библиотеке как раз есть примеры. Смотри, как и что возравщается.
LISP изучать придется, это обязательно. В AutoCAD LISP это примерно то же, что язык SQL в мире баз данных.

А упоминавшийся "Диспетсера подключений к БД" в AutoCAD это так, для блондинок. Демонстрация концепции - что в принципе можно подключиться к БД и посмотреть результаты в понятной форме. Но это не для последующего черчения.
Я его потихонечку и изучаю! Как чего начертить уже более меннее понимаю, а такие коды как там в библиотеке для меня пока в новинку.
А подключение через диспетчер вообщем и нужен в принципе для блондинок, чтобы они посмотрели таблицу, выбрали что им надо, ввели в команндную строку, и получили готовый результат, не вдаваясь в подробности как и что там работает!

Цитата:
Сообщение от Holon Посмотреть сообщение
Вот в этой ветке есть примеры подключения к разным базам .
Уххх! Как там все непонятно. Вообщем-то сижу, пытаюсь разобраться, и пока несколько вопросов:
1. Способ подключения к БД я должен откопать в АДО и вставить в текст прораммы. Больше всего смущает примечание автора в мануале (For Visual FoxPro (I haven’t tested this one either))? Сегодня буду пробывать подключить!
2. Способ, с помощью которого в той теме переменные забираются из базы данных, подойдет для *.dbf файлов?

Holon, если есть время и возможность, набросай пожалуйста пример кода для объединения ЛИСПа с Фоксовской таблицей и дальнейшим выдергиванием из него нужных чисел! По анологии как это делалось с SQL-сервером!
eternalflame вне форума  
 
Непрочитано 09.02.2009, 23:08
#12
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


К сожалению катастрофически нехватает времени, вот здесь пример с описанием по подключению к FoxPro
Holon вне форума  
 
Автор темы   Непрочитано 09.02.2009, 23:44
#13
eternalflame


 
Регистрация: 08.02.2009
Сообщений: 10


Цитата:
Сообщение от Holon Посмотреть сообщение
К сожалению катастрофически нехватает времени,
Жаль! (

Цитата:
Сообщение от Holon Посмотреть сообщение
вот здесь пример с описанием по подключению к FoxPro
Спасибо большое! ))
eternalflame вне форума  
 
Непрочитано 10.02.2009, 02:29
#14
Baldares


 
Регистрация: 17.10.2008
Саратов
Сообщений: 426


Почему VLisp? Эту задачу легче решить в VS(установить ObjectARX и вперед) или Делфи, ну в VBA(ой) еще проще.

Offtop: Правда с ObjectARXом, это будет уже не "обезьяна с гранатой", а с атомной бомбой )) Навеяно САПРом на базе
Baldares вне форума  
 
Непрочитано 10.02.2009, 06:32
#15
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Baldares, там Visual Fox Pro, значица для визуального редактирования самой базы данных никаких других средств и не надо. Из Fox-программы, кстати, и подключиться к Автокаду через COM можно, только надо это предусмотреть. И прямоугольники нарисовать объектными методами можно. Но это иной путь, тоже уметь надо.

Цитата:
Больше всего смущает примечание автора в мануале (For Visual FoxPro (I haven’t tested this one either))
А это не зря. Существует несколько разновидностей DBF-файлов. Они отличаются форматами индексных файлов (ndx, idx, cdx), наличием мемо-полей, возможностью поддержки кодировок. Если у "клипперовского" DBF потеряется индексный ndx-файл, ничего страшного. А если потеряется "фоксовский" cdx - базу не открыть. Да ещё, возможно, в VFP Microsoft какие-нибудь подляны встроила. Потому от DBF для серьезных проектов давно отказались.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 21.04.2009, 00:06
#16
eternalflame


 
Регистрация: 08.02.2009
Сообщений: 10


А реально связать окна на DCL, с данными из БД???
Хотелось бы получить такой результат:
Открывается DCL окно с выпадающим списком. В этом списке в момент открытия свормировались все данные по длинам. Если в базе данных убрать какие-либо значения длинны, то при следующем открытии окна, формируются данные уже без этих значений. И т.д.
Затем пользователь выбирает, например, длину = 10, нажимает ок и открывается новое окно, в котором отображены все строки БД в которых длина = 10.
Может кто-то сталкивался уже с такой проблемой или хоть примерно представляет как приведенный выше пример реализовать! =))
Заранее СПАСИБО!!!
eternalflame вне форума  
 
Непрочитано 21.04.2009, 06:36
#17
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Для визуальной работы с БД не надо делать никаких окон на DCL - это тупиковый путь.

Окно должно быть реализовано в COM-сервере, который умеет полностью работать с БД через любой интерфейс (ADO, например, да хоть как). В визуальных элементах и в наборе данных такого окна всегда находятся актуальные данные. Их можно сортировать, фильтровать и прочее.

В LISP, при необходимости, только передаются отобранные результаты. Например для рисования чего-то. LISP-программа вызывает COM-сервер с заданными аргументами, получает данные, закрывает СОМ-сервер и что-то делает с данными.

На прилагаемом скриншоте пример такого диалога. Данные по координатам объекта берутся из БД, выводятся в виде списка. В самом диалоге рисуется и контура объекта - для наглядности. Диалог вызывается из LISP и пользователь вообще не знает, как он сделан. Но видит и получает результат в виде списка координат для рисования конктура.

Этот же диалог может использоваться для редактирования полилинии. В этом случае он получает координаты из LISP.

Во втором диалоге более явно видно, что он работает с БД. Там есть и сетка, и просмотр записи, и все визуальные элементы для работы с БД. На DCL такого никогда не сделать, да и не нужно.
Миниатюры
Нажмите на изображение для увеличения
Название: dlg_pline_edit.jpg
Просмотров: 108
Размер:	41.1 Кб
ID:	19216  Нажмите на изображение для увеличения
Название: dlg_gis_edit.png
Просмотров: 110
Размер:	14.8 Кб
ID:	19217  
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 21.04.2009, 10:21
#18
eternalflame


 
Регистрация: 08.02.2009
Сообщений: 10


ShaggyDoc, спасибо! Учту!
Второй вариант как раз то что нужно! =))) А можно поподробнее объяснить как такой диалог создать?
eternalflame вне форума  
 
Непрочитано 21.04.2009, 12:00
#19
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
как такой диалог создать?
Зависит от среды разработки. Но принцип один - тащим с палаитры компонентов (или как там, в своей среде они называются) визуальные элементы, раскидываем по форме, связываем свойствами, пишем обработчики событий

Подробно (для Delphi) написано в книге "САПР на базе AutoCAD - как это делается".

В общем виде схема такая:

1. Создают DLL-библиотеку, которая будет являться субъектом автоматизации (ActiveX Library ) - COM-сервером.

2. Добавляют в созданный проект объект автоматизации (Automation Object )

3. В редакторе библиотеки типов добавляют в объект автоматизации свойства и методы

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

5. Компилируют проект, регистрируют сервер.

6. Используют в любых приложениях, написанных на любых языках.

Форму можно сначала отработать в EXE-файле.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 21.04.2009, 16:29
#20
eternalflame


 
Регистрация: 08.02.2009
Сообщений: 10


Спасибо! )) Ушёл разбираться! =))

Не долго пришлось разбираться! =(( Сказали, что надо окно на DCL! =(
Сейчас у меня основная проблема, как результаты запроса SELECT all l FROM box_base поместить в падающий список. Никто не знает как это сделать? А то у меня ну ни в какую не получается! (((

Последний раз редактировалось eternalflame, 21.04.2009 в 18:23.
eternalflame вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите пожалуйста! VLISP + VFoxPro. Построение прямоугольника по данным из БД!



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста найти расчёт упорной стенки sonson Конструкции зданий и сооружений 11 01.09.2020 17:24
ПОМОГИТЕ пожалуйста найти расценки на продавливание стальног DenIZ Разное 4 14.09.2007 12:38
Помогите пожалуйста с Лирой 9.4 !!!! Yapp Лира / Лира-САПР 33 22.02.2007 06:14