singlepost

Создание отчетов в Access программным путем (VB) << На главную или назад  

Всем привет! Подскажите, кто в курсе, пожалуйста!

Необходимо создать отчет в Access с помощью Visual Basic. Искал в Инете – путного описания методов так и не нашел.

Завтра прогу сдавать… %0

14 ответов в теме “Создание отчетов в Access программным путем (VB)”

  1. 14
    Леонид Максимов ответил:

    form.section(sectionid).height

  2. 13
    Павел Авдеев ответил:

    Тут разобрался. Сейчас дела обстоят вот так:

    For Each fld In rs.Fields

    ' Create new text box control and size to fit data.
    Set txtNew = CreateReportControl(rpt.Name, acTextBox, _
    acDetail, , fld.Name, lngLeft)
    txtNew.SizeToFit

    lngLeft = lngLeft + 1000
    Next

    Теперь другая проблема: Строки выводятся в отчет через очень большие промежутки. Как настроить отступ?

  3. 12
    Павел Авдеев ответил:

    Подскажите, кто знает, плз!!!
    Как сделать так, что бы данные в отчете отображались в табличной форме а не в столбец.

    У меня сейчас вот так, и данные в отчете отображаются в один столбец (((:

    For Each fld In rs.Fields

    ' Create new text box control and size to fit data.
    Set txtNew = CreateReportControl(rpt.Name, acTextBox, _
    acDetail, , fld.Name, lngLeft, lngTop + 200)
    txtNew.SizeToFit

    lngTop = lngTop + txtNew.Height + 25
    Next

  4. 11
    Павел Авдеев ответил:

    Имена таблиц я сохранял вот так:

    Dim rstCurr As DAO.Recordset
    Dim dbsCurr As Database
    Set dbsCurr = Access.CurrentDb
    Set rstCurr = dbsCurr.OpenRecordset("Список", dbOpenDynaset)
    rstCurr.AddNew
    rstCurr.Fields("Таблица").Value = TabName
    rstCurr.Update

    А связовал поле со списком с этой таблицей вот так:

    Public Sub ПолеСоСписком11_GotFocus()
    Forms!Форма1!ПолеСоСписком11.RowSourceType = "Table/Query"
    Forms!Форма1!ПолеСоСписком11.RowSource = "Список"
    End Sub

    Работает и так :) И этого достаточно. Спасибо за комментарии!

    С навигацие и добавлением/изменением/удалением данных в программе вроде все, закончил. Теперь осталось разобраться как делать отчеты. Буду изучать CreateReport…

  5. 10
    Леонид Максимов ответил:

    >> Теперь требуется каким-то образом вывести их в ComboBox'е. Видимо, надо изменить свойство RowSource. Как это правильно делается пока не нашел… Подскажите синтаксис, пожалуйста!

    во-первых, названия таблиц – во множественном поле, а название полей, как правило, в единственном. то есть таблица "Таблицы", а поле в ней – "Таблица".

    во-вторых, таблица без ключа вроде как и не таблица вовсе.

    в-третьих, строки в ключах не использовать – медленно сравнивается.

    в-четвертых, автоинкрементное поле в ключе не использовать

    и, собственно, ответ на ваш вопрос – вам не нужно изменять свойство RowSource, если вы его уже задали в конструкторе. после rstCurr.Update вам достаточно будет сказать Forms!Форма1!ПолеСоСписком11.Requery.

    ваш способ стоит больше.

    ЗЫ: странно, что вообще заработало:
    >> я сохраняю в табицу "Спмсок"
    >> Forms!Форма1!ПолеСоСписком11.RowSource = "Список"

  6. 9
    Павел Авдеев ответил:

    Так, здесь разобрался:

    Forms!Форма1!ПолеСоСписком11.RowSourceType = "Table/Query"
    Forms!Форма1!ПолеСоСписком11.RowSource = "Список"

    работает

  7. 8
    Павел Авдеев ответил:

    На данный момент ситуация такая: имена таблиц я сохраняю в табицу "Спмсок", которая имеет одно поле "Таблицы":

    Dim rstCurr As DAO.Recordset
    Dim dbsCurr As Database

    Set dbsCurr = Access.CurrentDb
    Set rstCurr = dbsCurr.OpenRecordset("Список", dbOpenDynaset)

    rstCurr.AddNew
    rstCurr.Fields("Таблицы").Value = TabName
    rstCurr.Update

    Теперь требуется каким-то образом вывести их в ComboBox'е. Видимо, надо изменить свойство RowSource. Как это правильно делается пока не нашел… Подскажите синтаксис, пожалуйста!

  8. 7
    Леонид Максимов ответил:

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

    я, правда, не понимаю, что означает "В поле со списком я сохраняю имена", поскольку у поля со списком нет такой возможности. список поля со списком может быть заполнен несколькими методами (см. справку по RowSourceType):

    1. Table/Query (Default)
    The data is from a table, query, or SQL statement specified by the RowSource setting.
    2. Value List
    The data is a list of items specified by the RowSource setting.
    3. Field List
    The data is a list of field names from a table, query, or SQL statement specified by the RowSource setting.
    4. User-defined RowSourceType function
    Microsoft Access calls the function repeatedly to get the information it needs.

    я не знаю, какой из вариантов ваш, но попробую угадать:
    1. Table/Query. данные в таблицах не теряются при перезагрузке акцесса, так что не подходит.
    2. Value List. добавление происходит редактированием свойства RowSource, так что вряд ли мог возникнуть вопрос по поводу сохранения между перезагрузками акцесса.
    3. FieldList. структура таблиц не меняется при перезагрузке акцесса, так что не подходит.
    4. User-defined RowSourceType function. очевидно, что если вы это осилили, то знаете, как это можно сохранить.

    итог:
    я неправильно понимаю понятие "сохраняю имена таблиц".

  9. 6
    Павел Авдеев ответил:

    Разобрался!
    Еще вопрос: В поле со списком я сохраняю имена таблиц, создаваемых программно. После перезагрузки акцесса список стирается. Подозреваю, что нужно использовать свойство ControlSource.
    Подскажите синтаксис, плз, если я прав!

  10. 5
    Леонид Максимов ответил:

    скорее всего в поле ПолеСоСписком11 содержится неверное имя.

    другой вариант – таблица была добавлена не через TableDefs текущего запущенного акцесса. в таком случае TableDefs.Refresh вам в помощь.

  11. 4
    Павел Авдеев ответил:

    тут пока такой вопрос, по другой теме:
    каким методом можно удалить существующую таблицу?

    Пробовал вот так:

    Dim ActAvto As String
    ActAvto = Forms!Форма1!ПолеСоСписком11.Value
    CurrentDb.TableDefs.Delete ActAvto

    грит "Элемент не обнаружен в данном семействе"

  12. 3
    Леонид Максимов ответил:

    я вернулся, время от времени проверяю комментарии. мне можно задавать вопросы.

  13. 2
    Павел Авдеев ответил:

    Очередное спасибо, Леонид! Щас будем взрывать мозг…

  14. 1
    Леонид Максимов ответил:

    смотрите в сторону метода CreateReport и читайте соответствующие разделы справки. там все просто.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.