|
|
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
Приятно иметь дело с БД профессионалами Все догнал как работает FindFirst в рекордсете! Сделал перекачку данных с помощью 2- х рекордсетов из одной таблы в другую). Скорость,просто чума. Старый способ через переброску с помощью listbox работал (для 1200 записей) примерно 4 минуты, а через рекордсеты 3 секунды!!! Спасибо Вам ребята большое,чтобы без Вас делал. Но есть другая фича. Есть две таблицы,между ними реляция 1 ко многим. В одной хранятся даты отпусков работника(отпуск может разделен на 2 или 3 периода) это подчиненная , а в главной таблице хранятся табель работника. В табеле ставится буква "О" если работник на данный момент в отпуске. Так вот,как же с помощью рекордсетов могут общаться таблы ,у которых отношение 1 ко многим. Может посоветуете что нибудь... Буду очень рад любым советам. Нужно в рекордсетах взять к примеру запись в главной и обработать соответсвующие ей записи в подчиненной. Как с этим быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:20 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
для этого открываешь второй рекордсет не как таблу, а set rs=currentdb.openrecordset("select * from Tab2 where Tab2.id='" & rs!id & "'") если id текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:27 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
А как тогда в рекордсете перемещаться по запам. // select * from Tab2 where Tab2.id='" & rs!id & "'" Открывать рекордсет в цикле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:31 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
перемещаешься внутри rs2 как обычно (кстати в строке д.б. так set rs 2 =currentdb.openrecordset("select * from Tab2 where Tab2.id='" & rs 1 !id & "'") ) при переходе на новую запись в rs1 закрываешь rs2 и открываешь его заново. получаешь рекордсет для нового значения rs1!id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:38 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
Шурик 1,спасибо тебе большое,но может кодом поможешь,я запутался..Сижу туплю.. Кстати не подскажешь. Рекордсеты - это вообще работа непосредственно с ядром БД Jet или я не прав? Уж быстро они черти работают (Даже начал на аксесу смотреть по другому) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:44 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
дык, а чего собственно надо-то, поточнее. >Рекордсеты - это вообще работа непосредственно с ядром ... рекордсеты это открытие копии выбираемых данных в оперативных мозгах (ну, конечно, сколько влезет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:51 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
Постараюсь объяснить. БД для учета и автоматизированного заполнения табелей рабочего времени. Вот есть работник. Он либо работает в смену,либо в отпуске. На него заполняется табель.На каждый день,главная таблица содержит в частности 31 поле куда заносится количество отработанных часов (напр 7.2) . Если работник находится в очередном отпуске в этот день в поле ставится буква "О". То есть если он весь месяц в отпуске за каждый день ставится буква "O" или например он с 15 числа уходит в отпуск,то до 15 числа проставляются часы, а потом на 15,16 17 ...проставляются в поля буквы "О". Графики работы у меня уже заполняются,благодаря твоей помощи. А вот надо чтобы отпуска заполнялись (т.е в табеле главной таблицы ставилась на отпускные дни буква "О") с помощью подчиненной таблицы,в которой хранятся даты отпусков. Например если труженик идет 2 раза в год в отпуск,то есть 2 записи на него.В каждой записи поля "начало отпуска" и "конец отпуска" в виде дат. Т.е. прога автоматом должна заполнять отпускные дни работников в соответствии с хранящимися датами отпусков в подчиненной таблице (многие) Вот такая вот штука. У меня до сих пор вся эта хреновина работала так. Загружал все в листбоксы через SQL (также даты отпусков),а потом с помощью метода листбокса Column выдирал из литсбоксов данные и записывал в поля табеля.Ну естественно делал кучу фуций для преоразования дат. Ну естественно быстродействие гнилое. Хочу все это переделать на манер рекордсетов. Вот это мемуары получились. Может теперь что то прояснил. Подскажи,Шура...Может посоветуешь что.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 16:15 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
ну ты блин и Лев Толстой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 16:18 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
Так не подскажешь что можно сделать то ..... Прога работает как дохлая черепаха.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 16:22 |
|
||
|
Просветите начинающего Даосиста
|
|||
|---|---|---|---|
|
#18+
set rs1=currentdb.openrecordset("Tabl1") - с отпусками set rs2=currentdb.openrecordset("Tabl2") - с табелем while not rs1.eof rs2.findfirst "[id]=" & rs1!id rs2.edit 'при условии что Tabl2 имеет следующий вид: Сотр-1-2-3-...-31 'если отпуск заканчивается в другом месяце, то проставляем до конца 'текущего endotp = iif(month(rs1.КонецОтпуска)=month(rs1.НачалоОтпуска), _ rs1.КонецОтпуска, _ rs1.КонецОтпуска-day(rs1.КонецОтпуска)) for i=day(rs1.НачалоОтпуска) to day(endotp) rs2(i+1)="O" next i rs2.update rs1.movenext wend во как не забудь хвост отпуска анологично запихать в следующий месяц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 16:34 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32202171&tid=1680672]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 347ms |

| 0 / 0 |
