Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009 - Страница 3
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

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

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

Имеются коды для AutoCAD R14, которые передают данные в БД, позволяют их редактировать и просматривать их. Для соединения с БД были использованы функции ASE. Как переделать эти коды для работы в AutoCAD 2009?
Просмотров: 22595
 
Непрочитано 28.09.2011, 11:43
#41
Дима_

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


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

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


Дима_, необязательно, мне кажется. Насколько я помню, конструкция типа 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,839


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

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


Дима_, значит, писать сложный запрос с вложениями 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,839


..... 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,839


Допустим у нас таблица 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,372


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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


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

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


Цитата:
Сообщение от 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,839


Цитата:
Сообщение от 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 вне форума  
Ответ
Вернуться   Форум 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