| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009

Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009

Ответ
Поиск в этой теме
Непрочитано 29.08.2011, 15:58 #1
Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009
Andru1968
 
г. Балаково
Регистрация: 29.08.2011
Сообщений: 48

Имеются коды для AutoCAD R14, которые передают данные в БД, позволяют их редактировать и просматривать их. Для соединения с БД были использованы функции ASE. Как переделать эти коды для работы в AutoCAD 2009?
Просмотров: 21997
 
Непрочитано 29.08.2011, 16:50
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Для соединения с БД были использованы функции ASE.
Попробуй использовать ADOLisp
Пример использования ADOLisp
__________________
Как использовать код на Лиспе читаем здесь
VVA на форуме  
 
Автор темы   Непрочитано 29.08.2011, 20:46
#3
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Облазил весь форум, все посылают к ADOLisp. А Вы сами это пробовали? Во-первых не могу понять как ее запустить, что бы посмотреть как она работает? Во-вторых я не так силен в LISP, а тем более в ActivX. Можно разобрать ADOLisp более подробно?
Andru1968 вне форума  
 
Непрочитано 29.08.2011, 21:06
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
А Вы сами это пробовали?
Пробовали. Работает.
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
не могу понять как ее запустить
Там все написано - сначала надо сделать объект Connection к БД, потом формировать запрос и запускать его.
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Можно разобрать ADOLisp более подробно?
Только по шагам и только самостоятельно. На данный момент проще будет просто взять его и использовать, особо не заморачиваясь с внутренностями этого черного ящика.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.08.2011, 21:32
#5
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Ребята Вы здесь все такие умные. Один говорит смотри сюда, другой там все написано. Облазил всю ADOLISP_Library полно "defun", но нигде нет "defun c:", тоже самое ADOLISP_Example. Говорю Вам я "чайник". Можно просто объяснить, как воспользоваться эти файлами: ADOLISP_Library.lsp, ADOLISP_Example.lsp и ADOLISP_test.mdb, чтобы увидеть как она работает?
Andru1968 вне форума  
 
Непрочитано 29.08.2011, 23:11
#6
Кулик Алексей aka kpblc
Moderator

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


Andru1968, это - библиотека функций, а не команд. У меня есть к тебе пара вопросов: ты pdf читал? Если да, то там написано, как работать (начиная с раздела 4). Сначала объявляешь объект коннекта к БД (setq ConnectionObject (ADOLISP_ConnectToDB ConnectString UserName Password)). Как определять строку ConnectString - там же, 4.1.1.3.
Потом формируешь запрос на стандартном SQL и выполняешь его (раздел 4.1.2).
После окончания работы с БД надо освободить коннект к ней (раздел 4.1.3).
И второй вопрос: а что ты хочешь увидеть? Что подразумевается под вопросом
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
чтобы увидеть как она работает?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.08.2011, 00:08
#7
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Кулик Алексей aka kpblc,
1. Большое спасибо за ответ.
2. PDF на английском, в котором я вообще ноль. И по-этому на перевод уйдет много времени. Если у кого-то есть русская версия для ознакомления пришлите в личку. Заранее буду благодарен.
3. Если Вас действительно заинтересовала эта тема я могу в Word натыкать картинок с описанием, как работают имеющиеся коды в AutoCAD R14. Потому что 90% кодов для AutoCAD R14, я переработал для AutoCAD 2009 и они работают можно сказать один в один. Оставшиеся 10 % так или иначе связаны либо с передачей данных в БД, либо с редактированием их, либо с просмотром, либо данные из БД вставляются в документы создаваемые для печати.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 00:15
#8
Кулик Алексей aka kpblc
Moderator

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


Andru1968, почти вся документация по программированию на английском (исключение - MSDN, да и та переведена не полностью). Полноценно заниматься твоей задачей, извини, я не могу - физически нет времени.
Могу сказать сразу: описание, как там и что работает, мало чем поможет. Надо знать формат БД, место ее расположения, структуру таблиц и хранимых запросов и т.д. Может быть, вся БД вообще хранится не в mdb или SQL, а в чем-нибудь типа текстовых файлов (как, например, знаменитый "Прокат").
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.08.2011, 00:24
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Оставшиеся 10 % так или иначе связаны либо с передачей данных в БД, либо с редактированием их, либо с просмотром, либо данные из БД вставляются в документы создаваемые для печати.
Смотри сюда:
http://www.cadtutor.net/forum/showth...l=1#post384945
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 30.08.2011, 00:35
#10
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Кулик Алексей aka kpblc,
Переводом PDF я займусь сам.
БД расположена на сервере и все кто работают с данным пакетом имеют к ней полный доступ. БД храниться в *.dbf, но я нашел прогу позволяющую конвертировать ее в *.mdb или *.xls. О структуре таблиц и хранимых запросов ничего конкретного сообщить не могу. Знаю только что для соединения с БД были использованы функции ASE.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 00:53
#11
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
О структуре таблиц и хранимых запросов ничего конкретного сообщить не могу.
Это и будет краеугольный камень - чтоб сделать программу, хорошо работающую с базой данных, необходимо знать структуру базы и язык sql для составления запросов. С языком не так сложно - скорее всего, тебе не понадобится вся его мощь с подзапросами в запросах. Но работать с базой не понимая ее структуры не возможно!

ps. по поводу кода, для связи с базой данных, посмотри мой код 2004 года с комментариями
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 30.08.2011, 01:50
#12
Кулик Алексей aka kpblc
Moderator

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


Есть одно "но": диалект SQL, который работает в Access, отличается от MS SQL Server. По мелочам, но этого достаточно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.08.2011, 11:16
#13
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Насколько я смог понять формат БД одна таблица, которая содержит 18 полей тип данных числовой и текстовый, 2 числовых поля имеют размер "Двойное с плавающей точкой", остальные "Целое". Может код для R14 поможет понять структуру хранимых запросов.
Код:
[Выделить все]
 ; -------------- Вычисление даты  -----------
(defun date(/ xz xxz ans dp)
  (setq xz  (fix (getvar "cdate"))    
        xxz (/ xz 10000)             
        xz  (- xz (* xxz 10000))     
        ans (/ xz 100)                
        dp  (itoa (- xz (* ans 100)))
        ans (itoa ans)
  )
  (if (= (strlen ans) 1) (setq ans (strcat "0" ans)))
  (if (= (strlen dp) 1) (setq dp (strcat "0" dp)))
  (setq vrem (strcat dp "." ans "." (itoa xxz)))
) ; end date
;;;-------------------------------------------------------------------------------------
(defun dcl_p (/ dcl_r spis) 
   (setq spis (list (strcat "Зона      |" (rtos zona_n 2 0))
                    (strcat "Массив    |" (rtos mas_n 2 0))
                    (strcat "Квартал   |" (rtos kvar_n 2 0))
                    (strcat "Участок   |" (rtos uch_n 2 0))
                    (strcat "Недвиж1   |" (rtos ned1_n 2 0))
                    (strcat "Недвиж2   |" (rtos ned2_n 2 0))
              )
   )

   (if n_zd 
    (setq spis (reverse (cons (strcat "№ дома    |" n_zd) (reverse spis))))
   );end if

   (if s_uch
    (setq spis (reverse (cons (strcat "Площадь   |" (rtos s_uch 2 2)) (reverse spis))))
   );end if
   (if s_dok
    (setq spis (reverse (cons (strcat "Площ.док  |" (rtos s_dok 2 2)) (reverse spis))))
   );end if
   (if k_l
    (setq spis (reverse (cons (strcat "Код лица  |" k_l) (reverse spis))))
   );end if
   (if pred
    (setq spis (reverse (cons (strcat "Владелец  |" pred) (reverse spis))))
   );end if
   (if adr_or
    (setq spis (reverse (cons (strcat "Адрес     |" adr_or) (reverse spis))))
   );end if
   (if tip_zd
    (setq spis (reverse (cons (strcat "Тип здан. |" tip_zd) (reverse spis))))
   );end if
   (if nazn
    (setq spis (reverse (cons (strcat "Назнач.   |" nazn) (reverse spis))))
   );end if
   (if nm_fv
    (setq spis (reverse (cons (strcat "Тип влад. |" nm_fv) (reverse spis))))
   );end if
   (if n_post
    (setq spis (reverse (cons (strcat "№ пост.   |" n_post) (reverse spis))))
   );end if
   (if d_post 
    (setq spis (reverse (cons (strcat "Дата пост.|" d_post) (reverse spis))))
   );end if
   (if d_dok
    (setq spis (reverse (cons (strcat "Дата док. |" d_dok) (reverse spis))))
   );end if
   (if n_dok
    (setq spis (reverse (cons (strcat "№ док.    |" n_dok) (reverse spis))))
   );end if
   (if d_vv
    (setq spis (reverse (cons (strcat "Дата ввода|" d_vv) (reverse spis))))
   );end if
   (if d_kor
    (setq spis (reverse (cons (strcat "Дата корр.|" d_kor) (reverse spis))))
   );end if
   (if login_user
    (setq spis (reverse (cons (strcat "Кто делал:|" login_user) (reverse spis))))
   );end if


  (setq dcl_r (load_dialog "asi"))
  (if (not (new_dialog "viewrow" dcl_r))
   (progn
    (alert "Отсутствует или неверен файл asi.dcl")
    (unload_dialog dcl_r)
    (exit)
   );end progn
  );end if
   (start_list "ID_LBOX_COLS")
   (mapcar 'add_list spis)
   (end_list)
  (start_dialog)
  (unload_dialog dcl_r)
)
;;;-------------------------------------------------------------------------------------
(defun curs-name ()	; 
  (if (/= (type CURS-NAME-NUMBER) 'INT)		; init if was absent
    (setq CURS-NAME-NUMBER 0))
  (setq CURS-NAME-NUMBER (1+ CURS-NAME-NUMBER))
  (strcat "CURS-NAME" (itoa CURS-NAME-NUMBER))
)
;;;-------------------------------------------------------------------------------------
(defun inlist (lst str / ct tmpstr ret)
  (setq ct 0)
  (repeat (length lst)
    (setq tmpstr (nth ct lst))
    (if (wcmatch (strcase tmpstr) (strcat "*" str "*"))
      (setq ret T)
    )
    (setq ct (1+ ct))
  )
  ret
)
;;;-------------------------------------------------------------------------------------
(defun maybe-load-asilisp ( / err)
  (if (not (inlist (arx) "ASILISP") )	   ;if asilisp.arx is not loaded
    (progn
      (setq err (arxload "ASILISP" nil))
      (if (not err) 
        (alert "Не загружен файл asilisp.arx")
      )
    )
  )
)
;------------------------------------------------------------------------
(defun c:asis ( / envnames msg-choice-report retval
               statiment cursor fetch vrem cursor
              )
 (maybe-load-asilisp) 	        ; load asilisp.arx if needed
 (setq envnames (mapcar 'car (asi_getcfg "ENVIRONMENTS"))
       ase_errno 1
 )
 (if (= "" (car envnames))
  (setq envnames (cdr envnames))
 )
 (if (not (asi_objp SESSION))
  (if (listp (setq retval (list "BAZA" "" "")))
   (if (not (setq SESSION (asi_connect (car retval) (cadr retval) (caddr retval))))
    (alert "Связь с базой не установлена") 
   )
   (alert "Не верное имя связи")
  )
 )
 (if session
  (progn
   (if (or (not zona_n ) (= zona_n "")) (setq zona_n  0))
   (if (or (not mas_n  ) (= mas_n "")) (setq mas_n   0))
   (if (or (not kvar_n ) (= kvar_n "")) (setq kvar_n  0))
   (if (or (not uch_n  ) (= uch_n "")) (setq uch_n   0))
   (if (or (not ned1_n ) (= ned1_n "")) (setq ned1_n  0))
   (if (or (not ned2_n ) (= ned2_n "")) (setq ned2_n  0))
   (setq statiment (asi_prepare session (strcat "select zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n from glag where zona_n=" (rtos zona_n 2 0) "and mas_n=" (rtos mas_n 2 0) "and kvar_n=" (rtos kvar_n 2 0) "and uch_n=" (rtos uch_n 2 0) "and ned1_n=" (rtos ned1_n 2 0) "and ned2_n=" (rtos ned2_n 2 0))))
   (if (not statiment) 
    (progn
     (alert "База данных имеет неверную структуру\nили занята другим приложением")
     (setq ase_errno nil)
    );end progn
    (progn
     (setq CURSOR (asi_alloc statiment (curs-name)))
     (asi_open cursor)
     (setq fetch (asi_fetch cursor))
     (if (not fetch)
      (progn 
       (date)
       (setq d_vv vrem)
       (asi_deallocstm statiment)
       (asi_close cursor)
       (setq statiment (asi_prepare session (strcat "INSERT INTO GLAG (zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n) VALUES ("(rtos zona_n 2 0)","(rtos mas_n 2 0)","(rtos kvar_n 2 0)","(rtos uch_n 2 0)","(rtos ned1_n 2 0)","(rtos ned2_n 2 0)")")))
       (asi_execute statiment)
       (asi_deallocstm statiment)
       (setq statiment (asi_prepare session (strcat "select zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n,n_zd,s_uch,s_dok,k_l,pred,adr_or,tip_zd,nazn,nm_fv,n_post,d_post,n_dok,d_dok,d_vv,d_kor,login_user from glag where zona_n=" (rtos zona_n 2 0) "and mas_n=" (rtos mas_n 2 0) "and kvar_n=" (rtos kvar_n 2 0) "and uch_n=" (rtos uch_n 2 0) "and ned1_n=" (rtos ned1_n 2 0) "and ned2_n=" (rtos ned2_n 2 0))))
       (setq CURSOR (asi_alloc statiment (curs-name)))
       (asi_open cursor)
       (setq fetch (asi_fetch cursor))
       (if n_zd (asi_update cursor (list (list "n_zd" n_zd))))
       (if s_uch (asi_update cursor (list (list "s_uch" s_uch))))
       (if s_dok (asi_update cursor (list (list "s_dok" s_dok))))
       (if k_l (asi_update cursor (list (list "k_l" k_l))))
       (if pred (asi_update cursor (list (list "pred" pred))))
       (if adr_or (asi_update cursor (list (list "adr_or" adr_or))))
       (if tip_zd (asi_update cursor (list (list "tip_zd" tip_zd))))
       (if nazn (asi_update cursor (list (list "nazn" nazn))))
       (if nm_fv (asi_update cursor (list (list "nm_fv" nm_fv))))
       (if n_post (asi_update cursor (list (list "n_post" n_post))))
       (if d_post (asi_update cursor (list (list "d_post" d_post))))
       (if d_dok (asi_update cursor (list (list "d_dok" d_dok))))
       (if n_dok (asi_update cursor (list (list "n_dok" n_dok)))) 
       (if d_vv (asi_update cursor (list (list "d_vv" d_vv))))
       (if login_user (asi_update cursor (list (list "login_user" login_user))))

       (if fetch
        (dcl_p)
        (progn
         (alert "Ошибка записи в базу")
         (setq ase_errno nil)
        );end progn
       );end if
      );end progn
      (progn
       (alert "Строка уже есть в базе")
       (setq ase_errno nil)
      );end progn
     );end if
     (asi_deallocstm statiment)
     (asi_close cursor)
    );end progn
   );end if
  );end progn
 );end if
; (asi_delete cursor)
(asi_disconnect session)
);end
.
И существующую БД я сумел конвертировать в *.mdb. По-этому меня интересует SQL для Access
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 16:24
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Никогда не работал с ASI/ASE, но вообще-то их поддержка осталась. Во всяком случае файл asilisp.arx присутствует.
Александр Ривилис вне форума  
 
Непрочитано 30.08.2011, 16:38
1 | #15
ShaggyDoc

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


Цитата:
По-этому меня интересует SQL для Access
Да не это должно интересовать. В этой программе самые обычные запросы SELECT и INSERT.

Надо решать принципиально:
1. Зачем эта программа запихана в AutoCAD? Что она делает такого, чего бы не могло сделать нормальное приложение для работы с БД (хотя бы сама MS Access)? С помощью примитивных средств DCL ничего серьезного с БД сделать нельзя.

Встраивание именно в AutoCAD имело бы смысл при организации связей объектов AutoCAD и базы данных. Например, при щелчке по объекту получать информацию из БД и т.п. Ничего этого в программе нет.

2. Такая "база данных" фактически пригодна только для однопользовательской работы и не должна быть на "сервере". На каком таком "сервере", кстати? На файловом? Но даже в этом случае должно быть множество средств для организации многопользовательской работы (блокировки и т.п.)

3. Судя по набору полей это БД каких-то объектов (зданий). Вообще все такие вещи элементарно делаются в программах - инструментальных средствах ГИС. В том числе в недорогих или "практически бесплатных", таких как ObjectLand. Там всё необходимое, включая работу с БД, встроено в систему и доступно на уровне "секретарши".

В AutoCAD же для решения таких задач требуется серьезное программирование, с не очень надежным результатом. Особенно если "не знаю английского" , "нет defun c:" и т.п.

Возьмите более подходящий инструмент! Ну, конечно можно и ADOLisp использовать - это великолепная библиотека. Но для её использования надо очень много знать.

Есть и самый правильный вариант - нанять специалиста.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 30.08.2011, 16:50
#16
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


asilisp.arx присутствует это правда за asicfg.exe и т.д. отсутствует

ShaggyDoc

При щелчке по объекту получаем информацию из БД, так оно и происходит. Приведенная программа я так понял устанавливала соединение с БД
Код:
[Выделить все]
 (defun lar ()
 (unload_dialog dcl_r)
 (command "_layer" "_OFF" "*" "_Y" "_S" onlayer "")
 (while lao
  (command "_layer" "_ON" (car lao) "")
  (setq lao (cdr lao))
 )
 (setq uu nil)
 (c:reva)
);end lar
 ;========================ОКНА ПОЛЬЗОВАТЕЛЯ (и двери)==========================
(defun polzo (/ dcl_u tpr)
 (setq dcl_u (load_dialog "polz.dcl"))
 (if (= k_l "1")
  (progn
   (setq tpr "1")
   (if (not (new_dialog "pl21" dcl_u))
    (progn
     (alert "Отсутствует или неверен файл polz.dcl")
     (lar)
     (exit)
    )
   )
   (action_tile "pr" "(setq tpr \"2\") (mode_tile \"pr\" 0)")
   (action_tile "fz" "(setq tpr \"1\") (mode_tile \"fz\" 0)")
   (action_tile "accept" "(done_dialog)")
   (start_dialog)
   (if (= tpr "1")
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl311" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "gd"
      "(setq nazn \"фактически занимаемого жилым домом усадебного типа\")(mode_tile \"gd\" 0)"
     )
     (action_tile "pe" "(setq nazn \"4\") (mode_tile \"pe\" 0)")
     (action_tile "bl"
      "(setq nazn \"фактически занимаемого хозблоком\")(mode_tile \"bl\" 0)"
     )
     (action_tile "st"
      "(setq nazn \"фактически занимаемого садовым товариществом\")(mode_tile \"st\" 0)"
     )
     (action_tile "ph"
      "(setq nazn \"фактически занимаемого подсобным хозяйством\")(mode_tile \"ph\" 0)"
     )
     (action_tile "og"
      "(setq nazn \"фактически занимаемого огородом\")(mode_tile \"og\" 0)"
     )
     (action_tile "sp"
      "(setq nazn \"фактически занимаемого с/х предприятием\")(mode_tile \"sp\" 0)"
     )
     (action_tile "gs"
      "(setq nazn \"фактически занимаемого ЖСК\")(mode_tile \"gs\" 0)"
     )
     (action_tile "sk"
      "(setq nazn \"фактически занимаемого ГСК\")(mode_tile \"sk\" 0)"
     )
     (action_tile "av"
      "(setq nazn \"фактически занимаемого автостоянкой\")(mode_tile \"av\" 0)"
     )
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl312" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "gd"
      "(setq nazn \"предоставленного для строительства жилого дома\")(mode_tile \"gd\" 0)"
     )
     (action_tile "pe" "(setq nazn \"4\") (mode_tile \"pe\" 0)")
     (action_tile "bl"
      "(setq nazn \"предоставленного для строительства хозблока\")(mode_tile \"bl\" 0)"
     )
     (action_tile "st"
      "(setq nazn \"предоставленного садовому товариществу\")(mode_tile \"st\" 0)"
     )
     (action_tile "ph"
      "(setq nazn \"предоставленного для подсобного хозяйства\")(mode_tile \"ph\" 0)"
     )
     (action_tile "og"
      "(setq nazn \"предоставленного для огородничества\")(mode_tile \"og\" 0)"
     )
     (action_tile "sp" "(setq nazn \"предоставленного с/х предприятию\")(mode_tile \"sp\" 0)")
     (action_tile "gs" "(setq nazn \"предоставленного ЖСК\")(mode_tile \"gs\" 0)")
     (action_tile "sk" "(setq nazn \"предоставленного ГСК\")(mode_tile \"sk\" 0)")
     (action_tile "av" "(setq nazn \"предоставленного для автостоянки\")(mode_tile \"av\" 0)")
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
   )
   (if (= nazn "4")
    (progn
     (if (not (new_dialog "pl4" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"(strcat "(progn (setq floor (get_tile \"floor\"))" "(done_dialog))"))
     (start_dialog)
     (unload_dialog dcl_u)
     (if (= tpr "1")
      (setq nazn (strcat "фактически занимаемого " floor "-этажным жилым домом"))
      (setq nazn (strcat "предоставленного для строительства " floor "-эт. дома"))
     )
    )
   )
  )
  (progn
   (setq tpr "1")
   (if (not (new_dialog "pl22" dcl_u))
    (progn
     (alert "Отсутствует или неверен файл polz.dcl")
     (lar)
     (exit)
    )
   )
   (action_tile "pr" "(setq tpr \"2\") (mode_tile \"pr\" 0)")
   (action_tile "fz" "(setq tpr \"1\") (mode_tile \"fz\" 0)")
   (action_tile "accept" "(done_dialog)")
   (start_dialog)
   (if (= tpr "1")
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl321" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "dv"
      "(setq nazn \"фактически занимаемого домовладением\")(mode_tile \"dv\" 0)"
     )
     (action_tile "sv"
      "(setq nazn \"фактически занимаемого садовым участком\")(mode_tile \"sv\" 0)"
     )
     (action_tile "gz"
      "(setq nazn \"фактически занимаемого индивидуальным огородом\")(mode_tile \"gz\" 0)"
     )
     (action_tile "ga"
      "(setq nazn \"фактически занимаемого индивидуальным гаражом\")(mode_tile \"ga\" 0)"
     )
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl322" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "dv"
      "(setq nazn \"предоставленного для строительства жилого дома\")(mode_tile \"dv\" 0)"
     )
     (action_tile "sv"
      "(setq nazn \"предоставленного для индивидуального садоводства\")(mode_tile \"sv\" 0)"
     )
     (action_tile "gz"
      "(setq nazn \"предоставленного для огородничества\")(mode_tile \"gz\" 0)"
     )
     (action_tile "ga"
      "(setq nazn \"предоставленного для индивидуального гаража\")(mode_tile \"GA\" 0)"
     )
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
   )
  )
 )
 (if (= nazn "18")
  (progn
   (if (= tpr "1")
    (progn
     (if (not (new_dialog "pl5" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"(strcat "(progn (setq taget (get_tile \"cn\"))" "(done_dialog))"))
     (start_dialog)
     (setq nazn (strcat "фактически занимаемого " taget))
    )
    (progn
     (if (not (new_dialog "pl51" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"(strcat "(progn (setq taget (get_tile \"cn1\"))" "(done_dialog))"))
     (start_dialog)
     (setq nazn (strcat "предоставленного " taget))
    )
   )
  )
 )
 (unload_dialog dcl_u)
);end polzo
 ;--------------------------расширение данных--------------------------
(defun r (/ metka newent)
 (regapp "BAZA")
 (setq metka (list -3(list "BAZA" '(1002 . "}")(cons 1005 u_n)(cons 1000 kadn)'(1002 . "{")))
      newent (append (entget prim) (list metka))
 )
 (entmod newent)
);end r
 ;-----------------------Автоматический выбор масштаба------------------------
(defun lange (/ stp x y xmin xmax ymin ymax)
 (setq stp   sp
      xmin   10000000
      ymin   10000000
      xmax  -10000000
      ymax  -10000000
 )
 (while stp
  (setq x (car (car stp))  y (cadr (car stp))  stp (cdr stp))
  (if (< x xmin) (setq xmin x))
  (if (> x xmax) (setq xmax x))
  (if (< y ymin) (setq ymin y))
  (if (> y ymax) (setq ymax y))
 )
 (if (or (equal osho "BLOCK") (equal osho "PLOT") (equal osho "BUILDING"))
  (setq xymin (list (- xmin 2) (- ymin 2)) xymax (list (+ xmax 2) (+ ymax 2)))
  (setq xymin (list (- xmin 50) (- ymin 50)) xymax (list (+ xmax 50) (+ ymax 50)))
 )
);end lange
 ;-----------------------отрисовка границы участка---------------------------
(defun gran (/ pt1 pt2 spi n spi1)
 (while (not pt1) (setq pt1 (getpoint "\n Первая точка: ")))
 (while (or (not pt2) (equal pt1 pt2)) (setq pt2 (getpoint pt1 "\n Следующая точка: ")))
 (command "_pline" pt1 pt2)
 (setq spi (list pt1 pt2)   pt1 pt2   pt2 nil)
 (while (or (not pt2) (equal pt2 (car spi)) (equal pt2 (cadr spi)))
  (setq pt2 (getpoint pt1 "\n Следующая точка: "))
 )
 (while (or pt2 n)
  (if (not n)
   (progn
    (command pt2)
    (setq spi (cons pt2 spi)    pt1 pt2)
   )
  )
  (setq n nil   pt2 (getpoint pt1 "\n Следующая точка: "))
  (if pt2
   (progn
    (setq spi1 spi)
    (while (and spi1 (not n))
     (if (< (distance pt2 (car spi1)) 0.05)
      (progn
       (setq n 1)
       (princ "\n")
       (alert "Расстояние между точками меньше 5 см")
      )
     )
     (setq spi1 (cdr spi1))
    )
   )
  )
 )
 (command "_c")
 (setq gr (entlast))
);end gran
 ;-------------------определение координат вершин мн-ка----------------------
(defun kgran (/ p1 p2)
 (setq sp nil p1 (entget gr))
 (while p1
  (setq p2 (car p1))
  (if (= (car p2) 10) (setq sp (append sp (list (list (caddr p2) (- (cadr p2)))))))
  (setq p1 (cdr p1))
 )
);end kgran 
 ;------------------ из списка строк получаем список чисел -------------------
 (defun satori (/ spi ele ccc)
  (if (equal osho "BUILDING") (setq ccc 4) (setq ccc 4))
  (setq spi (list 0))
  (while sp
   (setq ele (atoi (substr (car sp) ii ccc))  spi (append spi (list ele))  sp (cdr sp))
  )
  (setq sp (cdr spi))
 );end satori
 ;----------------------если дом строится не на участке----------------------
 (defun samadhi (/ spi)
  (setq spi (list 0))
  (while sp
   (if (= (atoi (substr (car sp) 10 4)) 0) (setq spi (append spi (list (car sp)))))
   (setq sp (cdr sp))
  )
  (setq sp (cdr spi))
 );end samadhi
 ;------------------------находит пропущенные номера-------------------------
 (defun pron (/ i)
  (setq i 0    man nil)
  (while (and (< i n) (not man))
   (setq i (1+ i))
   (if (not (member i sp)) (setq man i))
  )
 );end pron
 ;-----------------проверяет список на наличие близких точек-----------------
 (defun blito (/ spi spi1)
  (setq spi sp)
  (while spi
   (setq spi1 (cdr spi))
   (while spi1
    (if (< (distance (car spi) (car spi1)) 0.05)
     (progn
      (alert "Расстояние между конечными точками меньше 5 см")
      (lar)
      (exit)
     )
    )
    (setq spi1 (cdr spi1))
   )
   (setq spi (cdr spi))
  )
 );end blito
 ;----------------------перенос зданий со слоя UNCLOSED------------------------
 (defun tada (/ i)
  (setq jj 1)
  (while jj
   (setq gr (car (entsel "\n Укажите границу здания \n")))
   (if (and gr (= (cdr (assoc 8 (entget gr))) "UNCLOSED")) (setq jj nil))
  )
  (if (/= (cdr (assoc 0 (entget gr))) "LWPOLYLINE")
   (progn
    (alert "Примитив не является полилинией")
    (lar)
    (exit)
   )
  )
  (if (and (/= (cdr (assoc '70 (entget gr))) 1) (/= (cdr (assoc '70 (entget gr))) 129))
   (progn
    (alert "Полилиния не является замкнутой")
    (lar)
    (exit)
   )
  )
  (kgran)
  (blito)
  (lange)
  (setq jj (ssget "cp" sp (list (cons 0 "text") (cons 8 "UNCLOSED"))))
  (command "_chprop" gr "" "_la" "building" "_c" 202 ""  "_zoom" "_w" xymin xymax)
  (if jj  (command "_chprop" jj "" "_la" "building" "_c" 202 ""))
  (setq   jj nil       i (car (entsel "Можно указать на тип здания ")))
   (if (and i (= (cdr (assoc 8 (entget i))) "BUILDING")(= (cdr (assoc 0 (entget i))) "TEXT"))
    (progn
     (setq shri (cdr (assoc 1 (entget i))))
     (entdel i)
    )
    (setq shri "")
   )
 );end tada
 ;-----выбирает из списка max число (man)---возвращает число элементов (n)-----
 (defun mano (/ spi)
  (setq man 0   spi sp   n 0)
  (while spi
   (if (> (car spi) man) (setq man (car spi)))
   (setq spi (cdr spi)   n (+ n 1))
  )
 );end mano 
 ;===========================================================================
(defun c:raj (/ a la lao n onlayer uu gr dcl_r man nov vih ii da txt shuba lll sp xymin xymax vv
                u_n areanew ase_errno prim priml tv osho yyy zona_n mas_n kvar_n uch_n ned1_n
                ned2_n n_dok d_dok n_zd zona_s mas_s kvar_s uch_s ned1_s ned2_s d_kor d_vv login_user nazn
                s_uch s_dok k_l pred adr_or tip_zd nm_fv n_post d_post nom_z nam_z nom_m
                nom_k nom_u no_zd jj jo aaa aam aak aau aaz kadn u_nu r_nr r_na k_nk shri j3 cc
             )
 (if (not c:reva) (load "revar")) (c:reva)
 (setq a (tblnext "layer" 0)  la ""  onlayer (getvar "clayer"))
 (while a
  (setq n 1)
  (while (and a (< n 20))
   (setq a (tblnext "layer"))
   (if (> (cdr (assoc 62 a)) 0)
    (progn
     (setq n (1+ n))
     (setq la (strcat la (cdr (cadr a)) ","))
    )
   )
  )
  (setq lao (cons la lao)  la "")
 )
 (command "_layer" "_OFF" "*" "_Y" "")
 (setq osho (strcase (getvar "users1")))
 (if (tblsearch "layer" osho)
  (progn
   (command "_layer" "_s" osho "" "_color")
   (if (equal osho   "ZONA"  ) (command 242))
   (if (equal osho  "MASSIV" ) (command  67))
   (if (equal osho   "BLOCK" ) (command 162))
   (if (equal osho   "PLOT"  ) (command 102))
   (if (equal osho "BUILDING") (command 202))
  )
  (progn
   (command "_LAYER" "_n" osho "_c")
   (if (equal osho   "ZONA"  ) (command 242))
   (if (equal osho  "MASSIV" ) (command  67))
   (if (equal osho   "BLOCK" ) (command 162))
   (if (equal osho   "PLOT"  ) (command 102))
   (if (equal osho "BUILDING") (command 202))
   (command osho "_s" osho "")
  )
 )
 (command "_layer" "_ON")
 (if (equal osho    "ZONA") (command "TOWN"))
 (if (equal osho  "MASSIV") (command "ZONA"))
 (if (equal osho   "BLOCK") (command "MASSIV"))
 (if (equal osho "PLOT") (command "BLOCK,BUILDING,UNCLOSED,OGRADA,REDLINE,STREET"))
 (if (equal osho "BUILDING")(command "BLOCK,UNCLOSED,REDLINE,STREET,PLOT"))
 (command "")
 (if (equal osho "ZONA") (command "_zoom" "_e"))
 (setq uu nil  uu (ssget "x" (list (cons 0 "text") (cons 8 osho))))
 (if (equal osho   "ZONA"  ) (setq yyy "zon.dcl"))
 (if (equal osho  "MASSIV" ) (setq yyy "mas.dcl"))
 (if (equal osho   "BLOCK" ) (setq yyy "kva.dcl"))
 (if (equal osho   "PLOT"  ) (setq yyy "uch.dcl"))
 (if (equal osho "BUILDING") (setq yyy "zda.dcl"))
 (setq dcl_r (load_dialog yyy)   n 0)
 (while (not ase_errno)
  (while (not a)
   (while (or (not nom_z) (not nam_z))
    (if (not (new_dialog "rw1" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (lar)
      (exit)
     )
    )
    (if (or (equal osho "ZONA") (equal osho "MASSIV") (equal osho "BLOCK"))
     (action_tile "accept"
      "(progn (setq nom_z (get_tile \"zona_n\") nam_z (get_tile \"mas_n\"))(done_dialog))"
     )
     (if (equal osho "PLOT")
      (action_tile "accept"
       "(progn(setq nom_z(get_tile \"zona_n\")nam_z(get_tile \"mas_n\")nom_k(get_tile \"kvar_n\"))(done_dialog))"
      )
      (action_tile "accept"
       "(progn(setq nom_z(get_tile \"zona_n\")nam_z(get_tile \"mas_n\")nom_k(get_tile \"kvar_n\")nom_u(get_tile \"uch_n\"))(done_dialog))"
      )
     )
    )
    (start_dialog)
    (setq nom_z (atoi nom_z))
    (if (or (/= (type nom_z) 'int) (<= nom_z 0) (> nom_z 99))
     (progn
      (alert "Номер зоны должен быть числом от 1 до 99")
      (setq nom_z nil)
     );progn
    )
    (if (and (equal osho "ZONA") (or (> (strlen nam_z) 20) (< (strlen nam_z) 1)))
     (progn
      (alert "Размер названия зоны от 1 до 20 символов")
      (setq nam_z nil)
     );progn
    )
    (if (or (equal osho "MASSIV")(equal osho "BLOCK")(equal osho "PLOT")(equal osho "BUILDING"))
     (progn
      (setq nam_z (atoi nam_z))
      (if (or (/= (type nam_z) 'int) (<= nam_z 0) (> nam_z 99))
       (progn
        (alert "Номер массива должен быть числом от 1 до 99")
        (setq nam_z nil)
       );progn
      )
     )
    )
    (if (or (equal osho "PLOT") (equal osho "BUILDING"))
     (progn
      (setq nom_k (atoi nom_k))
      (if (or (/= (type nom_k) 'int) (<= nom_k 0) (> nom_k 99))
       (progn
        (alert "Номер квартала должен быть числом от 1 до 99")
        (setq nam_z nil)
       );progn
      )
     )
    )
    (if (equal osho "BUILDING")
     (progn
      (if (or (not nom_u) (= nom_u "")) (setq nom_u "0"))
      (setq nom_u (atoi nom_u))
      (if (or (< nom_u 0) (> nom_u 9999))
       (progn
        (alert "Номер участка может быть неотрицательным числом до 9999")
        (setq nam_z nil)
       );progn
      )
     )
    )
   )
   (if (/= osho "ZONA") (setq nom_m nam_z  nam_z nil))
   (if (and (not jo) (equal osho "MASSIV"))
    (progn
     (setq jj (ssget "x" (list (cons 0 "text") (cons 8 "ZONA")))   jo nil)
     (while (and jj (ssname jj 0) (not jo))
      (if (= nom_z (atoi (cdr (assoc 1 (entget (ssname jj 0))))))
       (setq jo (ssname jj 0))
      )
      (ssdel (ssname jj 0) jj)
     )
     (setq jj nil)
     (if (not jo)
      (progn
       (alert "Зоны с указанным номером нет в карте")
       (lar)
       (exit)
      )
      (if (equal osho "MASSIV")
       (progn
        (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3(entget jo (list "BAZA")))))))))
        (kgran)
        (lange)
        (command "_zoom" "_w" xymin xymax)
       )
      )
     )
    )
   )
   (if (and (not jo) (equal osho "BLOCK"))
    (progn
     (if (< nom_z 10)
      (setq aaa (strcat "0" (rtos nom_z 2 0)))
      (setq aaa (rtos nom_z 2 0))
     )
     (if (< nom_m 10)
      (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
      (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
     )
     (setq jj (ssget "x" (list (cons 0 "text") (cons 8 "MASSIV"))))
     (while (and jj (ssname jj 0) (not jo))
      (if (equal aam (cdr (assoc 1 (entget (ssname jj 0))))) (setq jo (ssname jj 0)))
      (ssdel (ssname jj 0) jj)
     )
     (setq jj nil)
     (if (not jo)
      (progn
       (alert "Массива с указанным номером нет в карте")
       (lar)
       (exit)
      )
      (if (equal osho "BLOCK")
       (progn
        (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3 (entget jo (list "BAZA")))))))))
        (kgran)
        (lange)
        (command "_zoom" "_w" xymin xymax)
        (blito)
        (setq jj (ssget "cp" sp (list (cons 0 "text") (cons 8 "BLOCK"))))
        (if jj
         (progn
          (setq sp (list 0)    n 0)
          (while (< n (sslength jj))
           (setq sp (append sp (list (cdr (assoc 1 (entget (ssname jj n))))))  n (1+ n))
          )
          (setq sp (cdr sp)   jj nil   n nil   ii 7)
          (satori)
          (mano)
          (if (= man n)
           (setq nom_k (1+ man))
           (progn
            (pron)
            (setq nom_k man)
           )
          )
          (if (> nom_k 99)
           (progn
            (alert "В массиве уже есть 99 кварталов. Нужно делить массив.")
            (lar)
            (exit)
           )
          )
         )
         (setq nom_k 1)
        )
       )
      )
     )
    )
   )
   (if (and (not jo) (or (equal osho "BUILDING") (equal osho "PLOT")))
    (progn
     (if (< nom_z 10)
      (setq aaa (strcat "0" (rtos nom_z 2 0)))
      (setq aaa (rtos nom_z 2 0))
     )
     (if (< nom_m 10)
      (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
      (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
     )
     (if (< nom_k 10)
      (setq aak (strcat aam " 0" (rtos nom_k 2 0)))
      (setq aak (strcat aam " "  (rtos nom_k 2 0)))
     )
     (setq jj (ssget "x" (list (cons 0 "text") (cons 8 "BLOCK"))))
     (while (and jj (ssname jj 0) (not jo))
      (if (equal aak (cdr (assoc 1 (entget (ssname jj 0))))) (setq jo (ssname jj 0)))
      (ssdel (ssname jj 0) jj)
     )
     (setq jj nil)
     (if (not jo)
      (progn
       (alert "Квартала с указанным номером нет в карте")
       (lar)
       (exit)
      )
      (progn
       (if (or (equal osho "PLOT") (and (equal osho "BUILDING") (= nom_u 0)))
        (progn
         (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3(entget jo(list "BAZA")))))))))
         (kgran)
         (lange)
         (command "_zoom" "_w" xymin xymax)
        )
       )
       (if (equal osho "PLOT")
        (progn
         (blito)
         (setq jj  (ssget "cp" sp (list (cons 0 "text") (cons 8 "PLOT"))))
         (if jj
          (progn
           (setq sp (list 0)    n 0)
           (while (< n (sslength jj))
            (setq sp (append sp (list (cdr (assoc 1 (entget (ssname jj n)))))) n (1+ n))
           )
           (setq sp (cdr sp)   jj nil   n nil   ii 10)
           (satori)
           (mano)
           (setq nom_u (1+ man))
           (if (> nom_u 9999)
            (progn
             (alert "В квартале уже есть 9999 участков. Нужно делить квартал.")
             (lar)
             (exit)
            )
           )
          )
          (setq nom_u 1)
         )
        )
       )
      );progn
     )
    )
   )
   (if (equal osho "BUILDING")
    (progn
     (if (< nom_u 10)
      (setq aau (strcat aak ":000" (rtos nom_u 2 0)))
     (if (< nom_u 100)
      (setq aau (strcat aak ":00" (rtos nom_u 2 0)))
     (if (< nom_u 1000)
      (setq aau (strcat aak ":0" (rtos nom_u 2 0)))
      (setq aau (strcat aak ":"  (rtos nom_u 2 0)))
     )))
     (if (/= nom_u 0)
      (progn
       (setq jo nil   jj (ssget "x" (list (cons 0 "text") (cons 8 "PLOT"))))
       (while (and jj (ssname jj 0) (not jo))
        (if (equal aau (cdr (assoc 1 (entget (ssname jj 0))))) (setq jo (ssname jj 0)))
        (ssdel (ssname jj 0) jj)
       )
       (setq jj nil)
       (if (not jo)
        (progn
         (alert "Участка с указанным номером нет в карте")
         (lar)
         (exit)
        )
        (progn
         (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3(entget jo(list "BAZA")))))))))
         (kgran)
         (lange)
         (command "_zoom" "_w" xymin xymax)
        )
       )
      )
     )
     (blito)
     (setq jj (ssget "cp" sp (list (cons 0 "LWPOLYLINE") (cons 70   1) (cons 8 "BUILDING"))))
     (setq j3 (ssget "cp" sp (list (cons 0 "LWPOLYLINE") (cons 70 129) (cons 8 "BUILDING"))))
     (if (not jj) (setq jj j3 j3 nil))
     (setq n 0)
     (while (and j3 (< n (sslength j3))) (setq jj (ssadd (ssname j3 n) jj)  n (1+ n)))
     (if jj
      (progn
       (setq sp (list 0)    n 0)
       (while (< n (sslength jj))
        (if (assoc '1000 (cdr (cadr (assoc '-3 (entget (ssname jj n) (list "BAZA"))))))
         (setq sp (append sp (list (cdr (assoc '1000 (cdr (cadr (assoc '-3 (entget (ssname jj n) (list "BAZA"))))))))))
        )
        (setq n (1+ n))
       )
       (setq sp (cdr sp)   jj nil   n nil   ii 15);****************** 15-13
       (if (= nom_u 0) (samadhi))
       (satori)
       (mano)
       (if (= man n)
        (setq no_zd (1+ man))
        (progn
         (pron)
         (setq no_zd man)
        )
       )
       (if (> no_zd 9999)
        (progn
         (alert "В участке как будто уже есть 9999 зданий. Что поделаешь?")
         (lar)
         (exit)
        )
       )
      )
      (setq no_zd 1)
     )
    )
   )
   (setq jo nil)
   (if (< nom_z 10)
    (setq aaa (strcat "0" (rtos nom_z 2 0)))
    (setq aaa (rtos nom_z 2 0))
   )
   (if uu
    (while (< n (sslength uu))
     (if (and (equal osho "ZONA") (= aaa (cdr (assoc 1 (entget (ssname uu n))))))
      (progn
       (alert "Зона с таким номером уже есть в карте\n     Введите другой номер зоны")
       (setq n (sslength uu)   a 0)
      )
     )
     (if (equal osho "MASSIV")
      (progn
       (if (< nom_m 10)
        (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
        (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
       )
       (if (equal aam (cdr (assoc 1 (entget (ssname uu n)))))
        (progn
         (alert "Массив с таким номером уже есть в карте\n    Введите другой номер массива")
         (setq n (sslength uu)   jo nil   a 0)
        )
       )
      )
     )
     (if (< n (sslength uu)) (setq n (1+ n)))
    )
   )
   (if (= a 0)
    (progn
     (setq   a nil   n 0   nom_z nil)
     (if (equal osho  "ZONA" ) (setq nam_z nil  aaa nil))
     (if (equal osho "MASSIV") (setq nom_m nil  aam nil))
    )
    (setq a 1)
   )
  )
  (while (not areanew)
   (if (equal osho "BUILDING")
    (progn
     (if (not (new_dialog "zdun" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn 
        (setq nov (get_tile \"nov\")    vih (get_tile \"vih\"))
        (done_dialog)
       )"
     )
     (start_dialog)
     (if (= (atoi vih) 1) (setq shuba 3))
    )
   )
   (if (/= shuba 3)
    (progn
     (if (not (new_dialog "rw2" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (lar)
       (exit)
      )
     )
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
     (gran)
    )
    (tada)
   )
   (setq u_n  (cdr (assoc 5 (entget gr)))     priml  gr)
   (if (/= shuba 3)
    (progn
     (kgran)
     (lange)
     (command "_zoom" "_w" xymin xymax)
    )
   )
   (command "_chprop" gr "" "lt" "continuous" "")
   (if (equal osho "ZONA")
    (progn
     (command "_pedit"  gr "_w" 20 "")
     (princ "\n Укажите точку вставки номера зоны\n")
    )
   )
   (if (equal osho "MASSIV")
    (progn
     (command "_pedit"  gr "_w" 10 "")
     (princ "\n Укажите точку вставки номера массива\n")
    )
   )
   (if (equal osho "BLOCK") (princ "\n Укажите точку вставки номера квартала\n"))
   (if (equal osho "PLOT") (princ "\n Укажите точку вставки номера участка\n"))
   (if (and nom_m (not aam))
    (if (< nom_m 10)
     (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
     (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
    )
   )
   (if nom_k
    (if (< nom_k 10)
     (setq aak (strcat aam " 0" (rtos nom_k 2 0)))
     (setq aak (strcat aam " "  (rtos nom_k 2 0)))
    )
   )
   (if nom_u
    (if (< nom_u 10)
     (setq aau (strcat aak ":000" (rtos nom_u 2 0)))
     (if (< nom_u 100)
      (setq aau (strcat aak ":00" (rtos nom_u 2 0)))
     (if (< nom_u 1000)
      (setq aau (strcat aak ":0" (rtos nom_u 2 0)))
     (setq aau (strcat aak ":"  (rtos nom_u 2 0)))
    )
   )));************
   (if no_zd
    (if (< no_zd 10)
     (setq aaz (strcat aau ":000" (rtos no_zd 2 0)))
     (if (< no_zd 100)
      (setq aaz (strcat aau ":00" (rtos no_zd 2 0)))
      (if (< no_zd 1000)
       (setq aaz (strcat aau ":0" (rtos no_zd 2 0)))
       (setq aaz (strcat aau ":"  (rtos no_zd 2 0)))
      )
     )
    )
   )
   (if (equal osho   "ZONA"  ) (setq kadn aaa))
   (if (equal osho  "MASSIV" ) (setq kadn aam))
   (if (equal osho   "BLOCK" ) (setq kadn aak))
   (if (equal osho   "PLOT"  ) (setq kadn aau))
   (if (equal osho "BUILDING") (setq kadn aaz))
   (if (not (equal osho "BUILDING"))
    (progn
     (command "_text" "_M" "0,0")
     (if (equal osho   "ZONA"  ) (command 80 "90" aaa))
     (if (equal osho  "MASSIV" ) (command 50 "90" aam))
     (if (equal osho   "BLOCK" ) (command 30 "90" aak))
     (if (equal osho   "PLOT"  ) (command  2 "90" aau))
     (setq tv (list 0 0))
     (while (< (distance tv (list 0 0)) 1)
      (command "_move" (entlast) "" "0,0" pause)
      (setq tv (cdr (assoc '11 (entget (entlast))))  tv (list (cadr tv) (- (car tv))))
     )
     (command "_zoom" "_p")
     (setq prim (entlast))
     (r)
     (setq u_n  (cdr (assoc 5 (entget (entlast))))  prim  priml)
     (r)
    )
   )
   (setq zona_n nom_z)
   (if (equal osho "ZONA"  ) (setq adr_or nam_z))
   (if (equal osho "MASSIV") (setq mas_n  nom_m   adr_or  nam_z))
   (if (equal osho "BLOCK" ) (setq mas_n  nom_m   kvar_n  nom_k))
   (if (equal osho "PLOT"  ) (setq mas_n  nom_m   kvar_n  nom_k   uch_n nom_u))
   (if (equal osho "BUILDING") (setq mas_n nom_m kvar_n  nom_k uch_n nom_u ned1_n no_zd))
   (command "_area" "_e" gr)
   (setq areanew (getvar "area"))
  ;--------------------округление---------------------------------------
   (if (< (-  areanew (/ (float (fix (* 100 areanew))) 100)) 0.005)
    (setq areanew (/ (float (fix (* 100 areanew))) 100))
    (setq areanew (+ 0.01 (/ (float (fix (* 100 areanew))) 100)))
   )
  ;----------------------------------------------------------------------
   (if (> areanew 999999999.99)
    (progn
     (alert "       Слишком большой участок\n(площадь не должна превышать 1000000000)")
     (command "_erase" gr (entlast) "")
     (setq areanew nil)
    )
   )
  )
  (setq login_user (getvar "LOGINNAME"))
  (setq s_uch areanew)
  (if (equal osho "PLOT")
   (progn
    (if (not (new_dialog "kl" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (command "_erase" gr (entlast) "")
      (lar)
      (exit)
     )
    )
    (action_tile "accept" "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))")
    (start_dialog)
    (if (= (atoi vih) 1) (setq k_l "2") (setq k_l "1"))
    (setq vv "(progn(setq s_dok(get_tile \"s_dok\")pred(get_tile \"pred\")"
          cc "adr_or(get_tile \"adr_or\")nm_fv(get_tile \"nm_fv\"))(done_dialog))"
          jo nil
    )
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "pans" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (set_tile "pred"   (getvar "users2"))
     (set_tile "adr_or" (getvar "users3"))
     (action_tile "accept" (strcat vv cc))
     (start_dialog)
     (if (or (not s_dok) (= s_dok ""))
      (setq s_dok nil)
      (progn
       (setq s_dok (atof s_dok))
       (if (or (<= s_dok 0.0) (>= s_dok 1000000000.00))
        (progn
         (alert "Документальная площадь должна быть\nчислом больше 0 и меньше миллиарда")
         (setq jo nil)
        )
       )
      )
     )
     (if (> (strlen pred) 99)
      (progn
       (alert "Строка наименования владельца участка\nдолжна занимать от 1 до 99 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen adr_or) 50)
      (progn
       (alert "     Строка адресных ориентиров\nдолжна занимать от 1 до 50 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen nm_fv) 50)
      (progn
       (alert " Строка наименования формы владения\nдолжна занимать от 1 до 50 символов")
       (setq jo nil)
      )
     )
    )
    (setvar "users2"   pred)
    (setvar "users3" adr_or)
    (setq jo nil)
    (while (not jo)
     (setq jo 1)
     (polzo)
     (if (> (strlen nazn) 100)
      (progn
       (alert "     Строка целевого назначения \nдолжна занимать от 1 до 100 символов")
       (setq jo nil)
      )
     )
    )
    (setq jo nil)
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "post" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn(setq n_post(get_tile \"n_post\")d_post(get_tile \"d_post\"))(done_dialog))"
     )
     (start_dialog)
     (if (> (strlen n_post) 10)
      (progn
       (alert "    Строка номера постановления \nдолжна занимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen d_post) 10)
      (progn
       (alert "     Строка даты постановления \nдолжна занимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
    )
    (if (not (new_dialog "kd" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (command "_erase" gr (entlast) "")
      (lar)
      (exit)
     )
    )
    (action_tile "accept"
     "(progn 
       (setq nov(get_tile \"nov\")vih(get_tile \"vih\")da(get_tile \"da\")lll(get_tile \"lll\"))
       (done_dialog)
      )"
    )
    (start_dialog)

    (setq jo nil)
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "dok" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn(setq n_dok(get_tile \"n_dok\")d_dok(get_tile \"d_dok\"))(done_dialog))"
     )
     (start_dialog)
     (if (> (strlen n_dok) 10)
      (progn
       (alert "Строка номера документа должна\nзанимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen d_dok) 10)
      (progn
       (alert "Строка даты документа должна\nзанимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
    )
   )
  )
  (if (equal osho "BUILDING")
   (progn
    (setq vv "(progn(setq tip_zd(get_tile \"tip_zd\")pred(get_tile \"pred\")adr_or(get_tile \"adr_or\")"
          cc "n_zd(get_tile \"n_zd\")ned2_n(get_tile \"ned2_n\")nazn(get_tile \"nazn\"))(done_dialog))"
          jo nil
    )
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "pans" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (if (not shri) (setq shri ""))
     (set_tile "tip_zd" shri)
     (set_tile "pred"   (getvar "users2"))
     (set_tile "adr_or" (getvar "users3"))
     (action_tile "accept" (strcat vv cc))
     (start_dialog)
     (if ned2_n (setq ned2_n (atoi ned2_n)))
     (if (> (strlen pred) 99)
      (progn
       (alert "Строка наименования владельца здания\nдолжна занимать от 1 до 99 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen adr_or) 50)
      (progn
       (alert "Строка улицы должна\nзанимать от 1 до 50 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen n_zd) 10)
      (progn
       (alert "Строка почтового номера здания\nдолжна занимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
     (if (> ned2_n 9999)
      (progn
       (alert "Строка номера квартиры\nдолжна занимать от 1 до 4 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen nazn) 100)
      (progn
       (alert "Строка целевого назначения здания\nдолжна занимать от 1 до 100 символов")
       (setq jo nil)
      )
     )
     (if (or (not tip_zd) (> (strlen tip_zd) 10) (= (strlen tip_zd) 0))
      (progn
       (alert "Тип здания должен занимать от 1 до 10 знаков")
       (setq jo nil)
      )
     )
    )
    (setvar "users2"   pred)
    (setvar "users3" adr_or)
    (if (and ned2_n (/= ned2_n 0))
     (if (< ned2_n 10)
      (setq kadn (strcat kadn ":000" (rtos ned2_n 2 0)))
      (if (< ned2_n 100)
       (setq kadn (strcat kadn ":00" (rtos ned2_n 2 0)))
       (if (< ned2_n 1000)
        (setq kadn (strcat kadn ":0" (rtos ned2_n 2 0)))
        (setq kadn (strcat kadn ":"  (rtos ned2_n 2 0)))
       )
      )
     )
    )
    (alert "Укажите точку вставки типа здания")
    (command "_text" "_M" "0,0" 1 "90" tip_zd)
    (setq tv (list 0 0))
    (while (< (distance tv (list 0 0)) 1)
     (command "_move" (entlast) "" "0,0" pause)
     (setq tv (cdr (assoc '11 (entget (entlast))))  tv (list (cadr tv) (* -1 (car tv))))
    )
    (setq prim (entlast))
    (r)
    (setq u_n (cdr (assoc 5 (entget (entlast))))  prim priml)
    (r)
    (princ "\n Укажите масштаб надписи: ")              
    (command "_scale" (entlast) "" tv pause)
    (princ "\n Поверните текст: ")
    (command "_rotate" (entlast) "" tv pause)
    (princ "\n")
    (if (not (new_dialog "zdw12" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (command "_erase" gr (entlast) "")
      (lar)
      (exit)
     )
    )
    (action_tile "accept"
     "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))"
    )
    (start_dialog)
    (if (= (atoi vih) 1) (command "_chprop" gr "" "_lt" "dashed3" ""))
    (if (and n_zd (/= n_zd "") (/= n_zd " ") (/= n_zd "  "))
     (progn
      (if (not (new_dialog "zdw10" dcl_r))
       (progn
        (alert (strcat "Отсутствует или неверен файл " yyy))
        (command "_erase" gr (entlast) "")
        (lar)
        (exit)
       )
      )
      (action_tile "accept"
       "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))"
      )
      (start_dialog)
      (if (= (atoi vih) 1)
       (progn
        (command "_text" "_M" "0,0" 1.0 "90" n_zd)
        (setq tv (list 0 0))
        (while (< (distance tv (list 0 0)) 1)
         (command "_move" (entlast) "" "0,0" pause)
         (setq tv (cdr (assoc '11 (entget (entlast))))  tv (list (cadr tv) (- (car tv))))
        )
        (princ "\n Укажите масштаб надписи: ")              
        (command "_scale" (entlast) "" tv pause)
        (princ "\n Поверните текст: ")
        (command "_rotate" (entlast) "" tv pause)
       )
      )
      (princ "\n")
     )
    )
    (command "_zoom" "_p")
   )
  )
  (if (or (= zona_n  "") (= zona_n  ".") (= zona_n  " ")) (setq zona_n  nil))
  (if (or (= mas_n   "") (= mas_n   ".") (= mas_n   " ")) (setq mas_n   nil))
  (if (or (= kvar_n  "") (= kvar_n  ".") (= kvar_n  " ")) (setq kvar_n  nil))
  (if (or (= uch_n   "") (= uch_n   ".") (= uch_n   " ")) (setq uch_n   nil))
  (if (or (= ned1_n  "") (= ned1_n  ".") (= ned1_n  " ")) (setq ned1_n  nil))
  (if (or (= ned2_n  "") (= ned2_n  ".") (= ned2_n  " ")) (setq ned2_n  nil))
  (if (or (= s_uch   "") (= s_uch   ".") (= s_uch   " ")) (setq s_uch   nil))
  (if (or (= s_dok   "") (= s_dok   ".") (= s_dok   " ")) (setq s_dok   nil))
  (if (or (= k_l     "") (= k_l     ".") (= k_l     " ")) (setq k_l     nil))
  (if (or (= pred    "") (= pred    ".") (= pred    " ")) (setq pred    nil))
  (if (or (= adr_or  "") (= adr_or  ".") (= adr_or  " ")) (setq adr_or  nil))
  (if (or (= n_zd    "") (= n_zd    ".") (= n_zd    " ")) (setq n_zd    nil))
  (if (or (= nazn    "") (= nazn    ".") (= nazn    " ")) (setq nazn    nil))
  (if (or (= tip_zd  "") (= tip_zd  ".") (= tip_zd  " ")) (setq tip_zd  nil))
  (if (or (= nm_fv   "") (= nm_fv   ".") (= nm_fv   " ")) (setq nm_fv   nil))
  (if (or (= n_post  "") (= n_post  ".") (= n_post  " ")) (setq n_post  nil))
  (if (or (= d_post  "") (= d_post  ".") (= d_post  " ")) (setq d_post  nil))
  (if (or (= n_dok   "") (= n_dok   ".") (= n_dok   " ")) (setq n_dok   nil))
  (if (or (= d_dok   "") (= d_dok   ".") (= d_dok   " ")) (setq d_dok   nil))
  (if (or (= d_kor   "") (= d_kor   ".") (= d_kor   " ")) (setq d_kor   nil))
  (if (or (= login_user  "") (= login_user  ".") (= login_user  " ")) (setq login_user  nil))
  (load "asis")
  (c:asis)
  (if (not ase_errno)
   (if (or (equal osho "MASSIV") (equal osho "ZONA"))
    (progn
     (setq a nil nom_z nil nam_z nil nom_m nil aaa nil aam nil areanew nil n 0)
     (command "_erase" gr (entlast) "")
    )
    (progn
     (if (not (new_dialog "ww" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))"
     )
     (start_dialog)
     (if (= (atoi vih) 1)
      (progn
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
      (progn
       (load "asidel")
       (c:asidel)
       (c:asis)
       (if (not ase_errno)
        (progn
         (alert "Ошибка записи в базу данных")
         (command "_erase" gr (entlast) "")
         (lar)
         (exit)
        )
       )
      )
     )
    )
   )
  )
 )
 (lar)
 (command "_zoom" "_p")
);end ray
а этот код именно чертил объект назовем его земельный участок, присваивал ему номер, требовал заполнения определенных полей, данные из которых и попадали в БД, которые можно потом либо отредактировать, либо удалить объект и строку в БД, либо просто посмотреть, но это прописано в других кодах.
Основная часть кодов предназначена для топографов, она рисует условные знаки по всем предъявляемым к ним требованиям. Насколько мне известно ObjectLand этого не может, а БД нужна для землеустроителей. У нас 70% города нарисовано в этой карте и 50% района.
Программированию я сейчас и пытаюсь научиться, для английского есть куча переводчиков, но на них уходит много времени.
Подскажите где взять специалиста?

Последний раз редактировалось Andru1968, 30.08.2011 в 17:19.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 17:01
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
1. Зачем эта программа запихана в AutoCAD?
Вот это да, я честно говоря сразу и не смотрел, это-же действительно такой клиент БД на смеси автолиспа с ARX - то ли автор больше ничего не знал, то ли это "нашедшея жизнь" дипломная работа? Интересно а у пользователя, автокад по назначению вобще используется? Или он как библиотека к "программе" устанавливается.
Автору - напишите как (для чего) Вы это чудо используете - тут по ходу Вам автокад-то и не нужен.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.08.2011, 17:23
#18
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Дима_

Если что-то конкретно интересует пиши в личку.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 20:48
1 | #19
ShaggyDoc

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


Цитата:
Насколько мне известно ObjectLand этого не может, а БД нужна для землеустроителей. У нас 70% города нарисовано в этой карте и 50% района.
Вот как раз ObjectLand и используется у "землеустроителей", т.е. в Росрестре как штатный инструмент. Великолепнейшая программа! Есть и другие - российские ИнГЕО, Панорама, буржуйские Mapinfo, ArcGIS.

"В этой карте" - это в AutoCAD? Это тупиковый путь для информационных систем. AutoCAD, благодаря своим графическим возможностям, может быть очень удобен для топографов и геодезистов (т.е. "чертежников"). А в части информации - он "никакой". Какие бы завлекательные описания о нем не сочиняла фирма. Просто-напросто Autodesk проспала развитие "мира ГИС", а потом только делала вид, что и она "в теме", выпуская целую линейку продуктов.

Знаю это не понаслышке - сам лет 10 делал ГИС на базе AutoCAD.

Да, в AutoCAD можно сделать привязку "семантики" к "графике". Причем разными способами. Есть и Database Connectivity, и примеры с CAO в поставке AutoCAD (см. caotest.lsp, caotest.dcl). А раньше ASI было. Но всё это чрезвычайно примитивно. Просто навешивание лапши на уши, да показать, что "в принципе можно". И, самое главное, порочно по сути.

Информация о любых пространственных объектах (например, земельных участках) состоит из двух частей:

1. "Семантическая" - описательная часть (номер, владелец и т.п.)
2. Координатная - координаты вершин.

В "решениях Autodesk" координатная информация хранится внутри DWG - как обычные координаты примитивов. А "семантика" - может и прямо в DWG или, в "продвинутом" варианте в "базе данных". Связь графики и семантики производится через расширенные данные (ничего иного и не придумали). Ну и можно программы в разных вариантах сделать (мы делали), для работы с данными.

Но самое главное и самое плохое то, что координаты внутри DWG. Это значит, что они оторваны от семантики, спрятаны в закрытом формате, с ними можно работать только посредством самого AutoCAD (или его "вертикальных" решений). Формат DWG - это не база данных, с которой могут работать множество пользователей одновременно. И даже для "попеременной" работы на каждом рабочем месте должен стоять полноценный AutoCAD.

Вынести пространственные данные в БД можно - "назло Autodesk". Однако для этого надо делать серьезную систему для работы с БД и со связкой "БД-AutoCAD". И вообще с любой другой системой. Мы это делали ещё лет 20 назад, с современными инструментами это проще, хотя "вопрос интересный". Ну а зачем тогда нужен сам AutoCAD? Да только как очень дорогое средство визуализации "карт", использующее 10% от своей действительно великолепной графической системы. Мы его когда-то так и использовали, потому что иных средств просто не было. А потом отказались - слишком дорого. Это чертежи "рисовать" можно втихаря на пиратском AutoCAD, а с информационной системой (заведомо не частного уровня) такое не пролезет.

А накопленная информация по нескольким городам никуда не делась. Она полностью, с координатами, находится в БД и отрисовать её можно в любой графической среде.

Ну и цена у ObjectLand для 1 пользователя 6000 руб, для 10 пользователей - 21000 руб, а "сайт-лицензия" (неограниченное количество мест в пределах "места") - 180000 руб (я покупал еще за 96 т.р.). И даже если не покупать, а просто скачать и работать, то нет никаких ограничений, кроме логотипа на карте. Это очень удобно - можно как следует "пошшупать". И уж точно приобретение намного выгоднее, чем попытки чего-то смастерить "под AutoCAD", особенно не зная предмета.
ShaggyDoc вне форума  
 
Непрочитано 30.08.2011, 20:49
#20
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Теперь стало более менее понятно. По вопросу: тут несколько вариантов, самый быстрый и дешевый - найти автора, я думаю он быстрее всего разберется и переделает под 2009, но это не всегда физически возможно; второй путь это попытаться "проапргрейдить" существующий рабочий проект, lisp кодам и DCL скорее всего редактирование не потребуется (если и потребуется то "не сильное"), что не скажешь про arx (exe?) библиотеки (модули) - если там используется только "фирменные", то шансы найти под новую версию (или перекопмилировать исходник) есть, если-же там еще есть "авторское творчество", то боюсь проще "все по новой" - со всеми вытекающеми - описание задачи, временем, деньгами, отладкой, обкаткой и пр.
з.ы. Специалисты "водятся" здесь и в поиске исполнителей.
з.з.ы Пока писал, свое мнение касательно рациональности и перспективности этого вопроса описал ShaggyDoc - я с ним полностью согласен.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 30.08.2011 в 20:54.
Дима_ вне форума  
 
Автор темы   Непрочитано 31.08.2011, 09:48
#21
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


ShaggyDoc
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вот как раз ObjectLand и используется у "землеустроителей", т.е. в Росрестре как штатный инструмент.
Для Росрестра ObjectLand может быть и великолепная программа. Но квадратики, прямоугольнички и многоугольнички, которые Росреестр использует для отображения земельных участков и строений в своей карте, мне как топографу трудно назвать картой.


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
"В этой карте" - это в AutoCAD? Это тупиковый путь для информационных систем. AutoCAD, благодаря своим графическим возможностям, может быть очень удобен для топографов и геодезистов (т.е. "чертежников"). А в части информации - он "никакой".
Я с 1998 года работаю с пакетом программ назовем его GEO-пакет для AutoCAD R14 и меня в нем все устраивает и как топографа, и как землеустроителя, и что-то в нем менять мне не хочется. К тому же разговор не идет о GEO-пакете для AutoCAD R14 как о ГИС. Проблема состоит в том, что использовать AutoCAD R14 легально невозможно.

Цитата:
Сообщение от Дима_ Посмотреть сообщение
Пока писал, свое мнение касательно рациональности и перспективности этого вопроса описал ShaggyDoc - я с ним полностью согласен.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Но самое главное и самое плохое то, что координаты внутри DWG. Это значит, что они оторваны от семантики, спрятаны в закрытом формате, с ними можно работать только посредством самого AutoCAD (или его "вертикальных" решений). Формат DWG - это не база данных, с которой могут работать множество пользователей одновременно. И даже для "попеременной" работы на каждом рабочем месте должен стоять полноценный AutoCAD.
То есть Вы предлагаете отказаться от затеи переделать GEO-пакет под AutoCAD 2009. Но дело в том что 90% кодов уже работают в AutoCAD 2009, осталось решить проблему с БД. И после всего Вы советуете поднять руки вверх.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Знаю это не понаслышке - сам лет 10 делал ГИС на базе AutoCAD.
Может поделитесь своим опытом?
Andru1968 вне форума  
 
Непрочитано 31.08.2011, 12:16
#22
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
То есть Вы предлагаете отказаться от затеи переделать GEO-пакет под AutoCAD 2009. Но дело в том что 90% кодов уже работают в AutoCAD 2009, осталось решить проблему с БД.
Я лично предлагал и два других варианта, просто мне кажется что это все-таки тупиковый путь - я понимаю что переучиваться и переделывать муторней, но - надо смотреть весь комплект, вполне может быть что те самые 90% являються "оберткой" вокруг тех 10 - которые не работают, а написать его по новой можно только "раскопав" все требования к нему - еще раз повторю - если это просто "штатная" библиотека - то скорее всего понадобиться просто найти "современную" версию, если там заложен "рукописный" функционал программы - то раскапывать что он должен делать - все равно что новый писать. То есть если придеться кардинально переделывать, то трудозатрат никак не избежать - а посему лучше все таки присмотреться к готовым продуктам (так просто дешевле).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 31.08.2011, 13:10
#23
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
самый быстрый и дешевый - найти автора
Я даже фамилий их не знаю. Если Fleming в начале каждой программы заявляет о своих авторских правах, то создатели GEO-пакета не оставили о себе ни какой информации. Я просто случайно обнаружил исходники на одном из компов в организации, где устанавливал GEO-пакета, на мой вопрос откуда они взялись никто не смог ответить.

Цитата:
Сообщение от Дима_ Посмотреть сообщение
те самые 90% являються "оберткой" вокруг тех 10 - которые не работают
Нет 10% - это именно коды для работы с БД. Смотри Код выложенный в #13

Цитата:
Сообщение от Дима_ Посмотреть сообщение
Специалисты "водятся" здесь и в поиске исполнителей.
А можно поточнее
Andru1968 вне форума  
 
Непрочитано 31.08.2011, 14:59
#24
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
А можно поточнее
Выложи свой код, сразу найдутся советчики
gomer вне форума  
 
Автор темы   Непрочитано 31.08.2011, 15:22
#25
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


А ты смотрел Код выложенный в #13
Andru1968 вне форума  
 
Непрочитано 31.08.2011, 16:41
#26
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
ты смотрел Код выложенный в #13
код, конечно, топорный, но я не увидел пока жалоб... Где именно не работает?
gomer вне форума  
 
Непрочитано 31.08.2011, 17:21
#27
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


Между прочим Map 3D вполне себе ГИС, если надо дешевый вариант смотреть карты то - MapGuide Open Source http://mapguide.osgeo.org/
Для топографов - Civil 3D, который полностью включает Map 3D. Так что лучше изучайте современные инструменты!
trir на форуме  
 
Непрочитано 31.08.2011, 18:25
1 | #28
ShaggyDoc

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


Цитата:
Но квадратики, прямоугольнички и многоугольнички, которые Росреестр использует для отображения земельных участков и строений в своей карте, мне как топографу трудно назвать картой.
Вот уж не надо ахинею нести, совершенно не зная дела. Какие "квадратики"? Совершенно нормальная "пятисотка", на которой помимо "просто топографии" может быть множество информационных "тем", "выборок", "макетов", "стилей" и прочего. Не говоря уж про великолепную работу с БД.

Прилагаю несколько наугад взятых кат из OL

Цитата:
Но дело в том что 90% кодов уже работают в AutoCAD 2009, осталось решить проблему с БД. И после всего Вы советуете поднять руки вверх.
Вот это "осталось решить" сложнее всех остальных кодов. Особенно если идти в заведомо неверном направлении и пытаться изобретать велосипед, не зная, что такое колесо.

Цитата:
Может поделитесь своим опытом?
Зачем, если "не в коня корм"? Ну, покажу картинку, как выглядит "взаправдашнее" редактиование БД - "семантика" и графика по объекту.

Цитата:
Между прочим Map 3D вполне себе ГИС
Это для тех, кто слаще репы ничего не едал и не знает, что такое настоящая геоинформационная система. А назвать "ГИС" можно всё, что угодно, лишь бы "карта на экране" была. Civil 3D и другие "вертикальные" решения - прекрасные продукты, если применять их по назначению. Ну и стоимость этих "вполне себе" прикиньте хотя бы на сотню рабочих мест. Да за такие деньги можно ArcGIS приобрести, рядом с которой всякие "Автодески" и не стояли.

А вот ObjectLand, ИнГЕО - вполне доступны и по ценам и по возможностям. Всякие "силовики" предпочитают "Панораму" - тоже прекрасный продукт.
Миниатюры
Нажмите на изображение для увеличения
Название: ol_01.jpg
Просмотров: 75
Размер:	112.4 Кб
ID:	65480  Нажмите на изображение для увеличения
Название: ol_02.jpg
Просмотров: 75
Размер:	141.7 Кб
ID:	65481  Нажмите на изображение для увеличения
Название: ol_03.jpg
Просмотров: 68
Размер:	103.6 Кб
ID:	65482  Нажмите на изображение для увеличения
Название: ol_04.jpg
Просмотров: 73
Размер:	68.0 Кб
ID:	65483  Нажмите на изображение для увеличения
Название: bestia_db.jpg
Просмотров: 85
Размер:	51.3 Кб
ID:	65484  

ShaggyDoc вне форума  
 
Непрочитано 31.08.2011, 21:40
#29
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от trir Посмотреть сообщение
Между прочим Map 3D вполне себе ГИС
полностью согласен, меня устраивает на 101%
Vov.Ka вне форума  
 
Автор темы   Непрочитано 31.08.2011, 22:43
#30
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


trir
Цитата:
Сообщение от trir Посмотреть сообщение
Между прочим Map 3D вполне себе ГИС, если надо дешевый вариант смотреть карты то - MapGuide Open Source
Дело в том что AutoCAD 2009 лицензионный уже купили и вопрос остался только нужна ли БД или просто плюнуть на нее.

gomer
Цитата:
Сообщение от gomer Посмотреть сообщение
код, конечно, топорный, но я не увидел пока жалоб... Где именно не работает?
это код который работает в AutoCAD R14, его и надо переделать

ShaggyDoc
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вот уж не надо ахинею нести, совершенно не зная дела.
Согласен я не спец в ObjectLand, но я видел неоднократно как ObjectLand используется работниками кадастровой палаты в нашем городе, т.е. подразделением Росреестра, там именно только квадратики, прямоугольнички и многоугольнички. Линейные объекты (нефтепроводы, газопроводы и т.д.), колодцы, столбы они говорят мы показать не можем нет такой функции.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
идти в заведомо неверном направлении
что Вы имеете ввиду

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Ну, покажу картинку, как выглядит "взаправдашнее" редактиование БД - "семантика" и графика по объекту.
Посмотрите вложенный файл Doc1.doc

ShaggyDoc
Просмотрел Ваши миниатюры. Первая похожа на карту, только вот условные знаки выполнены с несоблюдением требований, которые требует ГУГК. Я повторюсь, я топограф и по образованию и по профессии, поэтому требования ГУГК для меня закон. А теперь назовите хоть одну программу для черчения карт, которая бы придерживалась требований ГУГК. В начале своей работы с GEO-пакетом, я слышал что руководитель группы разработчиков был именно геодезистом, и что программистам пришлось изучить геодезию и теоретически и практически.
Вложения
Тип файла: doc Doc1.doc (444.5 Кб, 104 просмотров)

Последний раз редактировалось Andru1968, 31.08.2011 в 23:12.
Andru1968 вне форума  
 
Непрочитано 01.09.2011, 07:37
1 | #31
ShaggyDoc

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


Цитата:
ObjectLand используется работниками кадастровой палаты в нашем городе, т.е. подразделением Росреестра, там именно только квадратики, прямоугольнички и многоугольнички.
Ну, так это их объекты учета. А у других, например телефонной сети, объекты учета кабели, колодцы, шкафы, коробки и многое другое.

Цитата:
Линейные объекты (нефтепроводы, газопроводы и т.д.), колодцы, столбы они говорят мы показать не можем нет такой функции.
Это просто они такие "специалисты", что не знают элементарных вещей. Точка, линия, полигон (и кое-что ещё) - обязательные объекты любых ГИС.
Цитата:
А теперь назовите хоть одну программу для черчения карт, которая бы придерживалась требований ГУГК
Да абсолютно все российские программы. Вот только не всегда они могут "нарисовать" сложные виды изображений, такие как "штриховку" откосов на крупномасштабных планах. Это, пожалуй, единственное исключение.

Электронные карты проходят через Геонадзор, включаются в банки картографических данных и не будут приняты, если что-то не так.

Более того, сейчас созданы классификаторы для топографических карт и планов на все масштабы. Они построены в соответствии с "условными знаками", для каждого вида изображений установлены единые имена слоев, единые названия "семантик", установлены единые требования к цифровым топографическим картам и планам, единая терминология (чтоб не говорили "квадратики").

Разумеется, и требования бывшего "ГУГК" учитываются (а также изменяются). И современная Роскартография здесь работает. В частности, для всех своих предприятий установила единый программный продукт (разумеется, не Автокад). И единые карты на всю страну в электронном виде делаются.

Современная электронная карта уже не просто "компьютерная" копия бумажной, пригодная для распечатки. Если на традиционном планшете "нарисован" дом, то кроме подписи наподобие "9КЖ" ничего информативного об нем нет. А на электронной карте, даже чисто топографической, уже должна быть обязательная "семантика" по классификатору. И эта семантика сидит в скрытом виде, находится в базе данных.

Чисто графическое топографическое черчение условными знаками (точечными, линейными, площадными) сделать очень просто. Коли спрашивал "хоть одну программу" - назову свою "Интегрированная система ruCAD". Она имела несколько версий и названий (TiGRA, zCAD, InCAD, BestIA). Вот там всё топографическое "рисование" внутри AutoCAD. И условные знаки в точном соотвествии с "ГУГК" - это специально проверяли несколько комиссий, "до мулиметра". Сделано несколько тысяч электронных планшетов по таким городам как Челябинск, Курган.

Но даже чисто чертежной части одного плана или планшета мало, надо иметь возможность ими пользоваться. Нужна система. Электронные планшеты лежат в специальном банке топографических данных. Работая над планом города, специалист, имеющий доступ к банку данных, может подгрузить топооснову по любому участку местности (по точке, прямоугольнику или трассе). Кстати, и в Интернет может просмотреть любой планшет с переходом на соседние, с управлением слоями и получением дополнительных данных по объекту.

Это делалось именно в AutoCAD ради проектировщиков. А вот всем остальным службам не столь важна сама топография, как информация.

Вот на этой топооснове уже создаются дополнительные информационные слои. Т.е. к контуру, например, здания будет привязана и какая-то "кадастровая", или "полицайская", или "электрицкая" информация. В AutoCAD это делать можно (мы делали), но совершенно неудобно и неэкономично.

Да и технически AutoCAD менее всего приспособен для настоящей ГИС. Попробуйте, например, управлять порядком отображения слоев "по вертикали", отобразить один слой в карте в разных видах, автоматически создавать подписи, автоматически генерализировать изображение при изменении масштаба. Не говоря уж про информационную часть или аналитику.

Цитата:
Посмотрите вложенный файл Doc1.doc
Ну и что? Кто-то сделал небольшое приложение, решающее некоторые задачи. Да информация в виде "просмотр строки". Это же самое примитивное, детсадовский уровень. Да таких приложений можно множество наделать. А попробуй-ка без программирования изменить структуру данных! Или добавить новые виды информации. Да хотя бы просто запустить под новой версией Автокад (с чем и столкнулся).

В настоящих ГИС таких вопросов и не возникнет. Там и средства разработки есть (если возникают какие-то дополнительные задачи), но всё основное есть изначально. Причем разработка ведется, как правило, с использованием любых систем программирования.

А почему ты не можешь спокойно своё проверенное приложение в новой версии использовать? Да потому, что Autodesk идет порочным путем. Твой asilisp.arx из AutoCAD-14 не будет работать в других версиях - это специально сделано. Даже если в нем нет ничего "эдакого", и даже если есть исходные тексты, и даже если есть голова, надо будет приобрести ещё и определённую версию VisualStudio да всё перекомпилировать (скорей всего не только). Развод лохов на бабки называется, путем сговора Microsoft и Autodesk.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 01.09.2011, 09:18
#32
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


ShaggyDoc
Повторюсь еще раз, дело в том что AutoCAD 2009 лицензионный уже купили и вопрос остался только нужна ли БД или просто плюнуть на нее, по-этому все другие существующие ПО работающие в данном направлении мне сейчас неинтересны. Просто в оставшиеся 10% входят коды для подготовки документов, при этом они берут часть информации из БД. Можно конечно их переделать, чтобы они перестали обращаться к БД и "дело в шляпе" GEO-пакет для AutoCAD 2009 готов,

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вынести пространственные данные в БД можно - "назло Autodesk".
а можно либо своими силами, либо найти людей, но все-таки сделать GEO-пакет для AutoCAD 2009 на все 100% "назло Autodesk".

Я благодарен ShaggyDoc за все его внимание к моей проблеме, за ту информацию, которую мне удалось под черпнуть из его сообщений. Но как говорилось в эпиграфе к одному тележурналу во времена СССР: "Орешек знаний тверд, но мы не привыкли отступать..."

Кто бы хотел заняться решением, повторяю именно решением проблемы отзовитесь?
Andru1968 вне форума  
 
Непрочитано 01.09.2011, 11:51
#33
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


ShaggyDoc, конечно прав, он зрит в корень, то бишь концептуально, но не совсем по теме... Да, чтобы внедрять новые технологии, начальство нужно дрессировать, ведь ему не важны средства производства, а только результат...
Конкретно по #13 Уберите
Код:
[Выделить все]
  (setq envnames (mapcar 'car (asi_getcfg "ENVIRONMENTS"))
       ase_errno 1
 )
 (if (= "" (car envnames))
  (setq envnames (cdr envnames))
 )
и должно заработать... вообще странный кусок кода, далее не используемый... это конечно если не дело в asi
Соответственно #16 тоже заработает...
gomer вне форума  
 
Автор темы   Непрочитано 01.09.2011, 12:16
#34
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


коды #13 и #16 сделаны для R14
Andru1968 вне форума  
 
Непрочитано 01.09.2011, 12:59
#35
_REGEN


 
Регистрация: 14.12.2010
Там, где мамонты жили ...
Сообщений: 224


Цитата:
Сообщение от Дима_ Посмотреть сообщение
самый быстрый и дешевый - найти автора
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Я даже фамилий их не знаю
Сдается мне, что это АО "Аркада", баловалась она такими вещами в 90-е
в поисковике есть
__________________
Время – лучшее лекарство, лечит даже от жизни.
_REGEN вне форума  
 
Непрочитано 01.09.2011, 13:13
#36
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
коды #13 и #16 сделаны для R14
Чтобы заработал #16 замените все (command "_layer" на (command "_-layer"
gomer вне форума  
 
Автор темы   Непрочитано 01.09.2011, 15:08
#37
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


_REGEN
Цитата:
Сообщение от _REGEN Посмотреть сообщение
АО "Аркада"
GEO-пакет делали Саратовские программисты
Andru1968 вне форума  
 
Автор темы   Непрочитано 27.09.2011, 13:44
#38
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


PDF по ADOLISP_Library перевел, прочитал, поработал с ADOLISP_Example.
На базе ADOLISP_Example переделал свой код из под R14.


Код:
[Выделить все]
 ;========================= Добавление строки в БД =========================
(defun c:asis ( / ConnectionObject Result     ConnectString
	          SQLStatement     TablesList ColumnsList)
  (if (not ADOLISP_ConnectToDB) (load "ADOLISP_Library.lsp")); end if
  (setq ase_errno 1)
  (setq ConnectString "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\Работа\\BAZA.mdb")
  (prompt (strcat "\n\nСоединение с базой данных с использованием \n\""  ConnectString "\"" ))
  (if (not (setq ConnectionObject (ADOLISP_ConnectToDB ConnectString "admin" "")))
    (progn
      (prompt "\nСвязь прервалась!")
      (ADOLISP_ErrorPrinter)
    ); end progn
    (prompt "\nРезультат: успешно выполнено!")
  ); end if
  (if ConnectionObject
    (progn
      (if (or (not zona_n) (= zona_n "")) (setq zona_n 0))
      (if (or (not  mas_n) (=  mas_n "")) (setq  mas_n 0))
      (if (or (not kvar_n) (= kvar_n "")) (setq kvar_n 0))
      (if (or (not  uch_n) (=  uch_n "")) (setq  uch_n 0))
      (if (or (not ned1_n) (= ned1_n "")) (setq ned1_n 0))
      (if (or (not ned2_n) (= ned2_n "")) (setq ned2_n 0))
      (date)
      (setq d_vv vrem)
      (setq SQLStatement (strcat "INSERT INTO GLAG (zona_n, mas_n, kvar_n, uch_n, ned1_n, ned2_n) VALUES ('"(rtos zona_n 2 0)"', '"(rtos mas_n 2 0)"', '"(rtos kvar_n 2 0)"', '"(rtos uch_n 2 0)"', '"(rtos ned1_n 2 0)"', '"(rtos ned1_n 2 0)"')"))
      (prompt (strcat "\n\nВставка строки:\n\""  SQLStatement "\""))
      (if (setq Result (ADOLISP_DoSQL ConnectionObject SQLStatement))
	(prompt "\nРезультат:\nУспешно выполнено!")
	(progn
	  (prompt "\nПривело к сбою!")
	  (ADOLISP_ErrorPrinter)
	); end progn
      ); end if
      (if SQLStatement
	(dcl_p)
     ); end if
    ); end progn
  ); end if
  ;; Disconnect
  ;; Разъединение
  (prompt "\n\nРазъединение от базы данных\n")
  (ADOLISP_DisconnectFromDB ConnectionObject)
  ;; Although the following is unnecessary in this case (because
  ;; ConnectionObject is a local variable), it's never a _bad_
  ;; idea to NIL-out the connection object.
  (setq ConnectionObject nil)
); end asis

(prin1)


;------------------------- Вычисление даты -------------------------
(defun date ( / xz xxz ans dp)
  (setq  xz (fix (getvar "cdate"))
	xxz (/ xz 10000)
	 xz (- xz (* xxz 10000))
	ans (/ xz 100)
	 dp (itoa (- xz (* ans 100)))
	ans (itoa ans))
  (if (= (strlen ans) 1) (setq ans (strcat "0" ans)))
  (if (= (strlen  dp) 1) (setq  dp (strcat "0"  dp)))
  (setq vrem (strcat dp "." ans "." (itoa xxz)))
); end date
;--------------------------------------------------
(defun dcl_p ( / dcl_r spis)
  (setq spis (list (strcat "Зона      |" (rtos zona_n 2 0))
		   (strcat "Массив    |" (rtos  mas_n 2 0))
		   (strcat "Квартал   |" (rtos kvar_n 2 0))
		   (strcat "Участок   |" (rtos  uch_n 2 0))
		   (strcat "Недвиж1   |" (rtos ned1_n 2 0))
		   (strcat "Недвиж2   |" (rtos ned2_n 2 0))))
  (if n_zd
    (setq spis (reverse (cons (strcat "№ дома    |" n_zd) (reverse spis))))
  ); end if
  (if s_uch
    (setq spis (reverse (cons (strcat "Площадь   |" (rtos s_uch 2 2)) (reverse spis))))
  ); end if
  (if s_dok
    (setq spis (reverse (cons (strcat "Площ.док  |" (rtos s_dok 2 2)) (reverse spis))))
  ); end if
  (if k_l
    (setq spis (reverse (cons (strcat "Код лица  |" k_l) (reverse spis))))
  ); end if
  (if pred
    (setq spis (reverse (cons (strcat "Владелец  |" pred) (reverse spis))))
  ); end if
  (if adr_or
    (setq spis (reverse (cons (strcat "Адрес     |" adr_or) (reverse spis))))
  ); end if
  (if tip_zd
    (setq spis (reverse (cons (strcat "Тип здан. |" tip_zd) (reverse spis))))
  ); end if
  (if nazn
    (setq spis (reverse (cons (strcat "Назнач.   |" nazn) (reverse spis))))
  ); end if
  (if nm_fv
    (setq spis (reverse (cons (strcat "Тип влад. |" nm_fv) (reverse spis))))
  ); end if
  (if n_post
    (setq spis (reverse (cons (strcat "№ пост.   |" n_post) (reverse spis))))
  ); end if
  (if d_post
    (setq spis (reverse (cons (strcat "Дата пост.|" d_post) (reverse spis))))
  ); end if
  (if d_dok
    (setq spis (reverse (cons (strcat "Дата док. |" d_dok) (reverse spis))))
  ); end if
  (if n_dok
    (setq spis (reverse (cons (strcat "№ док.    |" n_dok) (reverse spis))))
  ); end if
  (if d_vv
    (setq spis (reverse (cons (strcat "Дата ввода|" d_vv) (reverse spis))))
  ); end if
  (if d_kor
    (setq spis (reverse (cons (strcat "Дата корр.|" d_kor) (reverse spis))))
  ); end if
  (if login_user
    (setq spis (reverse (cons (strcat "Кто делал:|" login_user) (reverse spis))))
  ); end if
  (setq dcl_r (load_dialog "asi"))
  (if (not (new_dialog "viewrow" dcl_r))
    (progn
      (alert "Отсутствует или неверен файл asi.dcl")
      (unload_dialog dcl_r)
      (exit)
    ); end progn
  ); end if
  (start_list "ID_LBOX_COLS")
  (mapcar 'add_list spis)
  (end_list)
  (start_dialog)
  (unload_dialog dcl_r)
); end dcl_p
Все бы хорошо и с базой соединился, и вставил туда строчки. При этом например при вводе в диалоговом окне номера зоны, программа из #16 проверяет есть ли в чертеже такой номер или нет. И если номер есть предлагает ввести другой номер. Вводим другой номер и программа переходит к коду указанному выше, и в БД появляется другая строка с новыми данными.
Это все замечательно работает пока в чертеже есть какой-то номер, но стоит только удалить его или открыть "чистый лист",
В БД появляется еще одна строчка с теми же данными.
При работе кода для R14, если в БД находилась строка с теми же данными выдавалось сообщение "Строка уже есть в базе" и предлагалось либо заменить ее, либо выйти из программы, при этом коде для R14 использовались ASI-функции манипулирования курсором. А как это сделать для AutoCAD 2009.
База данных имеет всего одну таблицу, т.е. нужны ли в ней ключевые поля.

Последний раз редактировалось Andru1968, 27.09.2011 в 14:00.
Andru1968 вне форума  
 
Непрочитано 27.09.2011, 21:39
#39
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
База данных имеет всего одну таблицу, т.е. нужны ли в ней ключевые поля.
Ключевое поле (поля) - основа реаляционных БД - иначе Вы не сможете "найти" запись, не зависимо от количества таблиц.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.09.2011, 11:36
#40
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Структура БД такова

Имя поля Тип данных Размер поля Число десят.знаков Обязательное поле Пустые строки Индексированное поле

ZONA_N Числовой Двойное с плавающей точкой Авто нет нет
MAS_N Числовой Двойное с плавающей точкой Авто нет нет
KVAR_N Числовой Двойное с плавающей точкой Авто нет нет
UCH_N Числовой Двойное с плавающей точкой Авто нет нет
NED1_N Числовой Двойное с плавающей точкой Авто нет нет
NED2_N Числовой Двойное с плавающей точкой Авто нет нет
N_ZD Текстовый 10 нет да нет
S_UCH Числовой Двойное с плавающей точкой 2 нет нет
S_DOK Числовой Двойное с плавающей точкой 2 нет нет
K_L Текстовый 2 нет да нет
PRED Текстовый 99 нет да нет
ADR_OR Текстовый 50 нет да нет
TIP_ZD Текстовый 20 нет да нет
NAZN Текстовый 99 нет да нет
NM_FU Текстовый 50 нет да нет
N_POST Текстовый 10 нет да нет
D_POST Текстовый 10 нет да нет
LOGIN_USER Текстовый 15 нет да нет
N_DOK Текстовый 10 нет да нет
D_DOK Текстовый 10 нет да нет
D_VV Текстовый 10 нет да нет
D_KOR Текстовый 10 нет да нет

Красным помечены поля, которые я сделал ключевыми, потому что в них записывается кадастровый номер участка, который не может изменяться.
Andru1968 вне форума  
 
Непрочитано 28.09.2011, 11:43
#41
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


У тебя в любом случае было ключевое поле (возможно составное), иначе СУБД не смогла-бы изменить конкретную запись.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.09.2011, 12:47
#42
Кулик Алексей aka kpblc
Moderator

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


Дима_, необязательно, мне кажется. Насколько я помню, конструкция типа INSERT INTO нормально сработает и без ключевых полей. Ключи нужны для организации связи между несколькими таблицами в нормализованной базе. Или я ошибаюсь?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.09.2011, 12:51
#43
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Структура БД такова

Имя поля Тип данных Размер поля Число десят.знаков Обязательное поле Пустые строки Индексированное поле

ZONA_N Числовой Двойное с плавающей точкой Авто нет нет
MAS_N Числовой Двойное с плавающей точкой Авто нет нет
KVAR_N Числовой Двойное с плавающей точкой Авто нет нет
UCH_N Числовой Двойное с плавающей точкой Авто нет нет
NED1_N Числовой Двойное с плавающей точкой Авто нет нет
NED2_N Числовой Двойное с плавающей точкой Авто нет нет
N_ZD Текстовый 10 нет да нет
S_UCH Числовой Двойное с плавающей точкой 2 нет нет
S_DOK Числовой Двойное с плавающей точкой 2 нет нет
K_L Текстовый 2 нет да нет
PRED Текстовый 99 нет да нет
ADR_OR Текстовый 50 нет да нет
TIP_ZD Текстовый 20 нет да нет
NAZN Текстовый 99 нет да нет
NM_FU Текстовый 50 нет да нет
N_POST Текстовый 10 нет да нет
D_POST Текстовый 10 нет да нет
LOGIN_USER Текстовый 15 нет да нет
N_DOK Текстовый 10 нет да нет
D_DOK Текстовый 10 нет да нет
D_VV Текстовый 10 нет да нет
D_KOR Текстовый 10 нет да нет

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

Цитата:
Структура БД такова

Имя поля Тип данных Размер поля Число десят.знаков Обязательное поле Пустые строки Индексированное поле

ID Счетчик Да (Совпадения не допускаются)
ZONA_N Числовой Двойное с плавающей точкой Авто нет нет
MAS_N Числовой Двойное с плавающей точкой Авто нет нет
KVAR_N Числовой Двойное с плавающей точкой Авто нет нет
UCH_N Числовой Двойное с плавающей точкой Авто нет нет
NED1_N Числовой Двойное с плавающей точкой Авто нет нет
NED2_N Числовой Двойное с плавающей точкой Авто нет нет
N_ZD Текстовый 10 нет да нет
S_UCH Числовой Двойное с плавающей точкой 2 нет нет
S_DOK Числовой Двойное с плавающей точкой 2 нет нет
K_L Текстовый 2 нет да нет
PRED Текстовый 99 нет да нет
ADR_OR Текстовый 50 нет да нет
TIP_ZD Текстовый 20 нет да нет
NAZN Текстовый 99 нет да нет
NM_FU Текстовый 50 нет да нет
N_POST Текстовый 10 нет да нет
D_POST Текстовый 10 нет да нет
LOGIN_USER Текстовый 15 нет да нет
N_DOK Текстовый 10 нет да нет
D_DOK Текстовый 10 нет да нет
D_VV Текстовый 10 нет да нет
D_KOR Текстовый 10 нет да нет

Красным помечены поля, которые я сделал ключевыми
Как к полю ID прицепить теперь SQL-CURSOR причем сделать это в LISP, найти нужную строку, а потом либо ее заменить на новую, либо подредактировать, либо удалить совсем


В R14 было так

Код:
[Выделить все]
 (progn
     (setq CURSOR (asi_alloc statiment (curs-name))); asi_alloc Выделяет курсор SQL посредством <выделяют оператор курсора>

     (asi_open cursor); asi_open Открывает курсор SQL посредством <динамический открытый оператор>

     (setq fetch (asi_fetch cursor)); asi_fetch Выбирает текущую позицию в курсоре SQL посредством <динамический оператор выборки>
     (if (not fetch)
      (progn 
       (date)
       (setq d_vv vrem)
       (asi_deallocstm statiment)
       (asi_close cursor)
       (setq statiment (asi_prepare session (strcat "INSERT INTO GLAG (zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n) VALUES ("(rtos zona_n 2 0)","(rtos mas_n 2 0)","(rtos kvar_n 2 0)","(rtos uch_n 2 0)","(rtos ned1_n 2 0)","(rtos ned2_n 2 0)")")))
       (asi_execute statiment)
       (asi_deallocstm statiment)
       (setq statiment (asi_prepare session (strcat "select zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n,n_zd,s_uch,s_dok,k_l,pred,adr_or,tip_zd,nazn,nm_fv,n_post,d_post,n_dok,d_dok,d_vv,d_kor,login_user from glag where zona_n=" (rtos zona_n 2 0) "and mas_n=" (rtos mas_n 2 0) "and kvar_n=" (rtos kvar_n 2 0) "and uch_n=" (rtos uch_n 2 0) "and ned1_n=" (rtos ned1_n 2 0) "and ned2_n=" (rtos ned2_n 2 0))))
       (setq CURSOR (asi_alloc statiment (curs-name)))
       (asi_open cursor)
       (setq fetch (asi_fetch cursor))
       (if       n_zd (asi_update cursor (list (list       "n_zd"       n_zd))))
       (if      s_uch (asi_update cursor (list (list      "s_uch"      s_uch))))
       (if      s_dok (asi_update cursor (list (list      "s_dok"      s_dok))))
       (if        k_l (asi_update cursor (list (list        "k_l"        k_l))))
       (if       pred (asi_update cursor (list (list       "pred"       pred))))
       (if     adr_or (asi_update cursor (list (list     "adr_or"     adr_or))))
       (if     tip_zd (asi_update cursor (list (list     "tip_zd"     tip_zd))))
       (if       nazn (asi_update cursor (list (list       "nazn"       nazn))))
       (if      nm_fv (asi_update cursor (list (list      "nm_fv"      nm_fv))))
       (if     n_post (asi_update cursor (list (list     "n_post"     n_post))))
       (if     d_post (asi_update cursor (list (list     "d_post"     d_post))))
       (if      d_dok (asi_update cursor (list (list      "d_dok"      d_dok))))
       (if      n_dok (asi_update cursor (list (list      "n_dok"      n_dok)))) 
       (if       d_vv (asi_update cursor (list (list       "d_vv"       d_vv))))
       (if login_user (asi_update cursor (list (list "login_user" login_user))))
       (if fetch
        (dcl_p)
        (progn
         (alert "Ошибка записи в базу")
         (setq ase_errno nil)
        );end progn
       );end if
      );end progn
      (progn
       (alert "Строка уже есть в базе")
       (setq ase_errno nil)
      );end progn
     );end if
     (asi_deallocstm statiment)
     (asi_close cursor)
    );end progn

Последний раз редактировалось Andru1968, 28.09.2011 в 13:27.
Andru1968 вне форума  
 
Непрочитано 28.09.2011, 14:10
#44
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


То Крыс - да работать-то будет, но, так сказать, write-only - как без ключевых полей произвести замену конкретного поля, конкретной записи? ну допустим первую(последнею) запись (соответствующие "общему" критерию) мы сможем выделить - update ..... limit1, а если вторая? Про несколько таблиц - я вобще молчу.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.09.2011, 14:13
#45
Кулик Алексей aka kpblc
Moderator

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


Дима_, значит, писать сложный запрос с вложениями WHERE и т.п. Но это, конечно, извращение, согласен
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.09.2011, 14:21
#46
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Делаю вывод: ключевое поля нужно обязательно. Делаю так "Ключевое поле = ID, Тип данных = Счетчик, Индексированное поле = Да (Совпадения не допускаются).

Вопрос: Как правильно составить SQL запрос, чтобы к полю ID прицепить SQL-CURSOR, найти нужную строку, а потом либо ее заменить на новую, либо подредактировать, либо удалить совсем и причем все это сделать в LISP???
Andru1968 вне форума  
 
Непрочитано 28.09.2011, 14:32
#47
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


..... where id=XXX
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.09.2011, 15:04
#48
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
..... where id=XXX

а можно полностью и что такое XXX
Andru1968 вне форума  
 
Непрочитано 28.09.2011, 16:56
#49
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Допустим у нас таблица Names из полей id,Name,tel,address, мы вычислили id некого гражданина у которого нам надо исрпавить tel -
Код:
[Выделить все]
UPDATE Names SET tel='111-22-33' where id=500
где 500 это определенное id. В вашем случае - надо внимательно изучить БД - ведь как-то она работала (изменяла записи) - соответственно было и ключевое поле (скорее всего составное - определяющие уникальную запись).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.09.2011, 17:21
#50
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
В вашем случае - надо внимательно изучить БД - ведь как-то она работала (изменяла записи) - соответственно было и ключевое поле (скорее всего составное - определяющие уникальную запись).
Как можно изучить БД для R14, если она называется Glag.dbf настраивалась с помощью asicfg.exe, что такое dBase3 я не знаю.


Код:
[Выделить все]
 (setq SQLCursor (strcat "DECLARE GLAG_CURS CURSOR FOR SELECT zona_n, mas_n, kvar_n, uch_n, ned1_n, ned2_n FROM GLAG WHERE zona_n = '"(rtos zona_n 2 0)"' and mas_n = '"(rtos mas_n 2 0)"' and kvar_n = '"(rtos kvar_n 2 0)"' and uch_n= '"(rtos uch_n 2 0)"' and ned1_n= '"(rtos ned1_n 2 0)"' and ned2_n = '"(rtos ned2_n 2 0)"'"))
Из всего прочитанного про SQL CURSOR родилась такая строчка
Andru1968 вне форума  
 
Автор темы   Непрочитано 30.09.2011, 10:34
#51
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


При выполнении функции получил значение переменной Result: (("zona_n" "login_user") (3 "chaa")), далее идет строка
Код:
[Выделить все]
 (setq SQLFetch (cdr Result))
получаю результат: ((3 "chaa"))
Как из этого получить (3 "chaa")
Andru1968 вне форума  
 
Непрочитано 30.09.2011, 14:55
1 | #52
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


Код:
[Выделить все]
(setq SQLFetch (cadr Result))
или, если 3 - это некий постоянный "ключ", то лучше:
Код:
[Выделить все]
(setq SQLFetch (assoc 3 Result))

Последний раз редактировалось Sad Dog, 30.09.2011 в 15:05.
Sad Dog вне форума  
 
Автор темы   Непрочитано 05.10.2011, 08:23
#53
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от VVA Посмотреть сообщение
Попробуй использовать ADOLisp
В PDF к ADOLISP_Library описываются строки подключения для Access, для SQL Server, для FoxPro, для Excel. Подскажите как должна выглядеть строка
Код:
[Выделить все]
   (setq ConnectString "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\Работа\\BAZA.mdb")
если использовать не MicrosoftOffice, а например OpenOffice.
Andru1968 вне форума  
 
Непрочитано 05.10.2011, 09:17
#54
ShaggyDoc

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


Цитата:
если использовать не MicrosoftOffice, а например OpenOffice.
ADO подключается не к чьим-то офисам, а к "провайдеру", например MSDASSQL. А уже провайдер физически работает с базой данных. В данном случае - это файлы *.mdb.
Для других данных нужно искать соответствующий "OleDbProvider". Сомневаюсь, чтобы такой был для OpenOffice - его OO Base вообще мало на что пригодна. Пока это пародия. Тем более нет никакого смысла из своей программы работать с этим форматом - надежных баз данных достаточно.
ShaggyDoc вне форума  
 
Непрочитано 05.10.2011, 10:09
#55
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


К предыдущему посту могу добавить только эти ссылки
http://dwg.ru/dnl/265
http://dwg.ru/dnl/2276
__________________
Как использовать код на Лиспе читаем здесь
VVA на форуме  
 
Непрочитано 05.10.2011, 10:35
#56
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
его OO Base вообще мало на что пригодна. Пока это пародия
Да бросьте - "просто не умеете их готовить" - прекрасная оболочка практически для любых "нормальных" БД (лично мне гороздо больше нравится, чем аналогичная от microsoft). Пародия - это пожалуй сама концепция т.н. "однопользовательских" БД - гемору много, зачем они вообще в совремеменной действительностпи нужны лично мне не понятно, для совсем "теток" есть excel, для "нормальных" задач - есть нормальные СУБД, убрали-бы давно эту "порнаграфию" как "файловая БД" - пусть отсавят оболочку для быстрой "обрисовки" несложных задач (которых в общем 80%), а данные надо хранить в нормальных БД. Если можно обойтись без офиса (опенофисом), то из-за Accessa его точно брать не стоит, да умеет он на 20% процентов меньше, но ИХМО с точки зрения GUI-оболочки для "нормальной" БД он гораздо удобней. А как я уже выше сказал, "правильное" использование программ такого рода - я только так и вижу.
p.s. Лично мне (но это конечно не значит, что и всем остальным) для работы из microsoftoffice - нужен только outlook (к сожалению пока совсместимых программ с аналогичными возможностями я не встречал), если-бы не он - клянусь - удалил бы нафиг (ну может ставил когда требуется проверка программ, "для кого-то" на предмет совместимости к excel, но это скажем так не лично для меня - не считаем в общем). Аналоги вордов и екселей, давно уже без детских болезней. Была у меня даже попытка самому написать аналог outlook (перед тем Новым Годом) - только естественной сетевой - под "нормальные" БД, но праздники, работа, в общем портотип (рабочий) есть, но заброшенный - быть может будет время - вернусь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 05.10.2011 в 10:44.
Дима_ вне форума  
 
Непрочитано 05.10.2011, 11:18
#57
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


То Дима_
Т.е. вы собирались один, между делом, написать outlook лучше чем вся микрософт?
Я видимо, безнадежно тупой, поскольку в трех книгах запутался. В чем секрет, поделитесь. Может я не то читаю.
Меня вот интересует ASP.NET+ MSSQL. Чтобы с места сдвинуться нужно прочесть Рихтера, Троелсена, Мак Дональда и Эспозито. Суммарный объем 4432 страницы. Общая толщина 20 см. Повеситься можно. Поэтому интересно, а как вы свои знания добывали?
__________________
На свете счастья нет, но есть покой и воля.
Sad Dog вне форума  
 
Автор темы   Непрочитано 05.10.2011, 11:26
#58
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Поясню возникшую проблему:
1. Коды для работы с БД с использованием ADOLISP_Library для AutoCAD2009, готовы на 95%.
2. При этом использовалась БД созданная в Access Microsoft Office Professional 2003.
3. Организации, которые используют коды GEO-пакета, в своей работе используют кто MicrosoftOffice Home 2003, кто Microsoft Office Professional 2003, кто OpenOffice и т.д.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
надежных баз данных достаточно
Подскажите какую в этом случаи можно использовать БД, чтобы она не зависела от того какой Office используется той или иной организацией.
Andru1968 вне форума  
 
Непрочитано 05.10.2011, 11:41
#59
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Sad Dog Посмотреть сообщение
Т.е. вы собирались один, между делом, написать outlook лучше чем вся микрософт?
Нет конечно - есть функционал который мне необходим, он наиболее полно реализован в outlook, но есть вещи которых мне в нем не хватает, это можно сделать разными способами начиная от программирования в outlook и заканчивая написанием собственного, я по сути пытался реализовать только работу с почтой и контактов, в том виде в которм она мне нужна (по сути очень похожа на outlook но БД "внешняя", запись лога (что я делал по данному контакту) - автоматическая, многопользовательская (в нормальном виде, а не через файловую синхронизацию), "интелектуальный" поиск, просмотр по датам (что происходило за последние x дней) и пр. еще не реализованное). Это еще не созданное "творение" никак нельзя назвать более "хорошей" чем outlook, это инструмент для меня, понадобится он еще кому-либо (кроме как на моей работе) - это большой вопрос, потому он пока отложен до лучших времен.
Про знания - есть старая сказка - когда учитель просит ученика нарисовать объем своих и его знаний в виде 2 кругов, а потом замечает - смотри граница с непознанным у меня больше... Чем больше читаешь - тем больше вопросов, от этого к сожалению никуда не денешься.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 05.10.2011 в 11:51.
Дима_ вне форума  
 
Автор темы   Непрочитано 05.10.2011, 14:03
#60
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Ребята не уходите от темы. Повторяю свой вопрос?

1. Коды для работы с БД с использованием ADOLISP_Library для AutoCAD2009, готовы на 95%.
2. При этом использовалась БД созданная в Access Microsoft Office Professional 2003.
3. Организации, которые используют коды GEO-пакета, в своей работе используют кто MicrosoftOffice Home 2003, кто Microsoft Office Professional 2003, кто OpenOffice и т.д.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
надежных баз данных достаточно
Подскажите какую в этом случаи можно использовать БД, чтобы она не зависела от того какой Office используется той или иной организацией и при этом без лишних материальных затрат.
Andru1968 вне форума  
 
Непрочитано 05.10.2011, 15:00
#61
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Вопрос просто поставлен так, что на него внятно ответить сложно - я люблю клубнику и смородину, но в них много сахара, а мне он вреден - какие ягоды мне есть? Если у пользователей используются excel и OO - используйте коннекторы, либо обращайтесь через com и.т.д, если нужны базы данных - полно как платных, так и бесплатных (firebird, mysql) - но что от них толку, если у "других" их нет и данными они пользуется из OO. К экселевским файлам через ADO можно обращаться и без устанановленного excel'я (есть готовые примеры на форуме), так-же их умеет читать и ОО - что Вам нужно сделать "нормально" или чтоб "другие" как и раньше работали? (а работают они не нормально, по крайней мере по современным представлениям).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 05.10.2011, 16:57
#62
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Вопрос сформулируем по другому. GEO-пакет для R14, как и сам R14 достался всем организациям можно сказать на "халяву", при этом имеется база данных назовем ее proba.dbf и есть какая-то программка под названием BAZAVIEW для просмотра данных. Все были довольны и счастливы, пока не пришли "люди в черном". Все начали искать выход из этой ситуации. Кто "ушел в подполье", кто купил лицензионный AutoCAD не задумываясь о том будет он работать как R14 или нет, кто gstarcad. И началась в городе чехарда, как в басне про лебедя, рака и щуку. Чтобы восстановить в городе мир и покой, я решил переделать GEO-пакет под легальный AutoCAD (за определенную плату), так как есть исходники и не много понимаю в LISP. И получается так:
1. все покупаем AutoCAD.
2. покупаем новый GEO-пакет.
только есть одно но, он будет работать на все 100% в том случаи, если у Вас
3. есть Microsoft Office Professional 2010.
4. есть Windows 7.
Спрашивается, зачем мне (точнее какому-нибудь ООО "...") тогда нужен этот GEO-пакет, буду работать в "подполье".
По-этому, чтобы исключить пункты 3 и 4 и нужна легальная "халявная" БД типа той, которая есть в OpenOffice.
Andru1968 вне форума  
 
Непрочитано 05.10.2011, 18:56
#63
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


С чего взялись требования к 3 и 4? Легальные халявные и "реальные" БД #61 - mysql, firebird. Для просмотра последних можно написать свою "гляделку", использовать встроенные в БД GUI'шники (точнее от создателей СУБД). Подключить тот-же OO.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.10.2011, 20:00
#64
ShaggyDoc

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


Цитата:
Подскажите какую в этом случаи можно использовать БД, чтобы она не зависела от того какой Office используется той или иной организацией и при этом без лишних материальных затрат
Не надо вообще думать ни про какие "Office". Программа должна быть самостоятельной, и не зависеть от наличия каких-то сторонних продуктов.

В случае локальной базы данных лучше всего использовать MDB. Хотя это называется "Microsoft Access Database", сама MS Access для работы пользователя не нужна, может только разработчику понадобиться в качестве конструктора БД. Да и это не обязательно. В этом случае будет только файл, без сервера БД. Нужен движок, который обычно есть в Windows или который можно бесплатно взять у Microsoft.

Есть и другие "бессерверные" базы данных (например SQLLite и подобные), но к ним будет трудно найти OleDbProvider, требуемый для доступа к БД из Lisp через ADO.

Если делать с перспективой на многопользовательскую работу, то надо использовать локальный сервер БД, для которого опять же есть OleDbProvider. Я лично предпочел бы Firebird, у которого есть "emedded" вариант. Или MySQL. Это будут бесплатные для разработчика и пользователя варианты.

Цитата:
нужна легальная "халявная" БД типа той, которая есть в OpenOffice
Кроме "халявности" нужна ещё и работоспособность. Надо различать программы класса "Database Desktop" (это например MS Access или OO Base) для конструирования самой БД и её несложной правки. И пользовательские программы, которые работают с БД определенных форматов.

"Халявная" OO Base - самый слабый продукт в семействе OpenOffice. Пока это жалкая попытка сделать "как в Access". Даже экспорта нет. И тьма других недостатков, описанная многими. Похоже, что делает самое слабое звено в команде. Сама "БД", которая используется в OO Base (это и должно интересовать программистов) - зазиппованный файл в двоичном формате одного из редких диалектов SQL. Прямая работа невозможна, OleDbProvider не найти. И это по-прежнему локальный файл. Лет через десять может что-то получится, пока прогресс незаметен. Уж лучше просто DBF.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 06.10.2011, 08:23
#65
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
С чего взялись требования к 3 и 4?
Это я так образно сказал, чтобы было понятно, что ООО "....", как пользователю GEO-пакета интересуют только пункты 1 и 2, а все остальное это проблемы разработчика, т.е. мои.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Уж лучше просто DBF
А можно об этом по подробнее. И как можно использовать уже существующую БД proba.dbf и ее просмоторщик BAZAVIEW в AutoCAD2009, если учесть тот факт, что в R14 они работают не зависимо от пунктов 3 и 4.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
ADO подключается не к чьим-то офисам, а к "провайдеру", например MSDASSQL. А уже провайдер физически работает с базой данных. В данном случае - это файлы *.mdb.
Как определить провайдер для работы с базой данных. В данном случае - это файлы proba.dbf. В папке где находится БД proba.dbf имеется еще два файла DBED.EXE, DBED.OVL. Поясните "чайнику" в СУБД, зачем они там нужны. (см.вложенные файлы)

Запустил DBED.EXE, выскочило окно похожее на NortonCommander, нажал клавишу F1 "Info", выскочило такое сообщение

Type of File: dBase III. V or FoxBase
Last Updated: 29/09/111
Version 1.91 09.1996
Вложения
Тип файла: zip Zem.zip (187.6 Кб, 41 просмотров)

Последний раз редактировалось Andru1968, 06.10.2011 в 09:14.
Andru1968 вне форума  
 
Непрочитано 06.10.2011, 19:23
1 | #66
ShaggyDoc

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


Цитата:
А можно об этом по подробнее. И как можно использовать уже существующую БД proba.dbf и ее просмоторщик BAZAVIEW в AutoCAD2009, если учесть тот факт, что в R14 они работают не зависимо от пунктов 3 и 4.
DBF - старинный популярный формат локальных баз данных. Без индексных файлов - самый простой, но разные локальные СУБД (dBase III+, Foxpro и т.п.) "придумали" множество модификаций формата индексных файлов.
Просмотрщиков DBF столько же, сколько программистов было лет 20 назад. И программ с именем "BAZAVIEW" может быть сколько угодно. Явно написана дилетантом, профессионал "BAZAxxxx" никогда не назовет. А теперь интерес к DBF утерян.

Как использовать в AutoCAD - зависит от возможностей программы - умеет ли она взаимодействовать с AutoCAD. Скорее всего просто запускать как обычный EXE.
Цитата:
Как определить провайдер для работы с базой данных. В данном случае - это файлы proba.dbf
Чтобы что-то определять, в общем случае надо изучать документацию. Наскоками и отдельными вопросами ничего не решить.
Конкретно для DBF при использовании технологии ADO провайдером может быть MSDAQL.

Всё что надо знать по работе с БД в AutoCAD подробно описано в главе 19 моей книги "САПР на базе AutoCAD. Как это делается".

Цитата:
DBED.EXE, DBED.OVL. Поясните "чайнику" в СУБД, зачем они там нужны
Это одна из упомянутых тысяч программ для просмотра и редактирования, сделанная в стиле "Norton". По нынешним временам весьма примитивная, практической ценности не имеет. Предназначена для работы в DOS. EXE - исполняемый файл, OVL - дополнительный, нечто наподобие современных dll.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 10.10.2011, 13:38
#67
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Не надо вообще думать ни про какие "Office". Программа должна быть самостоятельной, и не зависеть от наличия каких-то сторонних продуктов.
Нашел старый "винт", установил на него Windows и AutoCAD. На диск "D" положил baza.mdb. И начал проверять. Прекрасно работает и без MicrosoftOffice.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
В случае локальной базы данных лучше всего использовать MDB. Хотя это называется "Microsoft Access Database", сама MS Access для работы пользователя не нужна,
Получается что baza.mdb можно использовать только локально,

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Если делать с перспективой на многопользовательскую работу, то надо использовать локальный сервер БД, для которого опять же есть OleDbProvider. Я лично предпочел бы Firebird, у которого есть "emedded" вариант. Или MySQL. Это будут бесплатные для разработчика и пользователя варианты.
но я пробовал размещать ее на сетевом диске и все работает. Или здесь может произойти сбой, когда один пользователь просматривает в диалоговом окне строку из базы, а другой пытается в это же время изменить эту же строку (например отредактировать адрес участка)?
Andru1968 вне форума  
 
Непрочитано 10.10.2011, 13:57
1 | #68
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Прекрасно работает и без MicrosoftOffice
На 32-разрядных системах.
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
baza.mdb можно использовать только локально,
Необязательно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.10.2011, 13:58
#69
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Или здесь может произойти сбой
Точно произойдет. Да и когда данных будет более-менее приличное количество, "загнется" ваш "сервер", даже на гигабитной сети.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 10.10.2011, 16:38
#70
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Точно произойдет. Да и когда данных будет более-менее приличное количество, "загнется" ваш "сервер", даже на гигабитной сети.
Следовательно стоит воспользоваться советом ShaggyDoc и отказаться от baza.mdb.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Я лично предпочел бы Firebird, у которого есть "emedded" вариант.
Andru1968 вне форума  
 
Непрочитано 10.10.2011, 17:19
#71
ShaggyDoc

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


Цитата:
Или здесь может произойти сбой, когда один пользователь просматривает в диалоговом окне строку из базы, а другой пытается в это же время изменить эту же строку (например отредактировать адрес участка)?
Это зависит от программы, которой редактируют базу. Чтобы сбоев не было, программа должна выполнять блокировки, ставить "семафоры" и т.п. Это довольно сложное дело. Некоторые программы просто тупо блокируют весь файл.

При использовании современных средств разработки и правильных компонентов доступа к данным многие действия выполняются автоматически. Но всем этим надо уметь пользоваться. Кроме того, такие базы на файловом сервере полностью считываются в память компьютера и передаются по сети. Это обязательно, в определенный момент приведет к снижению производительности.

Цитата:
стоит воспользоваться советом ShaggyDoc
Стоит воспользоваться другим моим советом из #15 - нанять специалиста. Клиент-серверное приложение тоже с наскока не сделаешь.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 11.10.2011, 07:53
#72
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Стоит воспользоваться другим моим советом из #15 - нанять специалиста.
Специалиста по БД или по LISP? И где их взять?

Цитата:
Сообщение от Дима_ Посмотреть сообщение
Точно произойдет. Да и когда данных будет более-менее приличное количество, "загнется" ваш "сервер", даже на гигабитной сети.
На сколько я знаю специфику работы с GEO-пакетом. Большую часть времени пользователи GEO-пакета в своей работе используют 90% программ, которые в процессе своей работы не обращаются к БД. Остальные 10% используются когда отрисовывают границы участка, в этот момент и появляется строка в БД, редактируют ее чаще сразу же, если забыли, что-то внести, в остальное время ее используют только для просмотра данных о том или ином участке. Когда изготавливают какие-нибудь документы из БД в них вставляется определенная информация. например, адрес участка, владелец и т.д.

Последний раз редактировалось Andru1968, 11.10.2011 в 08:17.
Andru1968 вне форума  
 
Непрочитано 11.10.2011, 08:43
#73
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Если файл выложен в общей доступ - то он блокируется для записи (для всех остальных), во время открытия (на запись) любым пользователем, то есть либо один открыл - остальные покорно ждут, либо постоянно открывай\закрывай (что в сетевой работе означает - скопируй весь файл по сети туда-обратно), причем в промежутке между чтением и записью все опять ждут - иначе конфликт (по простому - записи теряться будут) - короче многопользовательская работа с таким подходом не прокатит - используйте предназначенную для этого БД.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 11.10.2011, 11:35
#74
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
короче многопользовательская работа с таким подходом не прокатит - используйте предназначенную для этого БД.
Какую?
Andru1968 вне форума  
 
Непрочитано 11.10.2011, 12:03
#75
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Вам уже раз 5 писали - mysql, firebird, mssql...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 11.10.2011, 12:22
#76
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
mysql, firebird, mssql...
Все это темный лес для меня. Если с LISP я более менее дружу, то с БД никак. Проще говоря нужна готовая БД, состоящая из двух таблиц максимум, одна таблица называется, например, GOROD, другая RAYON, чтобы туда можно было воткнуть ту информацию, которая уже имеется в формате *.dbf

Последний раз редактировалось Andru1968, 11.10.2011 в 12:29.
Andru1968 вне форума  
 
Непрочитано 11.10.2011, 12:58
#77
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


А чем Вам поможет "готовая" БД - к ней еще запросы надо оформить, потом еще их в код впендюрить - тут боюсь наскоком не проскочит - учите SQL (диалект не сложный, литературы полно).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 11.10.2011, 13:11
#78
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
тут боюсь наскоком не проскочит - учите SQL
Ниже приведу строчки из кода где я использовал SQL-запросы, который у меня работает с baza.mdb на локальной машине.

Код:
[Выделить все]
  (setq SQLStatement (strcat "SELECT id, zona_n, mas_n, kvar_n, uch_n, ned1_n, ned2_n FROM GLAG WHERE zona_n= "(rtos zona_n 2 0)" and mas_n= "(rtos mas_n 2 0)" and kvar_n= "(rtos kvar_n 2 0)" and uch_n= "(rtos uch_n 2 0)" and ned1_n= "(rtos ned1_n 2 0)" and ned2_n= "(rtos ned2_n 2 0)""))
      (if (setq Result (ADOLISP_DoSQL ConnectionObject SQLStatement))
	(progn
	  (setq SQLFetch (cadr Result))
        ); end progn
        (progn
	  (prompt "\nПотерпел неудачу!")
	  (ADOLISP_ErrorPrinter)
        ); end progn
      ); end if
      (if (not SQLFetch)
	(progn
	  (alert "Строка в базе не найдена")
	  (setq ase_errno nil)
	); end progn
	(progn
	  (setq SQLId (car SQLFetch))
	  (setq SQLStatement (strcat "DELETE FROM GLAG WHERE id = "(rtos SQLId 2 0)""))
Как будут выглядеть эти SQL-запросы, если для создания БД использовать firebird, а не Access? Что как-то иначе?

Последний раз редактировалось Andru1968, 11.10.2011 в 13:21.
Andru1968 вне форума  
 
Непрочитано 11.10.2011, 13:50
#79
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Так-же, осталось изучить инструкция create и установить СУБД.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 11.10.2011, 14:32
#80
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от Дима_ Посмотреть сообщение
осталось изучить инструкция create
это еще что такое
Andru1968 вне форума  
 
Непрочитано 11.10.2011, 15:23
#81
Кулик Алексей aka kpblc
Moderator

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


http://www.google.com/search?client=...q=sql%20create
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.10.2011, 16:40
#82
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Я тоже так могу
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
http://www.google.com/search?client=...q=sql%20create
но это не о чем.

Мне нужна БД, которую во-первых можно посмотреть, типа запустить Access, открыть файл baza.mdb, открыть таблицу glag и увидеть в столбце "adr_or" "ул. Пушкина, дом 50" и все. Во-вторых в Lisp код вставить SQL-запрос: SELECT id FROM GLAG, INSERT INTO GLAG, UPDATE GLAG SET n_zd = '"n_zd"' WHERE id, DELETE FROM GLAG WHERE id и все.

Зачем все эти CREATE TABLE,CREATE VIEW и т.д, если Access позволяет создать БД в два приема, без всяких CREATE. Т.е. нужна программа для создания многопользовательской БД типа Access.
Andru1968 вне форума  
 
Непрочитано 11.10.2011, 17:18
#83
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Offtop: Все...
Ахтунг...
Я сдаюсь...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 11.10.2011, 20:31
#84
ShaggyDoc

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


Цитата:
Зачем все эти CREATE TABLE,CREATE VIEW и т.д, если Access позволяет создать БД в два приема, без всяких CREATE. Т.е. нужна программа для создания многопользовательской БД типа Access.
Программа MS Accsess использует именно эти инструкции языка SQL, когда пользователь нажимает какую-то кнопку, например "Создать таблицу". В своей программе это же самое придется записать своими холеными ручками. Можно и MS Access использовать как интструмент для первичного создания базы данных и таблиц, но для дальнейшей работы надо писать свою программу.

MS Access создает в БД свои дополительные таблицы для хранения информации о самой БД (отчеты, формы и т.п.). Эти даннае недоступны другим программам (во всяком случае они недокуменированы).

Присоединяютсь к Дима_ :
Цитата:
Все...Ахтунг...Я сдаюсь...
Если хочешь чего-то достичь - начни с изучения документации. Хотя бы к самой Access. И "прибегай через год", как говорил пес Шарик из Простоквашино.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 12.10.2011, 08:19
#85
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Программа MS Accsess использует именно эти инструкции языка SQL, когда пользователь нажимает какую-то кнопку, например "Создать таблицу".
Это я прекрасно понимаю.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
В своей программе это же самое придется записать своими холеными ручками.
Получается, что кроме Access, все остальные mysql, firebird, mssql ... работают только ручками.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Если хочешь чего-то достичь - начни с изучения документации. Хотя бы к самой Access. И "прибегай через год",
На это уйдут годы. А времени в обрез.
Andru1968 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ObjectARX. Расчленение и удаление proxy-объектов Profan Готовые программы 293 08.04.2024 09:37
Разделение работы AutoCAD | AutoCAD Mechanical PVal Вертикальные решения на базе AutoCAD 3 23.03.2012 10:16
AutoCAD Architecture 2009 стоит ли.. mey Вертикальные решения на базе AutoCAD 25 19.04.2009 19:20
файл из AutoCAD 2004 сохранить в формат для AutoCAD R14 acad_newbie AutoCAD 12 13.10.2008 13:03
Уже работаю в AutoCAD 2006, но нужна книжка чтобы знать все тонкости работы с 2D графикой. Unt0nich Поиск литературы, чертежей, моделей и прочих материалов 17 06.05.2008 17:58