Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access VBA

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Открыть новую тему     Написать ответ в эту тему

Guest

BANNED
Редактировать | Цитировать | Сообщить модератору
   
 
Обсуждаем вопросы только по Access VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.

 

NB! Дублирующая тема VBA for Access закрыта во избежание путаницы. Оставлена эта, как более ранняя и имеющая больше сообщений.

Смежные темы:
Помощь в создании SQL-запросов: SQL запрос
Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
Программы » Word FAQ | Excel FAQ | Access FAQ
Прикладное программирование » Word VBA | Excel VBA
Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007
----------
Как в Access перместить запись из одной таблицы в другую (допустим по нажатию кнопки на форме)?

Отправлено: 18:31 05-09-2002 | Исправлено: ALeXkRU, 17:14 03-08-2021
erm1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
InsideTM
 
В Вы преобразуете дату в текстовую константу в запросе.
Для корректной работы необходимо в полученной текстовой константе заменить все "." на "/".
 
Private Function koor(buf As String) As String
Dim poz As Integer
start:
poz = InStr(buf, ".")
  If poz <> 0 Then
   Mid(buf, poz, 1) = "/"
   GoTo start
  End If
koor = buf
End Function
 
 Me.cbo_frm_notes_text_filter.RowSource = "SELECT notes.notes_id, notes.notes_text, notes.notes_date FROM" & _  
   " notes WHERE notes_date =#" & koor(formateddate) & _  
   "# ORDER BY notes.notes_text"

Всего записей: 2 | Зарегистр. 15-01-2008 | Отправлено: 20:19 07-02-2008 | Исправлено: erm1, 20:32 07-02-2008
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erm1

Цитата:
Private Function koor(buf As String) As String
Dim poz As Integer
start:
poz = InStr(buf, ".")
  If poz <> 0 Then
   Mid(buf, poz, 1) = "/"
   GoTo start
  End If
koor = buf
End Function  

А чем это отличается от выше названной функции Replace?

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 02:08 08-02-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Создал тестовую таблицу с полем в виде даты, следующий код у меня работает:

Цитата:
 
Private Sub Кнопка2_Click()
Dim dd As String
dd = "05.01.2008"
  Me.List1.RowSource = "SELECT d1 FROM t1 WHERE d1=CDate(""" & dd & """)"
End Sub
 

А проект у вас mdb или adp? Если adp, то там должно быть по идее согласно синтаксиса SQL Server, то есть для даты CONVERT(datetime, '01.05.2007', 103)
(103 - формат даты в виде dd.mm.yyyy).

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 09:13 08-02-2008
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
InsideTM
Поковырял MS SQL 2005 Express получилось либо
как у MrZeRo с notes_date = CONVERT(...)
либо можно привести дату к типу Double
"notes_date = " & CStr(CDbl(CDate(cbo_frm_notes_date_filter)) - 2#).
Вещественное представление даты у MS SQL почему то на два дня меньше, чем в VBA  

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 10:32 08-02-2008
InsideTM



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо всем огромнейшее. Рабочий код:
Private Sub cbo_frm_notes_date_filter_AfterUpdate()
    Me.cbo_frm_notes_text_filter.RowSource = "SELECT notes.notes_id, notes.notes_text, notes.notes_date FROM" & _
   " notes WHERE notes.notes_date =CONVERT(DATETIME, '" & cbo_frm_notes_date_filter & "', 103)" & _
   " ORDER BY notes.notes_text"
End Sub
 
 
Проблема в том, что в конструкторе SQL запрососв в самом аксессе 2007 этот код выдаёт ноль результатов и сам аксес в конструкторе предлагает формат 102, тогда работает. Это и ввело в заблуждение, хотя подобный код пробовался с 102.
ЗЫ проект АДП само собой.

Всего записей: 70 | Зарегистр. 06-12-2007 | Отправлено: 11:32 08-02-2008
AdUser



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ! Привет всем!
 
Помогите мне с базой разобраться. Я новичок в практике. А так вобщем работу БД и СУБД знаю.
 
Дали мне задание собрать базу в Ацессе. Суть ее такова: раньше в нашей конторе все записи об экспорте товара записывались в журнал. А теперь надо их писать в БД.
 
Я сделал базу. Но надо очень хотел бы, чтобы профи хотя бы подсказали где у меня не так, и как лучше ее сделать (или где почитать об этом). Я не прошу сделать работу за меня, я прошу подсказать, помочь советом и ссылками, где можно научиться самому.
 
 
 
 
Вот так сейчас выглядит база:
На одну строку в журнале приходится с десяток столбцов (Товар, Масса, Страна-получатель, Фирма-отправитель, Номер сертификата, Дата выдачи сертификата, Сотрудник). База создается затем, что нам в конце года нужно все пересчитывать и сдавать отчеты (копаться в 4х журналах в конце года очень и очень в лом).
Отчеты по следующим данным - Сколько было вывезено товара (каждого и по скольку), Сколько было выдано всего сертификатов. Остальное сам доделаю.
 
 
Я сделал базу так: Товар-отдельная таблица Справочник. Масса - в таблице База. Страна-получатель, Фирма, Сотрудник - справочники, отдельными таблицами. А Номер сертификата и Дата выдачи серт. я сделал отдельной таблицей.
 
Сделал форму на основе таблицы База (куда все сваливается из других таблиц и справочников). Из нее забиваются данные в таблицу.
 
 
Теперь конкретные (это я в нормальном смысле =) ) вопросы:
1. Правильно ли я вообще сделал? Как правильно распихать поля (по отдельным таблицам или в основную таблицу База)?
2. Как поставить условие Да/Нет. На случай если сертификат будет считаться недействительным, то удалять запись не надо, надо поставить галочку Испорчен. Я поле Status в таб. Базу добавил, логическое. В форму вытащил. Но как их связать вообще не понимаю! И при этом! Если буду делать отчет, надо чтобы у недействительной записи Масса груза не считалась, но считалось количество выданных сертификатов.
 
 
 
Вот ссылка на базу, люди знающие, подскажите плиз!
__tp://www.51clubber.ru/uploads/db5.zip (64 kb)
__tp://www.51clubber.ru/uploads/db5.mdb (553 kb, не ужимал, оригинал)

Всего записей: 26 | Зарегистр. 19-12-2006 | Отправлено: 16:43 12-02-2008 | Исправлено: AdUser, 16:44 12-02-2008
LuckyELF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По собственной глупости разделил БД - выбрал в меню "сервис" -> "служебные программы" -> "разделение баз данных", в итоге у меня получилось 2 файла, причем в исходном я не могу менять структуру таблиц - "мол они находятся в другом файле", а в новом файле аксес свалил в кучу схему данных - там порядка 30 таблиц, которые в схеме были аккуратненько выстроены. очень нужно все вернуть . бэкапа нет .
 
И еще м.б. кто нить знает как реализовать в аксесе следующие.
есть таблица Извещения (Номер, Дата, КодУчастникаОтправителя, КодУчастникаПолучателя) и таблица Участники (КодУчастника, НаименованиеУчастника).
Как не пытался сделать две связи между этими таблицами (по полям Извещения.КодУчастникаОтправителя = Участники.КодУчастника, Извещения.КодУчастникаПолучателя = Участники.КодУчастника), но аксес не позволил мне сделать обеспечение ссылочной целостности, есть варианты как такое реализовать?
 
И еще вопросик. В аксесе можно заводить пользователей, а как заставить аксес логинится под определенными пользователем?

Всего записей: 29 | Зарегистр. 06-03-2005 | Отправлено: 23:18 12-02-2008 | Исправлено: LuckyELF, 23:28 12-02-2008
ochennadosoft



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь может коротко и понятно объяснить как организовать Отчет о поощрениях по одному человеку (отдельно для каждого)? Имеется Запрос, в котором есть все необходимые сведения на всех сотрудников.
 
Добавлено:
Access 97 (однако!)

Всего записей: 111 | Зарегистр. 05-03-2007 | Отправлено: 14:59 21-02-2008
InsideTM



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Легко. создаёшь отчёт, а там в его свойствах в разделе данные ищешь "фильтр" думаю в 97 оно должно быть так же как в 07

Всего записей: 70 | Зарегистр. 06-12-2007 | Отправлено: 21:28 21-02-2008
Vitus_Bering



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ochennadosoft
Выложи куда-нибудь пример и получишь ответ.

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 11:03 22-02-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ochennadosoft
Если открывать отчет через DoCmd.OpenReport, там строку фильтра можно указать.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 17:01 25-02-2008
Orda



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, уважаемые.
Очень нужна помощь!
 
Ситуация следующая:
 
Существует куча еженедельных отчётов и каждую неделю 1 добавляется. Они представляют из себя текстовые файлы по ~45Mb
Необходимо создать базу данных Access - "архив" этих данных. Так будет ~ 3 месяца, пока капитально не выйдет перейти на SQL.
 
Сейчас головная боль по вопросу импорта этих данных автоматически...
 
Нужно создать связку форма+макрос со следующим функционалом:
 
В форме 3 элемента:
1) Поле, где вводится дата загружаемого отчёта
2) Поле, где указывается путь к файлу для импорта (в идеале меню для выбора)
3) Кнопка "ОК" для запуска скрипта
 
Макрос же подтягивает файл указанный в форме и в зависимости от даты, указанной там же, проводит импорт определённым образом.
1) Если за дату в течение календарной недели отчёт ещё не загружался - идёт добавление данных в таблицу;
2) Если за дату в течение календарной недели отчёт уже загружался (в четверг загружают новее данные чем в среду) - старые данные заменяются новыми.
 
На текущий момент ума хватило на осуществление только:
макрос тянет файл "Base.txt" из строго определённого места и при любом раскладе добавляет данные к старой таблице
 
Как прописать всё прочее - ума не приложу...
 
Для разъяснения ситуации выложил пример файлов:
 
http://orda.msk.ru/Sample.zip
 
1) "Исходники" - образцы исходных txt-файлов
2) "DB" - файл с жутко примитивным макросом импорта. Бессмысленен..., т. к. спецификацию импорта передать не могу (или могу?)
3) "Описание" - это описание

Всего записей: 3 | Зарегистр. 09-10-2005 | Отправлено: 11:39 28-02-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Orda
Надо на VBA писать логику обработки, не сложно, в принципе. Макросами, наверное, не обойтись. По-разному можно подходить к задаче. Н-р, сначала закачать что есть методом  

Цитата:
 
DoCmd.TransferText [transfertype][, specificationname], tablename, filename[, hasfieldnames][, HTMLtablename][, codepage]
 

а потом SQL-запросами добавлять или обновлять.
Можно средствами VBA производить анализ и добавлять или менять в таблице, наподобие того, как описано здесь: hччp://www.thescripts.com/forum/thread205851.html или что-то подобное можно найти.
Учитывая, что текстовые файлы большие, возможно, предпочтительнее второй вариант. Хотя первый вариант удобнее в отладке, да и 45Мб не такой уже большой объем по современным меркам ... Можно какие-то комбинации на эту тему. Решать вам. Но без VBA не обойтись, скорее всего. На нем же можно реализовать ввод имени файла, может, еще какой-нибудь сервис.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 13:38 28-02-2008
Abiturient

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите,  как решить, думаю для большинства, простенькую задачку. Есть две связанные таблицы:  
1-я Список работников с ФИО и  массой всяческих данных;
2-я Список должностей, которые занимал каждый из работников на предприятии с указанием даты назначения № приказа и т.д. (как правило этих должностей несколько на каждого работника).
Необходимо создать запрос, который выводил бы список работников  и занимаемые ими в настоящее время должности.  
 

Всего записей: 3 | Зарегистр. 29-02-2008 | Отправлено: 09:37 03-03-2008
OlegLKL

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, помогите! Есть запрос:
 
SELECT  
sales.*,
product.name,
product.productgroup  
FROM sales  
Left outer join product on sales.ProductID=product.ProductID  
where sales.session=21  
==============
Так вот, в таблице sales есть поле createtime - "дивным" способо запрос "сворачивает" данные по других полях и ставит в поле createtime какое-то время. Какое (первое ил последнее) - пока неизвестно.
Так вот вопрос - в чем я неправ в написании запроса. Мне нужно, чтобы ввыдало ВСЕ ДЕТАЛЬНЫЕ ЗАПИСИ ИЗ ТАБЛИЦЫ sales

Всего записей: 9 | Зарегистр. 21-04-2007 | Отправлено: 11:25 05-03-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OlegLKL
Быть не может, смотри внимательнее. Этот запрос выведет ВСЕ записи из sales (само собой, при условии sales.session=21), никаких полей из sales он не сворачивает.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 17:14 05-03-2008
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OlegLKL
Если действительно творятся такие "дивные" дела, то попробуй вместо sales.* перечислить поименно все нужные поля. Как для product.
И что ты понимаешь под "сворачивает"?

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:57 05-03-2008 | Исправлено: dneprcomp, 21:59 05-03-2008
dmka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OlegLKL
Наблюдал похожие эффекты в mssql, когда используется хранимая процедура или вьюха со звездочкой и после, в одной из таблиц, добавляется/удаляется поле. Перечисли поля явно и все будет ок.

Всего записей: 947 | Зарегистр. 23-04-2003 | Отправлено: 16:55 06-03-2008 | Исправлено: dmka, 16:56 06-03-2008
LuckyELF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В справке написано, что можно определить переменную типа String которая будет содержать более 255 символов, но не написано как это сделать.
Я объявлял так:
Dim str As String
но это не пологло.
 
Как решить?

Всего записей: 29 | Зарегистр. 06-03-2005 | Отправлено: 21:24 07-03-2008
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyELF
Что значит "не помогло"?  
Покажи код и объясни, что пытаешься сделать.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 04:07 08-03-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access VBA


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru