Войти

Показать полную графическую версию : Вопросы по MS Access. Тема постоянно обновляется...


Страниц : [1] 2 3

FRZ
27-11-2008, 23:30
Всем привет! С базами данных дружу неохотно, но курсовой делать надо, поэтому вопросов будет много, но все они будут не особо сложные для понимающих людей!
Итак, приступим.
Вопрос номер раз:
Допустим, есть 3 таблицы (товары, заказы и таблица с информацией по дисконтным картам). В таблице товары 4 цены (обычная, и 3 со скидками 5, 10 и 15%). Так вот, как автоматизировать подсчет 3 цен со скидками при вводе только цены в розницу? Пробовал через значения по умолчанию вбивать - выдает ошибку (см вложения).

Только большая просьба, объяснять, как новичку. Конечно рассусоливать сильно не надо, но по возможности поподробнее.
Надеюсь, в беде не бросите, заранее спасибо!

Delirium
28-11-2008, 04:24
никогда не используйте в именах переменных в любой базе данных скобки (). Уберите их и проверьте.

Нет, все равно работать не будет, т.к. на момент создания записи в поле "цена" еще ничего нет, а значение выставляется автоматом ДО начала записи. Как вариант - хранить в базе всего одну переменную, а остальные высчитывать. Либо же оставить все поля, но создать запрос на обновление, который будет автоматом вставлять нужные данные. Выглядеть он будет примерно так(в виде SQL) :
update table1 set цена5пр = цена - 0,05*цена, цена10пр = цена - 0,1*цена, цена15пр = цена - 0,15*цена

Для создания запроса просто создаем пустой запрос, переходим в вид SQL и вбиваем этот текст(поменяв имена переменных на нужные)

FRZ
28-11-2008, 10:44
Delirium, ок, спасибо! Я так поначалу и подумал, что в одной таблице скорее всего не получится, придется с запросами возиться =( . С запросом все получилось замечательно)

ДОБАВЛЕНО!
Так, вопрос номер два. Создал форму (см приложение), на ней поле со списком и просто список (большой). По умолчанию в списке большом отображается вся таблица с товарами, а в раскрывающемся списке отображаются категории (из запроса на выборку). Так вот теперь, как это все завязать, чтобы при выборе из выпадающего списка определенной категории, например, видеокарты, в поле большого списка импортировался список всех видеокарт? Запросы на выборку по определенной категории есть! Я так понимаю, придется использовать Visual Basic, а в нем не очень, поэтому просьба поподробнее. Хотя я более-мене знаю Delphi, поэтому свойства знаю где расположены =)

FRZ
29-11-2008, 20:51
Так, вроде разобрался. Кому интересно:
Вешаем на событие "После обновления" в выпадающем списке такую строку (для каждой категории своя): If ПолеСоСписком0.Text = "Компьютер в сборе" Then Список2.RowSource = "SELECT Товары.IDg, Товары.Название, Товары.Цена_розн, Товары.Цена_5, Товары.Цена_10, Товары.Цена_15, Товары.Гарантия, Товары.категория_товара FROM товары WHERE Товары.IDcat = 1; "

Тут же возник вопрос номер три: Есть форма. На ней listbox, в него выводятся данные из запроса (см выше). Вопрос: можно как-нибудь на кнопку повесить событие копирования выделенной строки в Listox'e в отдельную таблицу (структура таблиц совпадает)? Ну или не на кнопку, а на 2 щелчек по строке, ну или еще как, подскажите пожалуйста!

Delirium
01-12-2008, 01:17
Ну если только вешать обработку на двойной клик на список и в коде уже прописать примерно так:
Dim str as String
str = список1

В str будет лежать индекс щелкнутой строки. Потом можно создать запрос с параметров, который будет отбирать строку из таблицы и кидать в нужную "корзину".

FRZ
01-12-2008, 22:31
Delirium, Спасибо! так и сделал. все работает!!! :yahoo:

Так, вопрос номер три. Теперь мне надо написать сложный запрос. Сколько мучался - ничего не получается =( . (Рисунок прикрепил). Итак вкратце что мне надо: Чтобы по щелчку на кнопке "Пересчитать цены" бралось значение из поля (например 12), Находилась в таблице Дисконтные_карты строка с номером карты (12), смотрелось в этой строке идентификатор скидки (IDs в нашем случае 2), В соответствии с этим идентификатором из таблицы Товары выбирался нужный столбик с ценами (пронумерованы от 0. В нашем случае 2) и этот столбик полностью копировался в столбик цен в таблице Текущий_клиент. Собственно все =)

Понимаю, что все несколько запутано, но это наверное последнее, что нужно сделать и курсовой будет готов! Очень надеюсь на помощь =)
(кстати, поле идентификатора скидки IDs не с чем не связано, так что если что тип данных можно поменять. Сейчас стоит числовой 0,1,2,3)

Delirium
02-12-2008, 01:20
Мда. Как то неудобно со столбцами.... Вы можете привести внешний вид конструктора запроса, в который будут закинуты таблицы "текущий клиент", "товары", "дисконтные карты". Связи между ними выставлены?


P.S. А не проще просто пересчитать цены "на лету", имея такую мини таблицу:
Номер_карты IDs Скидка
12 1 5%
12 2 10%
12 3 15%

Для этого надо будет просто создать еще один запрос с параметром - номер карты.

P.P.S Может проще базу выложить, вживую проще решить? :)

FRZ
02-12-2008, 13:35
Вы можете привести внешний вид конструктора запроса, в который будут закинуты таблицы "текущий клиент", "товары", "дисконтные карты" »
Эмм, ка-то не понял вопроса? Я конструктором запросов не пользуюсь (не понимаю, как он работает). Я все запросы в основном на SQL пишу.
Связи между ними выставлены? »
Нет, таблицы Товары, Дисконтные карты независимы. Таблицы "Текущий клиент" и "Текущий заказ" используются для временного хранения данных о заказе (пока не оформлен) и товаров со скидками для текущего клиента (в зависимости от номера карты). В конце концов все заказы сливаются в одну табличку и там хранятся. Для этой таблички есть связи. Базу прикрепил! Посоветуйте, как мне лучше сделать, только чтоб не очень сложно было =) Кстати, можно и на лету пересчитать. Так даже наверное удобнее будет...

Delirium
03-12-2008, 06:44
Значит так. Готово все. Во вложении готовый вариант, надо только напильником обработать.
Суть в чем. Создаем запрос с параметром "номер дисконтной карты". На форме создаем ПолеСкидки (ему надо бы выставить свойство Не отображать на экране, забыл сделать).Его значение = результат выполнения запроса, который выбирает размер скидки в зависимости от номера карты. Далее...
При нажатии на кнопку происходит выполнение запроса и в поле пихается номер скидки. Затем происходит проверка скидки, если это 5%, то выбираем все со столбцом скидка_5, если 10%, то со столбцом скидка_10 и т.д. Если нет скидки, выбираем цена_розн и выводим на экран. Весь код написан в кнопке "пересчитать заказы". Открывай вложение, смотри, будут вопросы, милости просим.

Delirium
03-12-2008, 06:46
P.S. Да, и еще. Перед отправлением баз MDB очень рекомендую делать в Access Сервис - параметры - сжать и восстановить базу данных. Размер уменьшается в разы(сравни наши архивы по размеру).

FRZ
03-12-2008, 17:00
Delirium, Большущее вам спасибо!!! Прямо не знаю, что бы я без вас делал :happy:

:oszone: :oszone: :oszone:

grounder78
19-03-2009, 18:47
Вопрос нубский!

Можно ли в Ms Access 2007 использовать базу через MyODBC.
Драйвер MySQL ODBC поставил. пробовал две версии 3.51 и 5.1.5
Локальный сервер MySQL в панели управления находит. (соединение успешное)
При подключении в Access 2007 бызы выдает.
ODBC ошибка вызова


Нашол мануал по настройке только для Access 2003 но написано что сейчас он уже не актуален.

Erekle
20-03-2009, 03:04
Тоже не занимался Access-ом, кроме простых, чисто прикладных операций... Но сейчас дело осложнилось - есть база с полгигабайта, и требование, порезать её на куски - желательно, за сутки. :) Прошедший день я угробил на пустые и почти неосмысленные попытки. Сейчас лежат фолианты по Access'97 и 2000 (установлен Офис 2003), но пока логика предполагаемых действий не стала особо осмысленной.

Порезать надо по следующему принципу. Первая колонка параметров - нумерация - 01.01, 01.02 и далее. Таких целых чисел (в смысле - до точки) - до сотни, и нужно вычленить первые 10 категорий из них (с 01(.01) до 11(.01) ). Это первый уровень, и справиться с нею можно и вручную, если бы этого хватало.
Далее, каждая из таких категорий (суть большие области) содержит несколько десятков/сотен подкатегорий - тех, что после точки: 01.01, 01.02...01.130, скажем. Это меньшие области, составные больших.

Надо "изготовить" на основе базы несколько тысяч отдельных файлов-баз, соответствующих подкатегориям: 01.01, 01.02 ... 10.ххх; или сначала 10 файлов по основной категории, а потом каждую такую промежуточную базу порезать по мелкому. При этом базы должны быть отсортированы по другому параметру, которая есть адреса.

Такое возможно в принципе? :( Запрос? Макрос? Помощь будет воспринята с большой благодарностью.

Erekle
23-03-2009, 14:50
Такое возможно в принципе? »
Возможно... Форма + запросы = рапорт > печать.

Это выручил предшественник, в отличие от меня свободно владеющий всей мощью Access-а и сохранивший файл с готовым именно для требуемых действий шаблоном, им же созданным. Порезать или манипулировать сотнями раз одним и тем же (выделить и напечатать) не понадобилось, вся печать прошла из самой базы. Мне оставалось всего-то - 10 раз ввести нужную цифру и ещё 10 - нажать на "печать".

Иного выхода нет. Надо сесть и изучить. :lazy:
Спасибо за сочувсвие. :)

Nikeanich
16-07-2010, 11:14
А можно вопрос? У меня есть Куча DBF файлов, причём количество их всегда разное. Для одного файла я в Ацесе сделал запрос, он меня устраивает. А как сделать, чтобы ацес брал ВСЕ файлы из папки, применял к каждому мой запрос, и выводил результат, при этом считая количество файлов?

dimka112
27-07-2010, 20:25
Кто подскажет, что это за фигня и как с ней бороться? Винда ХР ставил Оболочку 7ки. Иксель и Ворд работают нормально.

zaga1
02-12-2011, 11:57
Всем привет!На данный момент изучаю access 2007 по книге Недостающее руководство access 2007, уже изучил три главы по запросам, но так и не нашел что искал.А именно, как создать запрос, чтобы из таблицы мне в качестве результата запроса выводило только то поле(ИМЕННО ПОЛЕ) со всеми его строками которое я укажу в запросе???Прошу Вашей помощи!!!!

Coutty
02-12-2011, 17:58
Базовый запрос SQL:
SELECT имя_поля FROM имя_таблицы;

zaga1
05-12-2011, 10:04
Спасибо большое, все получилось. Теперь вопрос более сложный(для меня по крайней мере)). Я разработаю форму для пользователя, в которой будет поле для ввода данныхи кнопка которая будет выполнять мой запрос, как сделать так, чтобы данные которые я ввел в форме в поле поиска, автоматически подставлялись в текст запроса в поле SELECT.Приведу пример: Есть таблица с полями (поле 1, поле 2, поле 3), нужно чтобы запрос показал нужное мне поле, через форму я ввожу например поле1, и надо чтобы именно это поле выдал мне запрос в качестве результата.Помогите с этим.Это единственная оставшаяся проблема!!!!

zaga1
05-12-2011, 17:51
Coutty, помоги пожалуйста.Мой вопрос выше!




© OSzone.net 2001-2012