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

» Access VBA

Автор: Egepsihora
Дата сообщения: 15.11.2007 18:01
Проблема в том, что у меня он так упорно НЕ выводит в отчёт)) Строку "2 1 10117 16x18 0" он лепит в 4 позицию
Автор: Algofil
Дата сообщения: 16.11.2007 09:07
ну я скопировал Ваши данные в текстовый файл, импортнул, все поля кроме dnn (текст) автоматом стали числовые (по дефолту в аксесе 4 байта со знаком), потом кликнул пару раз мышкой, узрел результат, скопипастил его сюда, сравнил с требуемым, вернулся в аксес, открыл окно сиквела скопипастил запрос и всё, проверьте типы данных ("21" и "121" совсем не то что 21 и 121 при сортировке) и пожалуй порядок следования полей в ГРОУП и ОРДЕР
Автор: Egepsihora
Дата сообщения: 16.11.2007 09:18
Algofil, я не понимаю, как увас работает такая группировка. В моём примере-гд данных больше-она не работает. Может есть какая нибудь еще возможность отсортировать как требуется??
Автор: Algofil
Дата сообщения: 16.11.2007 10:08
создайте новую БД, в ней создайте таблицу на пять полей, киньте туда данные из примера, отработайте запрос, если получится - сравните с исходной типы полей и импортните данные из старой в новую, проверьте на большем количестве, если работает импортните запрос из новой БД в старую
Автор: kauh
Дата сообщения: 20.11.2007 16:34
Товарищи хотелось бы узнать по поводу Access. Ситуация такая: нужна база для учета сотрудников(соответствнно около 20 полей на человека(ФИО, номе и серия паспорта, место проживания и т.п.)). Сотрудников человек 700. Плюс каждый месяц около 100 новых. В итоге я думаю что будет крутиться в активе будет около 3000-4000 сотрудников.
Целесообразность построения этого хозяйства на Access?
Автор: Algofil
Дата сообщения: 20.11.2007 16:39

Цитата:
Целесообразность построения этого хозяйства на Access?

если настольная база то хоть в ехеле пиши
если сетевая - выбирай подешевле
в аксесе визарды понятные американцу и притом всё по русски, это плюс для юзеров
Автор: kauh
Дата сообщения: 20.11.2007 16:47
Algofil
впринципе база насторльная, но будет нужна синхронизация между другими базами access(только некотрых значений). Базы будут на разных компах, но в одной локалке.
Компы все офисные(оператики 512), не будет ли подтормаживать база с стольким количеством значений?
Автор: Algofil
Дата сообщения: 20.11.2007 16:53
нет, количество записей смехотворно мало для базы, синхронизация в аксесе тож простая, тока подчитай там про ключевые поля, типа код репликации и бла-бла-бла (хотя я бы посоветовал составаное поле, типа счетчик+код машины) работать будет если просто аксесс запускается
Автор: dmka
Дата сообщения: 20.11.2007 21:17

Цитата:
Базы будут на разных компах, но в одной локалке

Пиши сразу на каком-нибудь sql-сервере (msde + .net или asp.net тут хороший выбор) и не нужно будет никакой синхронизации, потому как это постоянный источник гемора.
Потом еще этот Access вполне конкретных денег стоит на каждого юзера, хотя у нас как-то не принято на это обращать внимание
Автор: Algofil
Дата сообщения: 21.11.2007 11:17

Цитата:
Пиши сразу на каком-нибудь sql-сервере
+1024
и насчет подешевле тож не надо забывать, мало ли...
Автор: kauh
Дата сообщения: 21.11.2007 13:51
обдумывал все варианты решил писать в access'e. так и мне проще и народу )))
только вот в чем загвоздка: т.к. с базой будут работать сразу несколько человек одновременно боюсь как бы не вышло так, что бы одну и ту же запись редактировало одновременно два человека. мона как нить сделать в асесе, что бы при редактировании записи с сотрудником он выделялся другим цветом или что нить другое(становлся недоступен для редактирования).. что посоветуете?
Автор: Algofil
Дата сообщения: 21.11.2007 13:59

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

блокировка вроде бы автоматически происходит в любых СУБД
создай любую таблицу, кликни правым батоном и сгенери сетевой ярлык, потом расшарь его и открой с двух машин, попробуй одну запись редактировать - матюкнется по любому
Автор: Diver_wing
Дата сообщения: 23.11.2007 20:27
Привет. прошу помочь в вопросе.
есть таблица существуют дублирующие записи где значения поля "detal" равны между собой, и эти записи отличаются только значением поля "date" а также присутствуют не дублирующие по полю "detal".
Как сделать запрос что бы он вывел только те записи которые содержать более позднюю дату и записи которые не дублируются по полю "detal"


пример
Поле detal date
Значение dvig 01.01.2007
Значение dvig 01.05.2007
Значение dvig1 01.05.2007

нужно вывести только нижеследующие записи

Значение dvig 01.05.2007
Значение dvig1 01.05.2007

Заранее спасибо....
Автор: AndVGri
Дата сообщения: 24.11.2007 03:31
Diver_wing
Пусть таблица называется detals. Если только по полям detal, date, то групповой запрос с группировкой по detal и Max по date. Если нужны остальные поля из таблицы, то

Код:
Select detals.*
From detals
Where detals.detal In (Select s.detal From detals As s Group By s.detal Having Max(s.[date]) = detals.[date]);
Автор: Diver_wing
Дата сообщения: 24.11.2007 04:57
сделал, только блин висит аксесс...
намертво висит, данные вышли а экспорт записей не полчается сделать...
проблема актуальна... помогите плз
Автор: AndVGri
Дата сообщения: 24.11.2007 07:19
Diver_wing
Просто объём данных большой, видимо. Тогда сделай по первому варианту новую таблицу Result (detail, maxdate), а для вывода полных данных из details организуй запрос со связью таблиц по полям деталей и даты

Добавлено:
Как вариант, может быстрее будет

Код:
Select detals.*
From detals Inner Join
(Select deltal, Max([date]) As maxdate From detals Group by detal) As s
On (s.detal = detals.detal And s.maxdate = detals.[date]);
Автор: Solnishka
Дата сообщения: 25.11.2007 12:42
Люди!
Помогите пожалуйста кто чем сможет (очень надо - диплом горит).
В программировании я прям скажем новичок.
Есть проблема:
готовую программу на VBA для расчёта амортизации нужно переписать под Excel.
Я уже бьюсь над ней довольно долго и никак не получается.

[no]
[more]
Option Compare Database
Option Explicit
Dim dblПервичнаяСтоимость As Double
Dim dblОстаточнаяСтоимость As Double
Dim intВремяАмортизации As Integer
Dim intПериодРасчета As Integer
Dim intКратность As Integer
Dim blnПризнак As Boolean
Dim dblВеличинаАмортизации As Double
Private Sub Form_Load()
Поле1.SetFocus
Поле1.Text = ""
Поле2.SetFocus
Поле2.Text = ""
Поле3.SetFocus
Поле3.Text = ""
Поле4.SetFocus
Поле4.Text = ""
Поле5.SetFocus
Поле5.Text = ""
Поле6.Visible = True
Поле6.SetFocus
Поле6.Text = ""
Переключатель1.Value = True 'Включение стандартного метода расчета
Переключатель2.Value = False 'Отключение метода расчета с кратностью
Надпись9.Visible = False 'Скрытие надписи
Поле1.SetFocus
Поле6.Visible = False 'Скрытие поля
End Sub

Private Sub Кнопка1_Click()
blnПризнак = True
Поле1.SetFocus
If Поле1.Text = "" Then blnПризнак = False
Поле2.SetFocus
If Поле2.Text = "" Then blnПризнак = False
Поле3.SetFocus
If Поле3.Text = "" Then blnПризнак = False
Поле4.SetFocus
If Поле4.Text = "" Then blnПризнак = False
If blnПризнак = False Then
MsgBox " Недостаточно данных для расчета", vbExclamation, "Амортизация"
Exit Sub
End If
Поле1.SetFocus
dblПервичнаяСтоимость = CDbl(Поле1.Text)
Поле2.SetFocus
dblОстаточнаяСтоимость = CDbl(Поле2.Text)
Поле3.SetFocus
intВремяАмортизации = CInt(Поле3.Text)
Поле4.SetFocus
intПериодРасчета = CInt(Поле4.Text)
If dblПервичнаяСтоимость < dblОстаточнаяСтоимость Then
MsgBox " Ошибка! Остаток больше начальной стоимости!", _
vbExclamation, "Амортизация"
Поле1.SetFocus
Exit Sub
End If
If intВремяАмортизации < intПериодРасчета Then
MsgBox " Ошибка в сроке амортизации!", _
vbExclamation, "Амортизация"
Поле3.SetFocus
Exit Sub
End If
If Переключатель1.Value = True Then
blnПризнак = True
Else
blnПризнак = False
End If
If blnПризнак = True Then
dblВеличинаАмортизации = SYD(dblПервичнаяСтоимость, _
dblОстаточнаяСтоимость, intВремяАмортизации, intПериодРасчета)
Else
Поле6.SetFocus
intКратность = CInt(Поле6.Text)
dblВеличинаАмортизации = DDB(dblПервичнаяСтоимость, _
dblОстаточнаяСтоимость, intВремяАмортизации, intПериодРасчета, intКратность)
End If
Поле5.SetFocus
Поле5.Text = CStr(dblВеличинаАмортизации)
End Sub

Private Sub Кнопка22_Click()
Dim strFrm As String
strFrm = "Расчет Амортизации"
DoCmd.Close acForm, strFrm
End
End Sub

Private Sub Переключатель1_Click()
Переключатель2.Value = False
Надпись9.Visible = False
Поле6.Visible = False
End Sub

Private Sub Переключатель2_Click()
Переключатель1.Value = False
Надпись9.Visible = True
Поле6.Visible = True
Поле6.SetFocus
'Поле6.Text = ""
Поле6.Value = ""
End Sub
[/more][/no]
Автор: Pilipenko72
Дата сообщения: 24.12.2007 20:14
Человеки!Помогите чайнику(нет - самовару).Есть база в которой две теблицы.В одной таблице поля-Код,Фамилия,Имя,Отчество,Дата рождения,Тип обучения,Учебная группа. В другой-Оценки по разным предметам(всего полей-17),причем логически разделены на три модуля(Первое полкгодие, Второе полугодие, Итоговая).Таблицы соеденены по Код 1 к 1.Создаю запрос на среднее значение по полям Оценки с группировкой по учебным группам и типу обучения.Необходимо просщитать среднее значение по каждому модулю без учета нулевих значений, а также среднее значение по всем модулям.Пробовал перечислять в функции AVG интересующие поля формы, но как только в перечисленных полях появляется нулевое значение (хоть в одном поле)-значение Null/
Автор: Kreol2009
Дата сообщения: 26.12.2007 18:08
Ребята помогите плиз, совсем заглючил.
У меня есть форма "Форма А" и отчет который генерируется на основе этой формы "Отчет А" как мне в форме сделать кнопочку по которой бы печаталась страничка отчета соответствующей записи. тоесть если я ввел запись под номером 10 то нажав получил бы напечатаный ИМЕННО НАПЕЧАТАНЫЙ отчет с данными из 10 записи. пробую макросами играться но пока ничо не выходит

И вопрос 2-й в форме есть выпадающий список который береться из соответствующей таблицы, как сделать чтоб во втором списке при выборе например "Чай" во втором автоматически появлялись значения которые занесены во вторую таблицу например "зеленый" "черный" "каркаде"

в глобальном есть например
табл 1
1 чай
2 кофе
3 капучино

таблица 2
1.1 черный
1.2 зеленый
1.3 каркаде
2.1 черный заварной
2.2 растворимый
3.1 ванильный
3.2 шоколадный
ну и тд


тоесть чтоб во втором списке автоматически пропадали значения которые не входят в 1.№
Автор: Delaverchik
Дата сообщения: 17.01.2008 14:28
У меня вопрос. Хотелось бы программно с помощью VBA, некоторые свойства всех форм изменить сразу.

Конструкция ...

Dim frm as Form

For Each frm in Application.Form

frm.AlllowEdits = False
frm.AllowDeletetions = False
frm.AllowAdditions = False

Next frm


не помог справиться со всеми формами. Она работает только с открытыми (активными) формами, в данном случае одним. Помогите, как решить чтобы свойства всех форм изменились, даже те которые лежат неоткрытыми?

А работаю я с MS Access 2003

Спасибо.
Автор: dneprcomp
Дата сообщения: 17.01.2008 17:43
Delaverchik
Невозможно что-либо менять у не существующего объекта. Пока форма не загружена в память, ее не существует. Можно было бы делать Load Form в цикле без show. Но это не имеет смысла, т.к. при закрытии формы все изменения будут потеряны. Простейшее, что можно сделать, это поставить эти три строки на On Load каждой формы.
Автор: jONES1979
Дата сообщения: 18.01.2008 13:01
Delaverchik вместо коллекции Application.Form используй другие, типа CurrentProject.AllForms


Добавлено:
возможно, перед изменением придется их программно открывать в режиме конструктора и программно же сохранять
Автор: mbg
Дата сообщения: 21.01.2008 14:09
В Access создана ленточная форма. Что она должна возвращать по обращению к ней из VBA (например: [имя формы])?
Автор: jONES1979
Дата сообщения: 22.01.2008 17:30
mbg, а что она может возвращать, кроме ссылки на эксемпляр себя?
Автор: MrZeRo
Дата сообщения: 25.01.2008 17:16
mbg
Если имеется в виду использовать для получения данных, то будут данные из текущей записи, как и для неленточной формы.
Автор: erm1
Дата сообщения: 27.01.2008 00:07
Kreol2009

По вопросу 2 написал пример. Могу сбросить на "мыло".
Автор: InsideTM
Дата сообщения: 31.01.2008 12:27
Доброе время суток.
Подскажите пожалуйста как реализовать, замучался уже, третий день брожу по мсдну но толкового ответа не нашёл.
Есть три таблицы
1. device_type - типы устройств
В ней device_type_id (PK, счётчик), device_type_name (текст)
2. model - модели устройст
В ней model_id(PK, счётчик), model_device_type_id(FKEY int), model_vendor_id(FKEY int), model_name(nvarchar), ....
3. device - сами устройства (серийники и тд)
В ней device_id(PK, счётчик), device_model_id(FKEY int),......

Создаю форму для device.
Добавляю комбобокс для выбора типа устройст (cbo_device_type_name)
Для него источник данных: SELECT "device_type"."device_type_id", "device_type"."device_type_name" FROM "device_type" ORDER BY "device_type_name";
В таблицах он ничего не меняет, работает фильтром.

Создаю второй комбобокс (cbo_model).
Влияет на данные из device_model_id. Источник строк пустой.

Первому комбобоксу пишу в afterupdate() следующее:
Private Sub cbo_device_type_name_AfterUpdate()
Me.cbo_model.RowSource = "SELECT model_id, model_name FROM" & _
" model WHERE model_device_type_id = " & Me.cbo_device_type_name & _
" ORDER BY model_name"
Me.cbo_model = Me.cbo_model.ItemData(0)
End Sub

При выполнении всего этого дела получаю ошибку 800200009 "Введённое значение не подходит для данного поля"

я понимаю, что находит он имена, то есть текст, а формат поля у него цифровой (для записи фкеем). Как сделать так, чтобы выводил он текст, но работал с ID?

Заранее спасибо, уверен, что вопрос ньюбский и ответ на поверхности, но VB это не моё. Я вообще сисадмин =) А это так, в догонку к основным обязанностям )

Добавлено:
отмечу. база SQL 2005
Access 2007

Добавлено:
Вопрос решил сам. руборд помогает отвлечся от америкосов. проблема в "присоеденённом поле", где стояло 2 почему-то, сразу не догадался. Надо брать английскую лицензию.
Автор: Adm123
Дата сообщения: 05.02.2008 09:44
Народ, помогите, плз!
У меня есть таблица. Я делаю выборку по условию "значене поля1=ХХХ".
Получаю, ну, скажем, 100 записей.
Вопрос такой.
Могу ли я сделать выборку по условию "значене поля2=УУУ" из РЕЗУЛЬТАТОВ, т.е. из тех самых 100 записей?
Выборка SQL-запросом по нескольким столбцам не подходит, нужно именно последовательно...
Хотелтсь бы получить совет по реализации на VB, т.к. вся эта беда должна происходить в обработчике клика кнопки, а кроме этого там еще всякие дела...
Access2003.
Спасибо!
Автор: InsideTM
Дата сообщения: 05.02.2008 11:20
Посмотри http://www.fontstuff.com/access/acctut19.htm
Автор: Adm123
Дата сообщения: 05.02.2008 14:29
Пасиба! То, что надо!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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