Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 264
от 18.04.2006, 12:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 144, Экспертов: 27
В номере:Вопросов: 3, Ответов: 7


Вопрос № 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 содержит либо "Вход" либо "Выход", соответственно дата и время - это либо время и дата входа/выхода

скажите как определить список людей которые сейчас находяться в здании
Отправлен: 13.04.2006, 07:12
Вопрос задал: Гришин Денис Васильевич (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: EPDSota
Здравствуйте, Гришин Денис Васильевич!

Я так думаю - если человек не вышел - то число его проходов (вход-выход) должно быть четным. Поэтому придеться в таблице быть аккуратным с регистрацией входов выходов.
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

Отвечает: Genyaa
Здравствуйте, Гришин Денис Васильевич!

Можно сделать простой запрос с групповой операцией по 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)

maxcount = maxcount + 1
DBF.Execute "Insert Sotrudnik (Kod,Fam,Im,Ot) values ('" & F1 & "','" & I1 & "','" & O1 & "')"

где 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 (пришел) и датой более указанной ранее, например:

DBF.Execute "Insert Action (Kod,Data,Action) values (" & K1 & ",cdate('" & Now & "'),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, выводиться в списки не будут.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 1-ый класс)
Ответ отправлен: 13.04.2006, 19:09

Отвечает: Залетин Виталий Викторович
Здравствуйте, Гришин Денис Васильевич!
Попробуйте выполнить запрос:

SELECT FIO, DATA, TIME FROM table_name WHERE ACTION LIKE '%Вход%'
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: Студент)
Ответ отправлен: 15.04.2006, 13:14


Вопрос № 40.169
Добрый день, уважаемые эксперты. Помогите в данном вопросе.
Данным запросом:
Data2.RecordSource = "SELECT sum(AmountCopy1) " & _
"FROM Titles WHERE " & Text3.Text & "LIKE '*" & Combo2.Text & "*'" & _
"AND DatZap>=#" & dtaData & "#"
выбираю сумму книг в БД Access и вывожу на DBGrid1. Как вместо DBGrid вывести результат в TextBox? С уважением.

Отправлен: 13.04.2006, 10:46
Вопрос задал: Робатько Анатолий Васильевич (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Робатько Анатолий Васильевич!

Как я понимаю, с источником данных 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

cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
cnn.Open "c:11db1.mdb"

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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.30 (beta) от 09.04.2006
Яндекс Rambler's Top100

В избранное