Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Вопросы по MS Access. Тема постоянно обновляется... (http://forum.oszone.net/showthread.php?t=124328)

FRZ 27-11-2008 23:30 965714

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

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

Delirium 28-11-2008 04:24 965872

никогда не используйте в именах переменных в любой базе данных скобки (). Уберите их и проверьте.

Нет, все равно работать не будет, т.к. на момент создания записи в поле "цена" еще ничего нет, а значение выставляется автоматом ДО начала записи. Как вариант - хранить в базе всего одну переменную, а остальные высчитывать. Либо же оставить все поля, но создать запрос на обновление, который будет автоматом вставлять нужные данные. Выглядеть он будет примерно так(в виде SQL) :
Код:

update table1 set цена5пр = цена - 0,05*цена, цена10пр = цена - 0,1*цена, цена15пр = цена - 0,15*цена
Для создания запроса просто создаем пустой запрос, переходим в вид SQL и вбиваем этот текст(поменяв имена переменных на нужные)

FRZ 28-11-2008 10:44 966070

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

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

FRZ 29-11-2008 20:51 967561

Так, вроде разобрался. Кому интересно:
Вешаем на событие "После обновления" в выпадающем списке такую строку (для каждой категории своя): 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 968626

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

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

FRZ 01-12-2008 22:31 969372

Delirium, Спасибо! так и сделал. все работает!!! :yahoo:

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

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

Delirium 02-12-2008 01:20 969475

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


P.S. А не проще просто пересчитать цены "на лету", имея такую мини таблицу:
Код:

Номер_карты    IDs    Скидка
12  1          5%
12  2          10%
12  3          15%

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

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

FRZ 02-12-2008 13:35 969864

Цитата:

Цитата Delirium
Вы можете привести внешний вид конструктора запроса, в который будут закинуты таблицы "текущий клиент", "товары", "дисконтные карты" »

Эмм, ка-то не понял вопроса? Я конструктором запросов не пользуюсь (не понимаю, как он работает). Я все запросы в основном на SQL пишу.
Цитата:

Цитата Delirium
Связи между ними выставлены? »

Нет, таблицы Товары, Дисконтные карты независимы. Таблицы "Текущий клиент" и "Текущий заказ" используются для временного хранения данных о заказе (пока не оформлен) и товаров со скидками для текущего клиента (в зависимости от номера карты). В конце концов все заказы сливаются в одну табличку и там хранятся. Для этой таблички есть связи. Базу прикрепил! Посоветуйте, как мне лучше сделать, только чтоб не очень сложно было =) Кстати, можно и на лету пересчитать. Так даже наверное удобнее будет...

Delirium 03-12-2008 06:44 970720

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

Delirium 03-12-2008 06:46 970721

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

FRZ 03-12-2008 17:00 971301

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

:oszone: :oszone: :oszone:

grounder78 19-03-2009 18:47 1068568

Вопрос нубский!

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


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

Erekle 20-03-2009 03:04 1068970

Тоже не занимался 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 1072076

Цитата:

Цитата Erekle
Такое возможно в принципе? »

Возможно... Форма + запросы = рапорт > печать.

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

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

Nikeanich 16-07-2010 11:14 1454403

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

dimka112 27-07-2010 20:25 1461725

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

zaga1 02-12-2011 11:57 1807880

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

Coutty 02-12-2011 17:58 1808109

Базовый запрос SQL:
Код:

SELECT имя_поля FROM имя_таблицы;

zaga1 05-12-2011 10:04 1809489

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

zaga1 05-12-2011 17:51 1809761

Coutty, помоги пожалуйста.Мой вопрос выше!

Delirium 06-12-2011 04:38 1810062

zaga1, открываем любой учебник по MS Access - там все это разжевано донельзя. Вкратце - создается форма с текстовым полем и кнопка. Кнопка выполняет запрос. В запросе в качестве фильтра указывается через конструктор поле формы (Форма1!TextBox1.Text).

zaga1 06-12-2011 09:02 1810124

Delirium, Доброе утро!Спасибо за ответ.Я изучаю по учебнику Недостающее руководство во Access 2007, там про это ничего не написано, особенно про вот такие записи Форма1!TextBox1.Text нет ничего. Не мог бы ты мне написать мне кусочек кода начиная с Select если это возможно.Буду очень благодарен.

zaga1 06-12-2011 11:17 1810195

Delirium, все сделал как ты сказал. Но после ввода данных в поле и нажатии кнопки дает ошибку "Введенное значение не подходит для данного поля", формат поля у меня основной, в таблице все поля текстовые.В чем тут у меня ошибка?

Delirium 06-12-2011 11:50 1810223

zaga1, в запросе поле "условие отбора" на нужном столбце. ФОрмула
Код:

[Forms]![Form1]![Поле0].[Text]
Access 2007. Все работает.

zaga1 06-12-2011 12:00 1810232

Delirium, а если у меня 200 столбцов, мне под каждым эту формулу писать?

Delirium 06-12-2011 12:43 1810263

zaga1, совершенно верно :)

zaga1 06-12-2011 17:57 1810468

Ребята еще раз здравствуйте.Может я вас запутал или не так выразился.Попробую объяснить с самого начала.Это не задание преподавателя, поручили на работе.Смысл вот в чем: Есть лист данных, который импортирован из Exel в Access, в нем 200 полей и 1789 строк.Таких 3 таблицы, все таблицы с одинаковым названием полей, но с разными данными.ЦЕЛЬ: необходимо разработать кнопочную форму для рядового пользователя этой самой БД со строкой пойска(может сортировки или фильтра это уже Вам видней),когда он вводит название любого поля в эту строку поиска, то как результат ему выводиться три столбца из этих самых трех таблиц именно этого поля которое я ввел в качестве поиска.Прошу Вашей помощи!!!!!!

zaga1 06-12-2011 21:27 1810588

Вложений: 1
Ребята, я выложил примерную базу,которая есть(только оригинал состоит из 200 полей и 1789 строк).Кому не лень, посмотрите пожалуйста и скажите как реализовать то что я спрашивал.А именно: чтобы пользователю выводило форму где он вводит например "Ашан" или "Мега", а ему в ответ таблица с наименованием товара и двумя столбцами, 1 столбец из таблицы "ТабельПоложенности" и рядом второй столбец из таблицы "НаличиеНаДанныйМомент", теперь я думаю более понятно объяснил что надо.Прошу Вашей помощи"!!!!

L-Loire 16-01-2012 07:32 1836878

Вложений: 1
Многоуважаемые! Такой вот вопрос:
Есть запрос на выборку, берущий данные из таблицы. Через кнопочную форму добавляется запись в таблицу, запрос не реагирует при этом никак, хотя по всем правилам должен добавить эту запись. Все делал по инструкциям, не понимаю в чем проблема.
Запрос называется "сумма", по нему составляется одноименный отчет, который, естественно, не обновляется так же.

http://forum.oszone.net/attachment.p...1&d=1326684635

felix2604 30-04-2012 01:27 1908074

L-Loire,

У вас в запросе прилинковано несколько таблиц, поэтому внести изменение таким образом не получится, надо создавать отдельные запросы для каждой таблицы или изменить структуру форм базы данных таким образом, чтобы форма или запрос на добавление работал с одной таблицей, тогда будет возможность внесения изменений в таблицу и соответственно вписать в процедуру обработки событий кнопки обновление запроса после добавления записи в таблицу.

(запросСумма(поле или список формы).reqery )

vladmen_O 04-11-2012 22:19 2018880

При задании (кнопкой) фильтра на некоторое поле таблицы или на поле выполненного запроса при числе записей в исходной таблице до 1000 в окне фильтра отображается выпадающий список значений этого поля. При числе записей больше 1000 отображаются только IS NULL, IS NOT NULL. Пробовал на Access 2000, 2003 и 2010 - одинаково.

1. Возможно ли и где изменить значение числа записей, при которых отображается список значений поля?
2. Возможно ли изменить (увеличить) число отображаемых строк выпадающего списка?

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

Iska 05-11-2012 01:19 2019004

Цитата:

Цитата vladmen_O
… но это число записей сильно ограничивает применение. »



Если не ограничивать — будет много хуже.

vladmen_O 04-05-2013 18:09 2144392

Вопрос немного странный - как установить OLE сервер? Посмотрел в установочных Widows, Office - ничего похожего на это не нашел.
На одном компьютере по моей просьбе OLE был установлен (как ставили, сейчас не прмнят). В таблицу Access внедряю рисунки, а на другом крмпьютере нет возможности их просмотра - сообщение, что не найден сервер OLE или не найдена необходимая DLL.
Windows XP, Office 2002.

Iska 04-05-2013 18:34 2144400

Цитата:

Цитата vladmen_O
Вопрос немного странный - как установить OLE сервер? »

Установив приложение, которое реализует этот OLE-сервер.

vladmen_O 04-05-2013 21:37 2144510

Я не программист; если честно, непонятно как и какое приложение устанавливать. Рисунок формата .jpg , формат ассоциирован с IrfanView - посмотреть там? Поиском ничего не нашел, похожий вопрос был
http://www.sql.ru/forum/1019469/serv...aregistrirovan но ответ очень короткий...
Может IrfanView не регистрируется в системе как OLE сервер?

Iska 04-05-2013 22:06 2144529

vladmen_O, выложите на RGhost архив с образцом базы данных, содержащей одну или несколько записей с данным OLE-полем.

vladmen_O 04-05-2013 22:27 2144538

http://rghost.net/45765290

Iska 05-05-2013 07:18 2144609

vladmen_O, у меня кажет, что это обычный «Пакет» (Microsoft Windows XP - Object Packager overview), реализованный «%SystemRoot%\system32\packager.exe». Активируется двойным щелчком. У меня содержимое пакетов активируется, с открытием изображений из внедрённых пакетов в XnView.

Какие отличия в версиях ОС на машине, где работает, и где не работает (не Vista и выше случайно)?

vladmen_O 05-05-2013 12:44 2144711

На машине, где не работает, в директории Windows packager.exe не нашел. Прочитал по ссылке, что это такое - наверное без него и не должно работать. На работающем компе пока посмотреть не могу. Попробую просто добавить этот файл (хотя не уверен, что не нужно еще где-либо подправить - сложно без базовых знаний).
На машине, на которой открываются/заносятся изображения, установлены Windows XP, Office 2000.
Где изображения не открываются/не заносятся - Windows XP, Office 2002.
Большое спасибо, потратили на меня кучу времени. Попробую дальше разбираться сам, направление есть.

Iska 05-05-2013 13:27 2144730

Цитата:

Цитата vladmen_O
На машине, где не работает, в директории Windows packager.exe не нашел. Прочитал по ссылке, что это такое - наверное без него и не должно работать. »

Верно. Без него не будет.

Цитата:

Цитата vladmen_O
Попробую просто добавить этот файл…
Где изображения не открываются/не заносятся - Windows XP, »

Попробуйте переустановить на ней Windows в режиме обновления.

vladmen_O 07-05-2013 00:35 2145760

Для начала просто добавил файл, без переустановки.
Все заработало.
Большое спасибо за помощь.

shuhracharya 15-06-2014 20:20 2364427

помогите пожалуйста
поиск по первому символу access
table like 'a*'
как сделать чтобы он это а брал из поле формы без написания кода vb
сделал так но не работает
WHERE Таблица1.imya LIKE '
Forms![Form1]![Поле0] * ';

Iska 15-06-2014 21:22 2364461

Цитата:

Цитата shuhracharya
сделал так но не работает
WHERE Таблица1.imya LIKE '
Forms![Form1]![Поле0] * '; »

Где сделал?

modzilla 25-02-2019 18:27 2859933

Подскажите, пожалуйста.
Задача стоит такая
есть база основная -(RRRR) есть база один и база два с полями АБ1-АБ20 и ЧЗ1-ЧЗ20
Использую запрос
Скрытый текст

INSERT INTO RRRR ( ЧЗ1, ЧЗ2, ЧЗ3, ЧЗ4, ЧЗ6, ЧЗ7, ЧЗ8, ЧЗ9, ЧЗ10, ЧЗ11, ЧЗ12, ЧЗ13, ЧЗ14, ЧЗ15, ЧЗ17, ЧЗ18, ЧЗ19, ЧЗ20 )
SELECT Таблица_ЧЗ.ЧЗ1, Таблица_ЧЗ.ЧЗ2, Таблица_ЧЗ.ЧЗ3, Таблица_ЧЗ.ЧЗ4, Таблица_ЧЗ.ЧЗ5, Таблица_ЧЗ.ЧЗ6, Таблица_ЧЗ.ЧЗ7, Таблица_ЧЗ.ЧЗ8, Таблица_ЧЗ.ЧЗ9, Таблица_ЧЗ.ЧЗ10, Таблица_ЧЗ.ЧЗ11, Таблица_ЧЗ.ЧЗ12, Таблица_ЧЗ.ЧЗ13, Таблица_ЧЗ.ЧЗ14, Таблица_ЧЗ.ЧЗ15, Таблица_ЧЗ.ЧЗ16, Таблица_ЧЗ.ЧЗ17, Таблица_ЧЗ.ЧЗ18
FROM Таблица_ЧЗ;


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

Что я делают не так? Знаний нету, сообразить сам не могу.
форум не даёт закинуть файл для примера(соединение сброшено) при попытке загрузить. можно закинуть через гуглдиск?
Скрытый текст
Вот ссылка на пример mdb базу с запросами на гуглдрайве
https://drive.google.com/open?id=1H5...3FMgz0O8XzQBPY

Iska 26-02-2019 21:01 2860201

Цитата:

Цитата modzilla
форум не даёт закинуть файл для примера(соединение сброшено) при попытке загрузить. »

modzilla, Ваш почти пятидесятимегабайтый файл базы данных отлично сжимается в архив 7-Zip до примерно полумебабайта — то есть, в сто раз.

Цитата:

Цитата modzilla
Что я делают не так? »

А что Вы хотите сделать?

P.S. Схемы базы данных нет.


Время: 13:00.

Время: 13:00.
© OSzone.net 2001-