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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Формирование отчета в Acess в виде таблице.

Формирование отчета в Acess в виде таблице.

Ответ
Поиск в этой теме
Непрочитано 04.02.2005, 17:14
Формирование отчета в Acess в виде таблице.
Mikhail
 
инженер-технолог (ГИП)
 
Санкт-Петербург
Регистрация: 11.09.2003
Сообщений: 1,144

Добрый день.
Такая проблемма.
Из Автокада делаю выборку аттрибутов в Эксель (в Acess почему то не хочет, глючно что то или Офис или Кад), потом импортирую их в Acess. Там запрос и по запросу пытаюсь создать отчет в виде спецификации, т.е. табличный и с колонтитулами.
Таблицу получилось сделать когда каждой ячейки с данными присвоил значение ТИПА ГРАНИЦЫ- СПЛОШНАЯ, тогда эти ячейки обводились и получалась таблица. Но если данные не влезают в одну строчку, то получается ерунда типа того, что или весь текст не влезает в ячейку или если перенос включить (РАСШИРЕНИЕ - ДА), то тогда некорректно изображаются остальные ячейки этой строки. Они не увеличиваются в размере и обводятся по узкому контуру, что не очень красиво.(картинка)
[ATTACH]1107526600.jpg[/ATTACH]
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Просмотров: 18538
 
Автор темы   Непрочитано 10.02.2005, 12:50
#21
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


По Аксесу просто та же ошибка и осталась даже при подключении Reference но там у меня только 2.7 версия. Думаю особой разницы нет...
[ATTACH]1108029052.jpg[/ATTACH]
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 10.02.2005, 13:16
#22
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Внимательнее!!!!
нужно "Microsoft ActiveX Data Objects 2.8 Library"
(без Recordset )
а не "Microsoft ActiveX Data Objects Recordset ....."

PS. Обнаружил в своем коде ошибочку... :cry: исправлю
vk вне форума  
 
Непрочитано 10.02.2005, 13:30
#23
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Положил исправленную версию (адрес тот же)
vk вне форума  
 
Автор темы   Непрочитано 10.02.2005, 14:23
#24
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


>vk Три семерки это к удачи))) Срочно в казино
Спасибо.
p.s. а что это никому больше не интересно?
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 10.02.2005, 16:08
#25
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Да не игрок я...

Ну радует что прога заработала....
Следующий вопрос наверно будет про запросы, типа как сгруппировать атрибуты, когда у блока их два и более :wink:

PS а остальные смотрят, что из этого получится
vk вне форума  
 
Автор темы   Непрочитано 11.02.2005, 10:27
#26
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


так вот что я тут надумал... Можно конечно потом данную выборку в Аксесе групировать, но вот все таки я упорно гну линию, что мне нравится как офромлена выборка в АКАДе. Чем нравится:
- При выборе какие аттрибуты выбирать появляются ВСЕ возможные данные которые можно выбрать (т.е. динамически меняется от количества аттрибутов в блоке)
-можно по разному расположить таблицу. Мне приятнее, да и вроде лучше, когда с одним аттрибутом связана одна строчка в которой все его данные, а не так что данные в столбик у одного аттрибута идут.
-ну и "чисто понятные и конкретный" интерфейс для меня

А в программе выборки аттрибутов просто не знаю как это сделать по идее можно все сделать одной кнопокой если ее и программу правильно написать.
В общем какие идеи... Допустим для упрощения можно принять, что тип блока всегда один и тот же (для разных типов разнная программа) и тогда можно прописать точно столбцы которые там будут и которые надо заполнить- это касается в основном аттрибутов.
Располагать все таки наверное в строчку лучше было бы. Думаю это не проблемма просто массив данных по строке раскидать в цикле, я так понимаю.
А можно сделать чтобы таблица создавалась уже в макросе извлечения аттрибутов? Просто чтобы столбцы (их количество и названия) формировались по результату выделения блока (т.е. считывались бы допустим все параметры блока и для каждого параметра формировался бы свой столбец с аналогичным названием).
В общем это пока то что пришло днем и вечером в мою больную голову
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 11.02.2005, 12:00
#27
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Динамика - это не для простых программулек. Возможно, придется что то свое писать или искать подходящий контрол. :roll:
Цитата:
Сообщение от Mikhail
когда с одним аттрибутом связана одна строчка в которой все его данные, а не так что данные в столбик у одного аттрибута идут.
Возможно имеется в виду блок и все связанные с ним атрибуты

Цитата:
Сообщение от Mikhail
Допустим для упрощения можно принять, что тип блока всегда один и тот же (для разных типов разнная программа) и тогда можно прописать точно столбцы которые там будут и которые надо заполнить- это касается в основном аттрибутов.
Да можно, только не приведет ли оно к излишним сложносям. Сейчас структура позволит записать любое количество атрибутов в одну таблицу и при том используя один макрос. В принципе, какая разница, сколько параметров будет экспортироваться? ИМХО никакой. Потому как лишние можно просто не брать во внимание. Порядок же следования параметров не имеет совершенно никакого значения (ибо таблица является всего лишь местом хранения данных, но никак не средствои их отображения).
Да и программки однотипные будут плодиться бестолково... Мне кажется, это не есть гуд.
Цитата:
Сообщение от Mikhail
А можно сделать чтобы таблица создавалась уже в макросе извлечения аттрибутов? Просто чтобы столбцы (их количество и названия) формировались по результату выделения блока (т.е. считывались бы допустим все параметры блока и для каждого параметра формировался бы свой столбец с аналогичным названием).
Гм.... а вот ситуевина: сначала выбран блок с одним атрибутом, записан. Усе пучком. Потом выбираем блок с тремя атрибутами и....? Добавлять в таблицу столбцы? Создавать новую таблицу? Пока не представляю как удобнее, но кажется что ни так ни эдак не правильно (имхо).
vk вне форума  
 
Непрочитано 11.02.2005, 13:10
#28
Кулик Алексей aka kpblc
Moderator

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


Там же в чистом Access, кажется, можно программно модифицировать таблицы (добавлять / удалять столбцы)? Как - не спрашивайте, все едино не помню
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2005, 13:41
#29
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Проблема не втом чтоб добавить или удалить столбцы - это не сложно. А в том, КАК их потом обработать. Логичнее всего иметь универсальную программку, чтоб получить табличку. А отчет всегда можно сделать на основе запроса к таблице. Притом, запрос может быть встроен непосредственно в отчет.
vk вне форума  
 
Автор темы   Непрочитано 11.02.2005, 14:03
#30
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


to vk да я там опечатался
"Возможно имеется в виду блок и все связанные с ним атрибуты
потом по работе программы... почему то не хочет создавать таблицу в уже существующей БД (картинка)

по поводу добавления/удаления столбцов... У меня нпример вот такая потребность: есть схема(разводка, еще что то автокадовское) с блоками в аттрибутах которых есть инфа, которую надо использовать в спецификации (в Аксесе). Так как спецификация в принципе стандартная, то количество столбцов всегда будет одинаковое. Таким образом в макросе на кнопку повесить выбрать блоки таких то имен... потом запустить макрос VBA который используя выбранные блоки на их основе создаст таблицу1 со всеми аттрибутами которые есть (их будет одинаковое кол-во по определению блоков). потом для другой спецификации выбирается другой набор блоков и записывается в Таблицу2. и т.д.
Если в схеме что то изменилось, то просто делается новая выборка в таблицу, а старая таблица удаляется. Главное чтобы сама база данных с отчетами и запросами не стиралась. Вот такая стратегия.
[ATTACH]1108119795.jpg[/ATTACH]
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 11.02.2005, 15:30
#31
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Бегу впереди паровоза... :twisted: две лишние строки...
Должно остаться так (если опять ничего не напутал)
Код:
[Выделить все]
  ElseIf resp = vbCancel Then CreateDatabase = False
  Else
    CreateDatabase = True
  End If
  Exit Function
Да, перед созданием новой таблицы, старую надо переименовать или удалить.
vk вне форума  
 
Непрочитано 11.02.2005, 15:39
#32
Lenich

Опер дир
 
Регистрация: 28.04.2004
Москва
Сообщений: 291


Mikhail,
Цитата:
p.s. а что это никому больше не интересно?
Мне интересно, только я ничего понять не могу

А говорить о том, где я это у себя смогу применить, вообще без понятия.
Lenich вне форума  
 
Автор темы   Непрочитано 11.02.2005, 16:13
#33
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


to vk
вроде сейчас работает и создает и дополняет, но вопрос про Альтернативное расположение информации остается Предлагаю на этом и закончить трудовую неделю Понедельник пятницы мудренее.
p.s. Все за город и предаватся прелестям зимы
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 11.02.2005, 16:39
#34
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Как? уже пятница???? Абалдеть!!!!

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

Всем приятных выходных
vk вне форума  
 
Непрочитано 11.02.2005, 21:50
#35
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Небольшое складбище сканированой в PDF литературы в том числе и по Access. За ценность и информативность ничего сказать не могу....
vk вне форума  
 
Непрочитано 13.02.2005, 21:48
#36
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Набросал приблизительно... без проверок и обработки ошибок.
Работает самостоятельно без вызова внешних функций.
Код:
[Выделить все]
Option Compare Text

' для ссылок блоков с атрибутами
'
' блоки могут иметь одинаковые атрибуты или не иметь их вовсе.
' допускается выбор блоков с разным количеством атрибутов,
' однако первым должен быть выбран блок у которого имеются
' все атрибуты (имеются в виду имена тэгов).
'
' запись всегда в новую таблицу

' требуется подключение рефренса
' "Microsoft ActiveX Data Objects 2.8 Library"
Sub SelAndWriteBlockAttrib()
  Dim fileName As String
  fileName = "C:\MyNewDB1.mdb" ' файл БД (должен существовать)
  Dim tblName As String
  tblName = "MyBlockAttrTable" ' имя таблицы (постоянная часть)
  
  Dim i, j
  ' удалить старый SelectionSet
  For Each i In ThisDrawing.SelectionSets
    If i.Name = "MySSet" Then i.Delete: Exit For
  Next
  
  ' создать SelectionSet и выбрать примитивы
  Dim ssetObj As AcadSelectionSet
  Set ssetObj = ThisDrawing.SelectionSets.Add("MySSet")
  Dim gpCode(0) As Integer
  Dim dataValue(0) As Variant
  gpCode(0) = 0
  dataValue(0) = "Insert"
  Dim groupCode As Variant, dataCode As Variant
  groupCode = gpCode
  dataCode = dataValue
  ThisDrawing.Utility.Prompt "Выбери БЛОКИ С ОДИНАКОВЫМИ ТЭГАМИ АТРИБУТОВ для экспорта в БД >"
  ssetObj.SelectOnScreen groupCode, dataCode
  
  If ssetObj.Count > 0 Then ' при наличии выбранных...
    ' открываем подключение к БД
    Dim conn As New ADODB.Connection
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fileName
    
    ' подбор уникального имени таблицы
    Dim rstSchema As ADODB.Recordset
    Dim suff As Integer ' счетчик, суффикс имени таблицы
    suff = 0
    Set rstSchema = conn.OpenSchema(adSchemaTables)
    Do
      suff = suff + 1 ' новый суффикс
      rstSchema.MoveFirst
      rstSchema.Find "TABLE_NAME='" & tblName & suff & "'"
    Loop Until rstSchema.EOF ' повторяем, до тех пор пока не пролетаем с именем таблицы
    rstSchema.Close
    Set rstSchema = Nothing
    
    ' создание таблицы
    ' (в обязательном порядке создаются уникальный ключ и поле для имени блока)
    Dim sqlStr As String
    sqlStr = "CREATE TABLE " & tblName & suff & " (bName CHAR "
    ' тэги атрибутов первого выбранного блока будут являться именами полей таблицы
    For Each i In ssetObj(0).GetAttributes
      sqlStr = sqlStr & ", " & i.TagString & " CHAR "
    Next
    sqlStr = sqlStr & ", recID INTEGER NOT NULL CONSTRAINT key1 PRIMARY KEY );"
    conn.Execute (sqlStr)
  
    ' запись данных в таблицу
    Dim rstTbl As New ADODB.Recordset
    With rstTbl
      ' открываем рекордсет как таблицу
      .Open tblName & suff, conn, adOpenKeyset, adLockPessimistic, adCmdTable
      Dim rID As Long
      rID = 0 ' счетчик записей
      For Each i In ssetObj
        If i.HasAttributes = True Then ' блоки без атрибутов игнорируем
          rID = rID + 1
          .AddNew
          .Fields("recID") = rID
          .Fields("bName") = i.Name
          For Each j In i.GetAttributes ' для каждого атрибута
            rstTbl.Fields(j.TagString) = j.TextString
          Next
          .Update
        End If
      Next
      .Close ' готово, закрываем рекордсет
    End With
    Set rstTbl = Nothing
    conn.Close ' закрываем подключение к БД
    Set conn = Nothing
  End If
  
  Set i = Nothing
  Set j = Nothing
  Set ssetObj = Nothing
End Sub
Честно говоря, мне такой способ хранения не нравится совершенно. Удобнее хранить данные (можно и весь чертеж при желании) в одной таблице и при необходимости выдергивать нужное при помощи запроса (имхо).
vk вне форума  
 
Автор темы   Непрочитано 14.02.2005, 10:22
#37
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


Цитата:
Сообщение от vk
Честно говоря, мне такой способ хранения не нравится совершенно. Удобнее хранить данные (можно и весь чертеж при желании) в одной таблице и при необходимости выдергивать нужное при помощи запроса (имхо).
Задумался над этим... Даже не знаю... по этому поводу у меня парочка вопросов.
Таблицу тогда в таком виде не сделать будет? Т.е. если разное количество аттрибутов, то они будут некорректно заполнятся в таблице? Или нет? Или надо вернутся к первому способу создания таблицы, т.е. аттрибуты в строчках? Но представление мне надо все равно в стобик, т.е. надо будет делать запрос которые будет создавать таблицу с "перевернутыми" в столбик аттрибутами. Такое возможно? (я на форуме по Аксесу вроде видел программу, но все таки засилие программ мне кажется может вызвать где то ошибку...)
И как на счет ресурсоемкости, т.е. большая таблица и к ней куча (штук 10) запросов, или просто штук 10 таблиц. Просто еще такая фишечка, что с этой базйой будут работать несколько человек проблемм с тем, что один будет делать отчет, а другой извлечет еще раз все аттрибуты и немного ему помешает, не будет?
Ксати по коду... ошибочку выдает (картинка)
з.ы. ActiveX у меня 2.7
[ATTACH]1108365747.jpg[/ATTACH]
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 14.02.2005, 13:06
#38
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


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

Цитата:
ActiveX у меня 2.7
На сайте мелкомягких давно лежит 2.8, впрочем, и в 2.7 не должно быть проблем.

Цитата:
с этой базйой будут работать несколько человек проблемм с тем, что один будет делать отчет, а другой извлечет еще раз все аттрибуты и немного ему помешает, не будет?
Если не перемудрить с блокировками - то не мешает. Изначально MDB многопользовательская среда.

Цитата:
т.е. надо будет делать запрос которые будет создавать таблицу с "перевернутыми" в столбик аттрибутами. Такое возможно? (я на форуме по Аксесу вроде видел программу, но все таки засилие программ мне кажется может вызвать где то ошибку...)
Программы конечно хорошо, но не всегда приемлемо. А в Аксесе есть конструктор запросов. Во многих случаях можно создать запрос не зная языка SQL (пользуясь в основном мышкой). Хотя, лучше изучить. Не такой уж он сложный, к тому же есть описания на русском. Да и далеко не все доступно на уровне мышководства.

Цитата:
И как на счет ресурсоемкости, т.е. большая таблица и к ней куча (штук 10) запросов, или просто штук 10 таблиц.
Мдя... Похоже то на то и выходит.....
Только запрос может жить внутри отчета. Это конечно не уменьшит килобайты, но не будет плодить обилие объектов.
В общем, надо поизучать возможности.....

PS надеюсь, что глобальная задача состоит не только в красивом оформлении спецификаций :wink:
vk вне форума  
 
Автор темы   Непрочитано 14.02.2005, 13:35
#39
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


Цитата:
Сообщение от vk
PS надеюсь, что глобальная задача состоит не только в красивом оформлении спецификаций :wink:
Задача как всегда глобальная... создание той единственной кнопочки при нажатии на которую ВСЕ БУДЕТ (ну или хотя бы по схеме сразу спецификация вывалится из принтера)
А по поводу значения переменной
Код:
[Выделить все]
Watch :   :   sqlStr : "CREATE TABLE MyBlockAttrTable4 (bName CHAR , ОБОЗНАЧЕНИЕ CHAR , НОМЕР CHAR , НАИМЕНОВАНИЕ_ПРИБОРА CHAR , ТИП CHAR , СРЕДА CHAR , ТЕМПЕРАТУРА CHAR , ДАВЛЕНИЕ CHAR , ДИАПОЗОН_ИЗМЕРЕНИЙ CHAR , ТИП_ПРИСОЕДИНЕНИЯ CHAR , ГАБАРИТЫ CHAR , ДИАПАЗОН_ТЕМПЕРАТУРО"
почему то тут кирилица не отобразилась...
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 14.02.2005, 14:55
#40
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Возможно дело как раз в кирилице (еще одно узкое место?). Попробуй в качестве теста тэги атрибутов латиницей сделать.
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Формирование отчета в Acess в виде таблице.