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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > SQL & ACAD

SQL & ACAD

Ответ
Поиск в этой теме
Непрочитано 23.04.2007, 18:45 #1
SQL & ACAD
Serge_BN
 
инженер
 
Оренбург
Регистрация: 18.04.2007
Сообщений: 71

Кто-нибудь в ACAD с базами данных вообще и в частности с SQL(MySQL) серверами работает?
Есть проблема. Создал источник данных ODBC к MySQL. Создал источник данных в ACAD. Приконнектился к базе данных. Таблицы вижу. А при обращении к любой таблице выскакивает ошибка Code 09000.
Может кто подскажет в чем тут дело?
Просмотров: 4207
 
Непрочитано 23.04.2007, 18:55
#2
RomaV


 
Регистрация: 21.03.2007
Санкт-Петербург
Сообщений: 2,703


Третий раз за 2 дня натыкаюсь на упоминание связки БД+КАД. Интересно, надо поковырятся. Когда то программировал на SQL, но на данный момент извини не помогу. Но люди, зающие здесь должны быть.
RomaV вне форума  
 
Автор темы   Непрочитано 23.04.2007, 19:07
#3
Serge_BN

инженер
 
Регистрация: 18.04.2007
Оренбург
Сообщений: 71


Это довольно актуально. Особенно при вычерчивании электрики, сантехники. Где много наименований однотипных элементов.
Serge_BN вне форума  
 
Непрочитано 24.04.2007, 10:07
#4
Кулик Алексей aka kpblc
Moderator

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


Может, проблема в том sql-запросе, который ты запускаешь на выполнение? Он в "штатном" режиме выполняется?
А также причина может скрыться в методе работы с БД. По идее, если идти через ADO, такой проблемы не возникает. Работая через ODBC, вроде как ты захватываешь БД в монопольном режиме. И вторая попытка подключения может выдать такую ошибку.
Для работы через ADO посмотри http://acad.fleming-group.com/ - у них отличная библиотека для работы через ADO с базами данных (сам проверял на Access, MS SQL; правда, с учетом особенностей реализации SQL)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.05.2007, 17:30
#5
Serge_BN

инженер
 
Регистрация: 18.04.2007
Оренбург
Сообщений: 71


Запрос выполняется в "штатном" режиме. Причем БД я вижу. Вижу таблицы, которые есть в базе данных (их имена). Но, когда я нажимаю на любую таблицу, выдается ошибка. Я даже не строю ни каких SQL-запросов.
Пока ничего не помогает. Воспользоваться ADO пока не смог.
Serge_BN вне форума  
 
Непрочитано 14.05.2007, 18:11
#6
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Serge_BN
Запрос выполняется в "штатном" режиме. Причем БД я вижу. Вижу таблицы, которые есть в базе данных (их имена). Но, когда я нажимаю на любую таблицу, выдается ошибка. Я даже не строю ни каких SQL-запросов.
Пока ничего не помогает. Воспользоваться ADO пока не смог.
Я тут немного экспериментировал с ADODB

Так можно заполнить таблицу, измени поля и название
таблицы на свои

Open an Access file you need and create there table DRAWING_PROPERTIES
with following field names REVISION_DATE, FOLDER, DRAWING, LOGINNAME
all of the fields need to define as text values
Close Access
Open drawing to write data into this table
Run lisp

Hth

Fatty

~'J'~
Код:
[Выделить все]
;	Fatty T.O.H 2006
;	local function to build SQL-substring	;

(defun sql-parse-list (rowlist)
  (vl-princ-to-string
    (append
      (mapcar (function	(lambda	(x)
			  (vl-string-subst x x (strcat "'" x "'" ", "))
			)
	      )
	      (reverse (cdr (reverse rowlist)))
      )
      (list (vl-string-subst
	      (last rowlist)
	      (last rowlist)
	      (strcat "'" (last rowlist) "'")
	    )
      )
    )
  )
)


;			main part			;

(defun C:LOGA (/	 ADOcn	   ADOrst    DBname    
	       Fieldvalues	   RevDate   RowData   SQLstr
	      )
  
  (vl-load-com)

  (setq	RevDate	(rtos (getvar "cdate") 2 6)
	RevDate	(strcat
		  (substr RevDate 5 2)
		  "/"
		  (substr RevDate 7 2)
		  "/"
		  (substr RevDate 1 4)
		  ","
		  (substr RevDate 10 2)
		  ":"
		  (substr RevDate 12 2)
		)
  )

  (setq	RowData	(list RevDate
		      (getvar "dwgprefix")
		      (getvar "dwgname")
		      (getvar "loginname")
		)
  )

  (setq FieldValues (sql-parse-list RowData))
  (setq	DBname (findfile
		 (getfiled "Select an Access File"
			   (getvar "dwgprefix")
			   "mdb"
			   8
		 )
	       )
  )
  (setq ADOcn (vlax-create-object "ADODB.Connection"))
  (setq ADOrst (vlax-create-object "ADODB.Recordset"))
  (vlax-invoke-method
    ADOcn
    "Open"
    (strcat
      "Driver={Microsoft Access Driver (*.mdb)}; DBQ="
      DBname
    )
    T
    T
    T
  )

  (setq	SQLstr
	 (strcat
	   " INSERT INTO DRAWING_PROPERTIES
  (REVISION_DATE, FOLDER, DRAWING, LOGINNAME)
  VALUES " FieldValues
	 )
  )

  (vl-catch-all-apply
    (function (lambda ()
		(vlax-invoke-method
		  ADOrst "Open"	SQLstr ADOcn -1	3 1)
	      )
    )
  )

  (vlax-invoke-method ADOcn "Close")
  (mapcar (function (lambda (x)
		      (vl-catch-all-apply
			(function (lambda ()
				    (progn
				      (vlax-release-object x)
				      (setq x nil)
				    )
				  )
			)
		      )
		    )
	  )
	  (list ADOrst ADOcn)
  )
  (gc)
  (princ)
)
(prompt "\n===========================\n")
(prompt "\n	Type LOGA to execute ...   ")
(prompt "\n===========================\n")
(princ)
; TesT : (C:LOGA)
А так можно прочитать таблицу

Код:
[Выделить все]
(defun ARD (/ ADOcn ADOrst DBname RowData SQLstr tblName)
  (vl-load-com)

  (setq
    DBname
	   (getfiled "Select an Access Database File"
		     (getvar "dwgprefix")
		     "mdb"
		     4
	   )

    ADOcn
	   (vlax-create-object "ADODB.Connection")
    ADOrst
	   (vlax-create-object "ADODB.Recordset")
  )
  (vlax-invoke-method
    ADOcn
    "Open"
    (strcat "Driver={Microsoft Access Driver (*.mdb)}; DBQ="
	    DBname
    )
    T
    T
    T
  )
  (setq tblName (getstring T "\nEnter name of the data table :"))
  (setq	SQLstrRead (strcat
	 " SELECT * FROM " tblName ";")
  )
  (vlax-invoke-method ADOrst "Open" SQLstrRead ADOcn -1 3 1)
  (setq RowData (vlax-invoke-method ADOrst "GetRows" T))
  (setq	TableData
	 (apply
	   'mapcar
	   (cons
	     'list
	     (mapcar
	       (function
		 (lambda (x)
		   (mapcar (function (lambda (y)
				       (vlax-variant-value y)
				     )
			   )
			   x
		   )
		 )
	       )
	       (vlax-safearray->list (vlax-variant-value RowData))
	     )
	   )
	 )
  )
  (vlax-invoke-method ADOrst "Close")
  (vlax-invoke-method ADOcn "Close")
  (mapcar
    (function
      (lambda (x)
	(vl-catch-all-apply
	  (function
	    (lambda ()
	      (progn
		(vlax-release-object x)
		(setq x nil)
	      )
	    )
	  )
	)
      )
    )
    (list ADOrst ADOcn)
  )
  (gc)
  TableData
)

; TesT :
(defun C:test()
(setq data (ard))
(princ data)
  (princ)
  )
fixo вне форума  
 
Автор темы   Непрочитано 19.05.2007, 16:58
#7
Serge_BN

инженер
 
Регистрация: 18.04.2007
Оренбург
Сообщений: 71


Код:
[Выделить все]
 (setq FieldValues (sql-parse-list RowData))
  (setq   DBname (findfile
       (getfiled "Select an Access File"
            (getvar "dwgprefix")
            "mdb"
            8
       )
          )
  )
  (setq ADOcn (vlax-create-object "ADODB.Connection"))
  (setq ADOrst (vlax-create-object "ADODB.Recordset"))
  (vlax-invoke-method
    ADOcn
    "Open"
    (strcat
      "Driver={[u]Microsoft Access Driver (*.mdb)[/u]}; DBQ="
      DBname
    )
    T
    T
    T
  )

[/code}

Сие означает что используется Microsoft Access. Если у вас имеется лицензия на право использования данного программного продукта, т.е . вы заплатили N$ некоему Билли, тогда юзайте на здоровье и на процветание этого Билли.
У меня [u]сервер[/u] MySQL либо PostgreSQL, либо FirebirdSQL и это все крутиться по Unix. Для того чтобы достучаться до сервера я устанавливаю ODBC драйвер на виндовой машине. Далее, создаю источник данных ODBC. По заявлению того самого Билли все источники данных ODBC равноправны и должны обеспечивать доступ к серверам баз данных где бы они (базы данных) ни находились (хоть в африке). Но в результате с локальным MS Access я могу работать, а с другими источниками я не могу работать. Или я чего-то не понимаю, или это западло со стороны того, кому мы платим (Билли & C и Autodesck).
Serge_BN вне форума  
 
Автор темы   Непрочитано 19.05.2007, 17:00
#8
Serge_BN

инженер
 
Регистрация: 18.04.2007
Оренбург
Сообщений: 71


За код спасибо.
Serge_BN вне форума  
 
Непрочитано 19.05.2007, 18:46
#9
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Попробуй отключить FireWall
будет вручную работать?

~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 19.05.2007, 19:35
#10
Serge_BN

инженер
 
Регистрация: 18.04.2007
Оренбург
Сообщений: 71


FireWall здесь совсем ни при чем. Я же не в Африку стучусь. В локальной сети работаю. И сервер мне по локалке доступен.
В других прогах работает. А в ACADе не хочет.
При проверке подключения и АКАД и ОДБС дают ОК!
Serge_BN вне форума  
 
Непрочитано 19.05.2007, 23:49
#11
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Serge_BN
FireWall здесь совсем ни при чем. Я же не в Африку стучусь. В локальной сети работаю. И сервер мне по локалке доступен.
В других прогах работает. А в ACADе не хочет.
При проверке подключения и АКАД и ОДБС дают ОК!
Какая строка подключения, попробуй заменить
в моем коде (Provider, Driver, etc.)
Я проверить все равно не смогу
Можно попытаться поискать синтаксис здесь
www.connectionstrings.com, но не уверен что
там есть такая экзотика

~'J'~
fixo вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > SQL & ACAD

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск