Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Access VBA

Автор: aidomars
Дата сообщения: 27.07.2011 06:33
PrWork1
Только начинаю работать в access, про ПФ не в курсе. Схема такая:
1.Таблица "Договора".
2. Запрос "Запрос2" который выбирает из "Договора" нужные столбцы.
3. Форма, где расположил:
3.1 Выпадающий список с сотрудниками "ФильтрОтв"
3.2 Список "Список5" в виде таблицы с источником строк из "Запрос2" "Договора", где сотрудник это столбец8.
Есть подозрение, что "Запрос2" тут лишний, вполне думаю возможно сразу подтягивать в "Список5" данные из "Договора", но все же на текущий момент как сделать чтоб при изменении "ФильтрОтв" оставались нужные строки?
Так и есть, выкинул "Запрос2", теперь подтягивается напрямую в список.

Вопрос закрыт, оказалось совсем элементарно: задал новый strSQL, а затем Список5.RowSource = strSQL
Автор: PrWork1
Дата сообщения: 29.07.2011 19:15
aidomars
Ок, я так и предлагал в первом варианте...
Автор: aidomars
Дата сообщения: 29.07.2011 20:01
Да, спасибо тебе PrWork1 и dneprcomp, каждый день узнаю что то новое.
На следующей неделе думаю начать обновлять главную таблицу из внешних txt на предмет обновления сумм по существующим договорам и добавления новых договоров, коих нет в таблице.
И еще такой вопрос. Работа предполагается с общим доступом (как сейчас с файлом excel, расположенным на сетевом диске). Как в этом плане Access? Можно ли на компе юзера расположить клиент, а таблицы будут на сетевом? Кол-во юзеров пока < 10.
Автор: PrWork1
Дата сообщения: 29.07.2011 22:15
aidomars
Можно. Лучше поставить SQL express 2005/2008 и в Аксессе использовать тип проекта ADP. Таблицы на том же сервере, что и txt файлы
Автор: aidomars
Дата сообщения: 30.07.2011 09:48
PrWork1
А SQL express 2005/2008 это отдельная программа? Хотелось бы использовать что есть на данный момент, т.е. Access 2003.
Автор: PrWork1
Дата сообщения: 30.07.2011 10:12
aidomars
Это Microsost SQL Server Express - бесплатная версия sql сервера. ДЛя работы 10 польз. лучше использовать этот вариант.
Загрузить можно прямо на сайте MS
Автор: aidomars
Дата сообщения: 30.07.2011 19:59
PrWork1
Не хочется заморачиваться с itшниками, зачем да почему... Думаю просто у юзера разместить форму, да пусть получает/загружает данные. А у себя уже типа расширенную, чтоб таблицы обновлять. Так же возможно?
Автор: PrWork1
Дата сообщения: 30.07.2011 20:16
aidomars
Да все возможно в этом мире
По сети тоже можно работать, правда быстродействие будет ниже.
Но если 2 пользователя, то нормально.
Если много пользователей, можно ещё всех на сервер терминалов согнать и туда базу поставить, тоже до 10 чел. выдержит.

(Кстати, если использовать например, Sql Expess 2005, то желательно Access2007)

А Юзер куда будет загружать данные из txt? Тоже в ведь в таблицы базы?
Автор: aidomars
Дата сообщения: 30.07.2011 21:43
PrWork1
Не, юзеру делов то, открыл форму с готовым списком, выбрал строку, вписал пару тройку фраз, закрыл форму. Данные из тхт загружаются в основную таблицу разово, поутряне, одним человеком. Получается, что юзеры только будут добавлять по одной строке в таблицу звонков клиентам (id, дата, время, результат звонка, юзер).
Автор: PrWork1
Дата сообщения: 30.07.2011 22:46
aidomars
Ну тогда, наверное, потянет. Просто открывай базу по сети, сама база лучше пусть лежит на том компе, на котором больше всего будут с ней работать.
Автор: aidomars
Дата сообщения: 09.08.2011 15:32
Есть таблица с Именами и Датами, подскажите как сделать запрос чтоб отображал группировку по именам, а также (2 столбец - "кол-во строк с датой = date()", 3 столбец - "кол-во строк с пустой датой") типа:
Иван - 1 - 2
Петя - 2 - 3
Вася - 5 - 0
Автор: GeXamin
Дата сообщения: 10.08.2011 08:35
aidomars

Как-то так:

Код:
SELECT db1.namem,sum( iif(db1.datem=date(),1,0)), sum( iif(isnull(db1.datem),1,0))
FROM db1
group by db1.namem
Автор: aidomars
Дата сообщения: 10.08.2011 09:08
GeXamin
Самое оно! Спасибо! Не знал, что в заголовках построителя можно функции писать.
Автор: GeXamin
Дата сообщения: 10.08.2011 11:58
На здоровье.
Автор: aidomars
Дата сообщения: 10.08.2011 14:04
Как без цикла получить кол-во выделенных строк в списке? Сейчас делаю так.
Вешаю цикл на событие Список_MouseUp:
Set ctl = frm!Список
For Each Itm In ctl.ItemsSelected
n = n + 1
Next
Но почему-то цикл не обрабатывается, а если вешаю цикл на любое другое событие то все нормально. Мне нужно динамическое отображение, поэтому то кроме как MouseUp ничего не подходит.
Автор: aidomars
Дата сообщения: 16.08.2011 17:18
Вышестоящий вопрос решен, возник новый.
Если программой пользоваться будут человек 15-20, где лучше разместить формы, у каждого юзера или все в одном файле на сетевой папке? Планирую также разграничить доступ, но еще вплотную к этому вопросу не подошел.
Автор: Vitus_Bering
Дата сообщения: 17.08.2011 16:41
aidomars

Цитата:
где лучше разместить формы

На сервере
Автор: YuriyRR
Дата сообщения: 17.08.2011 18:32
aidomars

Цитата:
где лучше разместить формы, у каждого юзера или все в одном файле на сетевой папке

Правильно сделать разделение базы
все таблицы с данными поместить на сервер а формы , отчеты и все остальное
в другую базу. Сделать в ней соединение с таблицами на сервере и эту часть раздавать клиентам.
в акцессе невозможно перенести вычислительную нагрузку на сервер - нет хранимых процедур. Поэтому сервер выступает в роли обычного файл сервера. Это те-же DBF ки только упакованы в один файл (по сути).
Но это отличная штука для гетерогенных запросов. И в этом его конек.
Автор: aidomars
Дата сообщения: 17.08.2011 19:34
А сервер и сетевая общая папка это подразумевается одно и то же? На сервер мне никто не даст разместить файлы, это куча заявок писать, фу.
Автор: YuriyRR
Дата сообщения: 18.08.2011 01:32
aidomars

Цитата:
А сервер и сетевая общая папка это подразумевается одно и то же?

Да, конечно. Ложишь в нее файл mdb с таблицами и все клиенты к нему присоединяются.
Автор: asbo
Дата сообщения: 18.08.2011 13:53
Есть запрос, создающий новую таблицу на основе имеющейся:
sSQL = "SELECT * INTO " & sTblNew & " FROM " & sTbl & " WHERE Fld = 1 OR Fld = 3 ORDER BY Fld;"

Как в него всунуть добавление еще трех полей Long? Или это лучше следующим запросом сделать?
sSQL = "ALTER TABLE " & sTblNew & " ADD Fld1 LONG ADD Fld2 LONG ADD Fld3 LONG;"
Автор: YuriyRR
Дата сообщения: 18.08.2011 16:35
asbo

Цитата:
Как в него всунуть добавление еще трех полей Long?

SELECT *, 0 as FIELD1,0 as FIELD2 ...

Автор: asbo
Дата сообщения: 18.08.2011 17:07
YuriyRR, снкс.
Я, правда, ужЕ по второму варианту сделал. Решил бошку не ломать.

Но, на будущее, я немного не понял - у меня ведь запрос на создание таблицы, а не на выборку. И тип полей не указан...?
Автор: YuriyRR
Дата сообщения: 18.08.2011 17:25
asbo

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

LongInt идет по умолчанию, если к примеру нужен Double добавляем явное преобразование к типу. пример
SELECT [КОДЫ УЛИЦ].*, 0 as d1, 0 as d2, CDbl(0) as d3
INTO www
FROM [КОДЫ УЛИЦ];


Добавлено:
директива SELECT на выборку ), а
директива INTO на добавление (создание)
Автор: asbo
Дата сообщения: 18.08.2011 17:45
YuriyRR
Ага, врубился. Т.е. эти поля создаются на стадии формирования выборки (как обычно делаем с вычисляемыми полями), а потом, вместе с остальными, выплевываются директивой INTO в новую таблицу. А для уверенности, что они будут именно Long, можно сделать и CLng(0) as d1?
Автор: YuriyRR
Дата сообщения: 18.08.2011 18:29
asbo

Цитата:
А для уверенности, что они будут именно Long, можно сделать и CLng(0) as d1?

Конечно.
Автор: aidomars
Дата сообщения: 19.08.2011 06:44
Есть две таблицы:
1 Коля
Автор: Czechoslovak
Дата сообщения: 19.08.2011 09:51
aidomars
Ну что то вроде этого

Код:
SELECT T1.Имя, T2.Настроение, T2.Дата
FROM T1 INNER JOIN T2 ON T1.ID = T2.ID
where Дата = (select max(Дата) from T2 where T1.ID=ID)
Автор: GeXamin
Дата сообщения: 19.08.2011 10:04
aidomars

Код:
SELECT t1.name,(SELECT TOP 1 t2.type FROM t2 WHERE (((t2.kod)=t1.kod)) ORDER BY t2.date DESC)
from t1
Автор: aidomars
Дата сообщения: 19.08.2011 11:21
Czechoslovak
Все получилось, спасибо!
WHERE (t2.[Дата]=(SELECT MAX([Дата]) FROM t2 WHERE t1.ID = t2.ID))
GeXamin
Это что то новенькое для меня, на досуге попробую, спасибо.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: BDE - траблы, помогите пожалуйста срочно...


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.