10029 / 2618 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
1

Делимся наработками

03.11.2009, 11:04. Показов 386316. Ответов 216
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в этой теме предлагаю выкладывать интересные наработки по акцессу...

зы. в дальнейшем на основе их можно будет создать темы "важное"

Добавлено через 45 секунд
ззы. флуд и спам в этой теме будет награжден красными карточками
17
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2009, 11:04
Ответы с готовыми решениями:

Для рубрики "Делимся наработками", добить БД поставка-сделка авто
День добрый, форумчане. Хочу довести до ума БД, чтобы добавить в раздел форума "Делимся...

Обсуждение поста #137 в теме "Делимся наработками". Программный модуль контроля ресурсов принтеров сети.
Сейчас тестовая страница на каждом принтере выдаёт эту информацию.

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

Кто занимался работой с timer поделитесь пожалуйста наработками интеренсыми
Например есть форма и на форме кнопка закрыть нажимая кнопку закрыть идет отсчет 10 9 8... и когда...

216
176 / 61 / 3
Регистрация: 17.11.2011
Сообщений: 318
09.10.2013, 21:14 41
Студворк — интернет-сервис помощи студентам
Как-то замучившись с вопросом "Чего бы это сделать в первую очередь?", накидал простенькую базу чтобы справиться с накопившимися делами. Получилось быстрее, чем искать подходящий сервис
Из плюшек:
- ведение нескольких проектов.
- расстановка дел по приоритетам.
- статусы задач (новое, в работе, выполнено).
- автоматическое вскрытие выполненных задач.
- подсветка наиболее важных задач.
- список пожеланий ("Хорошо бы было, если сделать...") с возможностью последующего их закрепления за конкретным проектом.
Вложения
Тип файла: zip accdb_ ProgrammingProects _out.zip (62.8 Кб, 1525 просмотров)
2
8767 / 5620 / 576
Регистрация: 27.03.2013
Сообщений: 19,064
29.12.2013, 20:55 42
Немного доработанный вариант + поиск к ранее выложенному примеру Делимся наработками
Не могу не поделиться
Вложения
Тип файла: rar Регионы Стран-03.rar (1,009.9 Кб, 1091 просмотров)
4
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
20.02.2014, 08:27 43
Backup баз данных с помощью командной строки WinRAR.
Хоть наработка и не относится напрямую к Access, но необходима часто.
Файл !DoBackup.bat:
XML
1
2
3
@Echo Off
@Echo Copy, please wait...
@"c:\program files\WinRar\WinRAR.exe" a -ep -u -dh -agYYYY-MM-DD_HH'mm'ss -ibck -m5 "%~dp0\.rar" @!FileList.txt
!FileList.txt (список полных путей копируемых файлов, если файл в пути не указан, копируются все файлы из папки):
XML
1
2
3
\\rc0\s01\DRZ\БД1
\\rc1\common$\VL1\БД2
\\rc3\RZ\!Упр\БД3\BD3.cl
Все файлы копируются в один файл с именем в формате YYYY-MM-DD_HH'mm'ss.rar (можно изменить) в папку где находятся файлы !DoBackup.bat и !FileList.txt.
Периодический запуск !DoBackup.bat организуйте в планировщике, либо другим способом.
4
740 / 84 / 7
Регистрация: 06.12.2009
Сообщений: 342
20.02.2014, 08:53 44
Аналог предыдщуего сообщения.
Бат-файл, который запускает, декомпилит и сжимает базу данных, а затем архивирует, файл нумерует в порядке очередности за день и ложит в папочку \history

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
chcp 1251 > nul 
chdir "D:\Develop\Source\"
"C:\Program Files\Microsoft Office 2007\Office14\MSACCESS.EXE" "D:\Develop\Source\C_sql.accdb" /decompile /cmd history
 
"C:\Program Files\Microsoft Office 2007\Office14\MSACCESS.EXE" "D:\Develop\Source\C_sql.accdb" /compact
 
set fn=CZ_%date:~6,4%.%date:~3,2%.%date:~0,2%
 
 set i=0
:next
   set /a i=i+1
   set fname=%fn%_%i%.rar
 if exist _history\%fname% goto next
 
chcp 866 > nul 
"D:\Program Files\WinRAR\WinRAR.exe" A _history\%fn%_%i%.rar C_sql.accdb
 
:end
В базе данных, на событие Open стартовой формы в самом начале вешаю код
Visual Basic
1
2
3
4
Private Sub Form_Open(Cancel As Integer)
  If Command = "history" Then Exit Sub
.....
End Sub
А на событие Load стартовой формы
Visual Basic
1
2
3
4
Private Sub Form_Load()
  If Command = "history" Then Application.Quit
.....
End Sub
Таким образом, при запуске батника программа открывается, декомпилится, сжимается и закрывается. И не выполняет лишних действий при старте.
Папка \history должна существовать в том же каталоге, где запускается батник.
6
51 / 2 / 0
Регистрация: 14.02.2014
Сообщений: 24
27.02.2014, 21:08 45
History - это имя bat - файла?
0
740 / 84 / 7
Регистрация: 06.12.2009
Сообщений: 342
27.02.2014, 23:49 46
History это имя папки, куда будет сохраняться архив. Папка должна быть в том же месте, где лежит батник. Имя батника значения не имеет.

Если вы про строку If Command = "history" Then .....
то history это аргумент командной строки, с которым была вызвана программа (смотрите в батнике третью строку - там передается аргумент /cmd history. Так вот это он и есть).
2
Заблокирован
02.05.2014, 08:48 47
Добрый день! На форуме часто вижу вопросы про перенос данных из Excel в Access или наоборот. Давно делал модуль для работы бухгалтерии в нашем учреждении. Который наглядно покажет возможность переноса данных из Excel в Access. Лишнее я удалил из кода.

Если не ошибаюсь в создании модуля принимал участие кто-то из пользователей форума.
Конкретно что-то было с вопросом по дате в Excel.
Извините, забыл имя, пусть простит.
Вложения
Тип файла: rar Пример переноса данных из Excel в Access.rar (48.3 Кб, 1491 просмотров)
1
3353 / 1772 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
03.05.2014, 14:03 48
inv.DS, что-то у меня ни с Shift ни просто VBA не открывается. Каким образом посмотреть внутренности?
P.S. Офис 2003.

Виноват, нашел. Достаточно форму закрыть и нажать Alt+F11.
0
72 / 46 / 9
Регистрация: 24.03.2014
Сообщений: 470
14.05.2014, 13:05 49
еще одно простое решение прикрепления файлов в аксе-2003 без дополнительных модулей:

В нужной таблице создаем поле типа MEMO, в него будет сохранятся путь к файлу.
На форме делаем две кнопки, первая кнопка запускает диалог выбора файла и сохраняет путь к нему в определенное поле на этой же форме (его скрываем):
вот код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub НазваниеКнопки_Click()
Dim MD
Set MD = Application.FileDialog(1) 
MD.AllowMultiSelect = False 
MD.Title = "Выбор файла" 
MD.Show
If MD.SelectedItems.Count > 0 Then 
XFileDial = MD.SelectedItems(1)
Else
XFileDial = Null
End If
Me.ИмяПоля = XFileDial ' Поле, куда запишется полный путь к выбранному файлу, в свойствах поля надо указать источником данных соответствующее поле MEMO в таблице.
Set MD = Nothing
End Sub
Код для кнопки запуска файла на основе данных из этого поля:
Visual Basic
1
2
3
Private Sub НазваниеКнопки_Click()
Shell "explorer.exe " & Me.ИмяПоля, vbNormalFocus
End Sub
2
72 / 46 / 9
Регистрация: 24.03.2014
Сообщений: 470
19.08.2014, 16:12 50
Код для удобного копирования записи в таблице:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim rstC As DAO.Recordset
Dim i As Long
Dim lngId As Long
 
    If Me.Dirty = True Then Me.Dirty = False
 
Set rstC = Me.RecordsetClone
    With Me.Recordset
        rstC.AddNew
        lngId = rstC.Fields(0)
            For i = 1 To rstC.Fields.Count - 1  ' - Первое поле счетчик, его не передаем
                rstC.Fields(i) = .Fields(i)
            Next i
        rstC.Update
        .Requery
        .FindLast "[id]=" & CStr(lngId) ' переходим на последнюю запись
    End With
Set rstC = Nothing
Код вешаем на кнопку в форме. Ограничение - источником формы должна быть таблица или запрос, основанный целиком на основе одной таблице.
0
72 / 46 / 9
Регистрация: 24.03.2014
Сообщений: 470
20.11.2014, 16:16 51
Экспорт в Excel данных из связанных таблиц:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dim xlApp As Object, xlBook As Object, xlSheet As Object
  Dim db As DAO.Database, rsd As DAO.Recordset, rse As DAO.Recordset
  Dim sq$, cs&, TmplFileName$
  Set db = CurrentDb
  sq = "SELECT ... FROM... WHERE... ORDER BY ..." ' выборка данных для первого рекордсета
  Set rsd = db.OpenRecordset(sq, dbOpenSnapshot)
  If rsd.EOF Then Exit Sub ' проверяем на отсутствие записей
  Set xlApp = CreateObject("Excel.Application")
  xlApp.Visible = True
  TmplFileName = CurrentProject.path & "\Dot\test1.xlt" ' здесь указываем путь к шаблону (задал относительно - так удобно при использовании базы на разных компах
  Set xlBook = xlApp.Workbooks.Add(TmplFileName)
  Set xlSheet = xlBook.Sheets(1)
  cs = 0
  Do Until rsd.EOF
    If cs > 0 Then Set xlSheet = xlBook.Sheets.Add(, xlBook.Worksheets(cs), , TmplFileName)
    cs = cs + 1
    xlSheet.Name = ' создаем название листа в формате, например, rsd!Name
    xlSheet.Cells(2, 1).Value = ' аналогично ваяем шапку на листе, если есть необходимость - у меня обычно есть
    sq = "SELECT...FROM ...WHERE ... cat_id = " & rsd!id & "" ' создаем второй рекордсет и склеиваем по нужному полю
    Set rse = db.OpenRecordset(sq, dbOpenSnapshot)
    xlSheet.Cells(8, 2).CopyFromRecordset rse ' заполняем листы
    rsd.MoveNext
  Loop
  Set xlSheet = Nothing: Set xlBook = Nothing: Set xlApp = Nothing
  Set rse = Nothing: Set rsd = Nothing: Set db = Nothing
Примечания:
шаблон создаем с одним листом, название ему даем "1". Сам код вешаем на кнопку, которой планируем запускать экспорт. Такую же схему можно реализовать в случае, если первым рекордсетом будет сохраненный запрос SQL, но в этом случае во втором рекордсете нужно будет обращаться к его полю чуть иначе: rsd.Fields("имя поля запроса")
0
Эксперт MS Access
26784 / 14463 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
13.05.2015, 13:55 52
Время от времени появляются темы по составлению оглавления из таблицы связей типа идПарент, идЗаголовка. В отличие от обычных рекурсивных спусков по "дереву", оглавление состоит из сжатых нумерованных списков, где нумерация пунктов это последовательные номера в подпункте, а не фактические номера узлов дерева. Например, из списка в таблице надо получить оглавление
Содержание таблицы:
идПарент идЗаголовок ИмяЗаголовка
0 1 Введение
0 2 Обозначения
0 3 Основные
0 4 Заключение
0 5 Список литературы
1 6 От автора
1 7 Актуальность
3 9 Анализ
3 10 Структура
5 13 Интернет
5 14 Бумажный
9 19 Первичный
9 20 Вторичный
10 37 Первая
10 38 Вторая

Требуемое оглавление: (вместо пробелов перед строкой выведены нижние дефисы, поскольку тэг [TABLE] удаляет начальные и конечные пробелы)
Оглавление
1. Введение
__1.1. От автора
__1.2. Актуальность.
2. Обозначения
3. Основные
__3.1. Анализ
____3.1.1. Первичный
____3.1.2. Вторичный
__3.2. Структура
____3.2.1. Первая
____3.2.2. Вторая
4. Заключение
5. Список литературы
__5.1. Интернет
__5.2. Бумажный

Решение этой задачи реализовано здесь Рекурсивный запрос: необходимо сделать содержание книги
4
Эксперт MS Access
7334 / 4475 / 288
Регистрация: 12.08.2011
Сообщений: 13,550
15.05.2015, 03:23 53
mobile, откуда такая жестокость, почему mdb нет? я тоже хочу посмотреть и не один я.
1
8767 / 5620 / 576
Регистрация: 27.03.2013
Сообщений: 19,064
15.05.2015, 06:47 54
Солидарен с - alvk!!!
0
Эксперт MS Access
26784 / 14463 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
15.05.2015, 08:14 55
Исправляюсь. Простите блаженного, бога ради
Вложения
Тип файла: rar Оглавление.rar (33.9 Кб, 557 просмотров)
2
450 / 238 / 14
Регистрация: 29.10.2014
Сообщений: 959
25.05.2015, 23:36 56
mobile показал, что информацию нескольких таблиц, объединенных соотношением один-ко-многим можно поместить в одну таблицу. Пользуюсь такой идеей, только отношения между записями этой таблицы выстраиваю не программно. Кроме понятия главная таблица-подчиненная ввожу понятие "главная" запись - "подчиненная" запись, при этом у каждой записи есть Уровень, который у главной записи всегда выше, чем у подчиненной, уровень которой произволен.
Это означает, что (по отношению к книге) книга может состоять из разделов, глав и статей, а может иметь и разделы, которые глав не имеют (одни статьи), а может состоять только из статей, но в таблицу поместится и библиотека (несколько разных изделий с описанием операций каждой детали далее по схеме) и выше.
Делимся наработками

Вся основная информация в Т101, все связи между записями в Т102, Уровень1 в записи всегда больше Уровня2, запись Т101, связанная с КодЭлемента1 и Уровнем1-главная, с КодЭлемента2-подчиненная. Естественно, в какой нибудь записи Т102 описанная подчиненная запись может считаться уже главной, а главная подчиненной. Но это с другими кодами. Указанное в начале абзаца соотношение между конкретными записями всегда сохраняется
Пользуюсь и традиционными связями
Делимся наработками

Вообще поля Уровень1 и 2 пока не применяю. Просто стараюсь не дать пользователю нарушать принцип старшинства уровня. Уровень1 предлагаю вводить пользователю из расчета мин необходимого, хотя его можно формировать и программно исходя из уровня входящих.
Изделия.rar
2
шапоклякистка 8-го дня
3675 / 2235 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
27.06.2015, 12:26 57
Функция по подмножеству для конкатенации текстовых полей. Параметры и использование абсолютно аналогично DSum, добавлен необязательный четвертый параметр - разделитель. Скажем, при Delimiter=Chr(13) & Chr(10) все строки будут собраны "в столбик".

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Public Function DConcat(Expr As String, Domain As String, Optional Criteria As Variant, Optional Delimiter As String)
Dim myRst As Recordset, myVal As Variant, Result As String
On Error GoTo ErrHandler
    ' Используем текстовую переменную Result для формирования текста запроса для Recordset
    Result = "Select " & Expr & " As Expr From " & Domain
    If Criteria > "" Then
        Result = Result & " Where " & Criteria
    End If
    Result = Result & "; "
    Set myRst = CurrentDb.OpenRecordset(Result, 4)
    ' А теперь ее же для хранения результата сцепления строк
    Result = ""
    If myRst.RecordCount > 0 Then
        myRst.MoveFirst
        Do While Not myRst.EOF
            myVal = myRst.Fields("Expr")
            If Not IsNull(myVal) Then
                If Result > "" Then
                    Result = Result & Nz(Delimiter, "") & CStr(myVal)
                  Else
                    Result = CStr(myVal)
                End If
            End If
            myRst.MoveNext
        Loop
    End If
    DConcat = Result
    myRst.Close
    Exit Function
ErrHandler:
    If Not (myRst Is Nothing) Then myRst.Close
    MsgBox "Error in function D_Cocnatenate #" & Err.Number & ": " & Err.Description
End Function
0
450 / 238 / 14
Регистрация: 29.10.2014
Сообщений: 959
28.06.2015, 19:03 58
1)В связи с тем, что 2 аргумента - Optional, должен работать вызов:
Private Sub txtИтог_DblClick(Cancel As Integer)
txtИтог.Value = DConcat("F", "S")
End Sub
Не работает
2)Хотя компилятор ошибки и не выдает, в Справке по запросу Optional в разделе Function Statement в последнем примере написано "Optional arguments can have default values and types other than Variant" - необязательные аргументы могут иметь значения и типы, кроме Variant
Думаю нужно это устранить и повторить
1
шапоклякистка 8-го дня
3675 / 2235 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
29.06.2015, 06:25 59
Спасибо за замечание, действительно, забыла прописать значение по умолчанию для опциональных параметров + забыла, зачем третий параметр именно variant (кстати, в исходной функции DSum он тоже необязательный и variant). Добавила проверку.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Public Function DConcat(Expr As String, Domain As String, Optional Criteria As Variant = "", Optional Delimiter As String = "")
Dim myRst As Recordset, myVal As Variant, Result As String
On Error GoTo ErrHandler
    '  Если Criteria число или логическое, то в случае равенства 0 функцию не выполняем
    If VarType(Criteria) < 8 Then
        If Criteria = 0 Then
            DConcat = Null
            Exit Function
        End If
    End If
    ' Используем текстовую переменную Result для формирования текста запроса для Recordset
    Result = "Select " & Expr & " As Expr From " & Domain
    If Criteria > "" Then
        Result = Result & " Where " & Criteria
    End If
    Result = Result & "; "
    Set myRst = CurrentDb.OpenRecordset(Result, 4)
    '  А теперь ее же для хранения результата сцепления строк
    Result = ""
    If myRst.RecordCount > 0 Then
        myRst.MoveFirst
        Do While Not myRst.EOF
            myVal = myRst.Fields("Expr")
            If Not IsNull(myVal) Then
                If Result > "" Then
                    Result = Result & Nz(Delimiter, "") & CStr(myVal)
                  Else
                    Result = CStr(myVal)
                End If
            End If
            myRst.MoveNext
        Loop
    End If
    DConcat = Result
    myRst.Close
    Exit Function
ErrHandler:
    If Not (myRst Is Nothing) Then myRst.Close
    MsgBox "Error in function D_Cocnatenate #" & Err.Number & ": " & Err.Description
End Function
0
Эксперт MS Access
26784 / 14463 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.07.2015, 21:04 60
Довольно часто возникает тема отправки почты в среде MS Access. Предлагаю программу отправки через CDO с разными возможностями. Есть небольшое описание программы
Вложения
Тип файла: rar sendmail-v5-2.rar (151.0 Кб, 847 просмотров)
12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2015, 21:04
Помогаю со студенческими работами здесь

Делимся.
Доброго времени суток всем посетителям этой темы!=) Хочу попросить вас поделиться самой...

Делимся vpn)
Ребят, накидайте vpn серверов работающих на просторах СНГ.

Делимся опытом
Добрый день! Давайте делиться мыслями о разработках, которые прямо не используются в работе, но...

Делимся знаниями по С++
По вашему зачем нужна виртуальная функция в программе? Какой от нее толк если она вызывается как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru