Вопрос № 40140: Здравствуте, у меня такая проблема. В универе задали задачу решать.
______
Разработать приложение на языке Visual Basic для моделирования траектории движения некоторого объекта перемещающегося по синусоидальному закону в некоторой плоскости. ...Вопрос № 40158: Здрасьте,
Вопрос по MS ACCESS
Помогите плиз
Есть таблица:
FIO, Data, Time, Action
поле Action содержит либо "Вход" либо "Выход", соответственно дата и время - это либо время и дата входа/выхода <...Вопрос № 40169: Добрый день, уважаемые эксперты. Помогите в данном вопросе.
Данным запросом:
Data2.RecordSource = "SELECT sum(AmountCopy1) " & _
"FROM Titles WHERE " & Text3.Text & "LIKE '*" & Combo2.Text & "*'"...
Вопрос № 40.140
Здравствуте, у меня такая проблема. В универе задали задачу решать.
______
Разработать приложение на языке Visual Basic для моделирования траектории движения некоторого объекта перемещающегося по синусоидальному закону в некоторой плоскости. При столкновении объекта с препятствиями, расположенными случайным образом в данной плоскости, объект зеркально отталкивается от препятствия и меняет при каждом столкновении закон движения с синусоидального на косинусоидальный и наоборот. Объект движется по текущему закону относительно оси, направление которой определяется начальным направлением
движения в момент столкновения. Направление оси в начальный момент времени определяется случайным образом
----------------------
Само движение я сделал, а вот отражение чего не получается???
Не поможете ли дорогие эксперты?????
Отправлен: 13.04.2006, 00:40
Вопрос задал: Stamm (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: EPDSota
Здравствуйте, Stamm!
Общее движение состоит из двух - линейное (основное) и колебательное (по синусу или косинусу относительно линейной). По обоим этим движения тело имеет текущее положение и "скорость"
1. Задать каждому обьекту начальные условия - "линейную" и "колебательную" координату и скорости к ним (вектора) и еще тип колебаний - синус или косинус.
2. Вычислить новую координату тела. Между старой и новой координатой нарисовать вектор смещения.
3. Посмотреть - пересекается ли он с препятствием. Если пересекается - соответственно меняем вектор смещения главный (просто отражением зеркальным) и закон движения (синус на косинус и наоборот), Ну движение тут виртуальное, не по законам физики - синус меняется на косинус, как надо изменять относительную координату - тут нужно будет спросить дополнительно у давшего задание. После вычисляем нужную новую координату.
4. Старой координате присваиваем значение новой ("физический" двигаем тело)...
5. Идем пункт 2.
--------- Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 13.04.2006, 10:38
Вопрос № 40.158
Здрасьте,
Вопрос по MS ACCESS
Помогите плиз
Есть таблица:
FIO, Data, Time, Action
поле Action содержит либо "Вход" либо "Выход", соответственно дата и время - это либо время и дата входа/выхода
скажите как определить список людей которые сейчас находяться в здании
Я так думаю - если человек не вышел - то число его проходов (вход-выход) должно быть четным. Поэтому придеться в таблице быть аккуратным с регистрацией входов выходов.
SQL запрос при этом будет выглядеть:
SELECT FIO
FROM (SELECT FIO, COUNT(*) as prohod FROM твоя_таблица GROUP BY FIO)
WHERE int(prohod/2)*2<>prohod;
Если после данной даты:
SELECT FIO
FROM (SELECT FIO, COUNT(*) as prohod FROM TBL where data>1.1.1 GROUP BY fio)
WHERE int(prohod/2)*2<>prohod;
И дальше добавляй что нужно - копай в ту сторону...
--------- Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 13.04.2006, 10:11
Можно сделать простой запрос с групповой операцией по FIO и посчетом суммы по Входы/Выходы, преобразуя Вход в 1, а Выход в -1. Все результаты >0 дадут список людей в здании, если регистрация в базе начиналась с момента, когда в здании точно никого не было.
Приложение:
--------- Всякое решение плодит новые проблемы.
Ответ отправил: Genyaa (статус: 3-ий класс)
Ответ отправлен: 13.04.2006, 10:20
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Гришин Денис Васильевич!
Пример пишу для DAO, для ADO будет выглядеть немного по другому.
Таблицу лучше разбить на две:
таблица Sotrudnik
Kod тип поля Long
Fam тип поля String(30) not null значение по умолчанию "" (пустая строка)
Im тип поля String(12) not null значение по умолчанию "" (пустая строка)
Ot тип поля String(15) not null значение по умолчанию "" (пустая строка)
Программно присваивать новому сотруднику значение поля Kod большее на 1 максимального существующего значения в таблице, например
set rec1 = DBF.OpenRecordset "Select max(Kod) as ma from Sotrudnik", dbopendynaset
If rec1.Recordcount>0 Then
if not isnull(rec1!ma) then
if not isempty(rec1!ma) then
maxcount =rec1!ma
else
maxcount =0
endif
else
maxcount =0
endif
else
maxcount =0
endif
где DBF переменная типа Database, настроенная на эту же базу, a rec1 переменная типа Recordset
Т.к. мы определили максимальный существующий номер в таблице, у новой записи он больше на 1 (для пустой таблицы максимальный номер равен 0)
где F1, I1, O1 - соответственно фамилия, имя и отчество нового сотрудника, в запросе значения текстовых полей берутся в одинарные кавычки.
Таблица Action
Kod тип поля Long 'код сотрудника из предыдущей таблицы
Action тип поля Byte '1 - вошел, 2 - вышел в принципе можно и boolean
Data тип поля Datatime '(полный формат даты в виде 19.06.94 17:34:23)
В программе необходимо предусмотреть, чтобы новая запись вносилась с определенными условиями:
1. Дата и время не могут быть меньше максимального значения этого поля для конкретного человека в базе.
2. Вид нового действия должен быть противоположным тому, которое имеется у записи с максимальным значением поля Data.
Если известен Kod сотрудника (можно заполнить значениями таблицы Sotrudnik какой-либо ListBox для выбора из списка), то определить текущее состояние сотрудника можно с помощью запроса:
Set rec1 = DBF.OpenRecordset "Select * from Action Where Kod=" & Код_сотрудника & " Order by Data DESC", dbopendynaset
Вернется список записей для заданного сотрудника, причем первой записью будет идти его последнее действие
Для вывода списка сотрудников с текущим состоянием выполнить запрос:
Set rec1 = DBF.OpenRecordset "SELECT s.*,(select top 1 a.data from Action a where a.kod=s.kod order by a.data desc) as ddd,(select top 1 a.action from Action a where a.kod=s.kod order by a.data desc) as aaa FROM Sotrudnik s", dbopendynaset
Вернется список, состоящий из ФИО, даты последнего действия (поле ddd) и его вида (поле aaa), т.е. если вернулось ddd= 12.04.06 17:00:00, aaa=2, то сотрудник покинул предприятие в пять часов вечера 12 апреля 2006 года. Следующей записью для этого сотрудника может быть только с признаком 1 (пришел) и датой более указанной ранее, например:
где K1 - код сотрудника, Now - стандартная функция, которая возвращает текущую дату и время.
Чтобы определить, кто находится в здании (текущее состояние действия равно 1), выполнить запрос:
Set rec1 = DBF.OpenRecordset "SELECT * FROM Sotrudnik AS s INNER JOIN Action AS a ON a.kod=s.kod WHERE a.data=(select max(a1.data) from action a1 where a1.kod=s.kod) and a.action=1", dbopendynaset
Те сотрудники, у которых нет ни одной записи в таблице Action, выводиться в списки не будут.
Добрый день, уважаемые эксперты. Помогите в данном вопросе.
Данным запросом:
Data2.RecordSource = "SELECT sum(AmountCopy1) " & _
"FROM Titles WHERE " & Text3.Text & "LIKE '*" & Combo2.Text & "*'" & _
"AND DatZap>=#" & dtaData & "#"
выбираю сумму книг в БД Access и вывожу на DBGrid1. Как вместо DBGrid вывести результат в TextBox? С уважением.
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Робатько Анатолий Васильевич!
Как я понимаю, с источником данных Data2 связан DBGrid1, который автоматически обновляется при изменении запроса и обновления Data2.
Для того, чтобы вывести данные в TextBox необходимо набрать код:
Data2.RecordSource = "SELECT sum() и т.д."
Data2.Refresh
'Вернется Recordset, содержащий не более 1 записи.
'В случае, если записей, удовлетворяющих данному условию нет, то количество записей равно 0. Необходимо проверить.
If Data2.RecordCount>0 then
'Так как в запросе поле не названо, к нему нужно обращаться по номеру
If not isnull(Data2.Recordset.Fields(0)) then
If not isempty(Data2.Recordset.Fields(0)) then
TextBox="Результат - " & Data2.Recordset.Fields(0)
else
'В случае наличия хотя бы в одном из суммируемых полей значения EMPTY, оно и вернется как результат
TextBox="Нет данных, значение EMPTY"
endif
else
'В случае наличия хотя бы в одном из суммируемых полей значения NULL, оно и вернется как результат
TextBox="Нет данных, значение NULL"
endif
else
TextBox="Нет записей, удовлетворяющих данному условию"
endif
Удобнее выводить ответ в LABEL, т.к. значение все равно не редактируется.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 1-ый класс)
Ответ отправлен: 13.04.2006, 17:30 Оценка за ответ: 5 Комментарий оценки: Благодарю за помощь!
Отвечает: Залетин Виталий Викторович
Здравствуйте, Робатько Анатолий Васильевич!
Рекомендую так:
Sub ee()
Dim cnn As New Connection
Dim r As Recordset
Set r = cnn.Execute("SELECT SUM(id) AS SUMA FROM tt")
TextBox1.Text = r.Fields("SUMA").Value
End Sub
--------- Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: Студент)
Ответ отправлен: 15.04.2006, 13:08 Оценка за ответ: 5