powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / выборка записей из таблици
5 сообщений из 5, страница 1 из 1
выборка записей из таблици
    #35096752
Anapurna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет всем
это таблица БД для кадров
и для решения задачи тут по моему не обиоти без VBA

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 Din_ID	DDate	Count_долж_ID	долж_ID	User_ID	Out	зарплата 
9488	26.01.2008	1	1002	3442	No	1000
9487	25.01.2008		1203	1104	Yes	100
9489	24.01.2008		1203	2456	No	100
9095	23.01.2008		1203	1102	No	800
7091	01.01.2008	1	1002	1098	No	705
7092	01.01.2008		1201	1099	No	590
7093	01.01.2008		1203	1100	No	530
7094	01.01.2008		1203	1101	No	530
7095	01.01.2008		1203	1102	No	530
7096	01.01.2008		1203	1103	No	530
7097	01.01.2008		1203	1104	No	530
7098	01.01.2008		1301	1105	No	530

обсудим на примере
для получения состава конкретного отдела на дату например 16.01.2008
создаём временную таблицу TABtmp1 ( отсортирован по уб поле DDate )
И в этом таблице удалим лишние записы при её анализе
логика такая
1. если Count_долж_ID=1 удаляем с таблици все заприсы долж_ID =1002 в данном случае удаляем запись 7091, кроме полледней по дате т.е. запись 9488
продолжимь
2. если Count_долж_ID=Null и Out=Yes, что обозначаеть что сотрудник уволень или переведён с этого отдела , то удаляём всё записи удовл User_ID=1104, запись 9487 и 7097
3. если Count_долж_ID=Null и Out=No, то остовляем записей для каждого сотрудника последней по дате осталние удаляем

итого получаеться


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 Din_ID	DDate	Count_долж_ID	долж_ID	User_ID	Out	зарплата 
9488	26.01.2008	1	1002	3442	No	1000
9489	24.01.2008		1203	2456	No	100
9095	23.01.2008		1203	1102	No	800
7092	01.01.2008		1201	1099	No	590
7093	01.01.2008		1203	1100	No	530
7094	01.01.2008		1203	1101	No	530
7096	01.01.2008		1203	1103	No	530

вот тот которий оставить в таблице для каждого User_ID записы на последную дату
но не могу реализовать точьно логику описанную по тем 3-м пунктам выше


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub Command280_Click()

DoCmd.RunSQL " SELECT TABtmp.*  INTO TABtmp1 FROM SDtmp ORDER BY User_ID, DDate DESC;"

Dim db As ADODB.Connection
Dim tb As ADODB.Recordset
Set tb = New ADODB.Recordset
Set db = Application.CurrentProject.Connection
tb.Open "SDtmp1", db, adOpenForwardOnly, adLockOptimistic

m = tb!User_ID
i =  0 
Do Until tb.EOF
    If m <> (tb!User_ID) Then
       m = tb!User_ID
       i =  0 
    End If
    i = i +  1 
    If i >  1  Then
        tb.Delete
    End If
    tb.MoveNext
Loop
tb.Close
db.Close
Set tb = Nothing
Set db = Nothing

End Sub


помогите а то 2-ой день мучаюсь и не получаеться
...
Рейтинг: 0 / 0
выборка записей из таблици
    #35096994
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять по приведенному описанию что вы хотите получить.
Обычно таблица назначений (соединяющую таблицы должностей и работников) хранит всю историю перемещений кадров. Вы хотите убить эту историю? Зачем?
Напишите запрос который соединит эти таблицы нормально
пример для аксесс:
SELECT MAX(Дата), LAST(ДолжностьID) As рДолжностьID, LAST(РаботникID) As рРаботникID
GROUP BY ДолжностьID, РаботникID
...
Рейтинг: 0 / 0
выборка записей из таблици
    #35097152
Anapurna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffОбычно таблица назначений (соединяющую таблицы должностей и работников) хранит всю историю перемещений кадров. Вы хотите убить эту историю? Зачем?
у меня точно так таблица назначений таблицы должностей и таблица работников
при поиске состава отдела на конкетную дату я делаю виборку от таблицы назначений
в таблицу TABtmp1
а запрос тут не помог потому что условия сложние

1. если Count_долж_ID=1 удаляем с таблици все заприсы долж_ID =1002 в данном случае удаляем запись 7091, кроме полледней по дате т.е. запись 9488
продолжимь
2. если Count_долж_ID=Null и Out=Yes, что обозначаеть что сотрудник уволень или переведён с этого отдела , то удаляём всё записи удовл User_ID=1104, запись 9487 и 7097
3. если Count_долж_ID=Null и Out=No, то остовляем записей для каждого сотрудника последней по дате осталние удаляем

1.1 Count_долж_ID=1 на пример для управ. отделом вед количество для него всего 1 и итого при поиске состава отдела на конкетную дату надо оставить тот запись которий по дате самый поздний для этой конкретной долж_ID =1002
3.1 эсли на должность могут быть несколько сотрудников ( лаборант на пр.) то тогда надо учитивать и User_ID и для каждого из них оставить по дате самый поздний
2.1 а если сотрудник по информации последней ее записы уволен Out=Yes то надо удалит все записи на его b]User_ID
вот вся логика и ее не помести в простой запрос
а нужен VBA
...
Рейтинг: 0 / 0
выборка записей из таблици
    #35102196
Anapurna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
???
...
Рейтинг: 0 / 0
выборка записей из таблици
    #35105369
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anapurna???
Скидывайте результат запроса из БД в АДО Рекордсет.
Запишите себе на бумажке алгоритм обработки, потом (раз запросом это не сделать) примените записанный алгоритм к имеющемуся объекту ADO Recordset. Какое-то здорово кривое решение.
Может, если один запрос не помог, поможет последовательность из 2-х или 3-х SQL-инструкций?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / выборка записей из таблици
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]