powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / копирование записей
22 сообщений из 47, страница 2 из 2
копирование записей
    #39895591
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рисунок конечного результата как должно быть при нажатии кнопки.
...
Рейтинг: 0 / 0
копирование записей
    #39895763
Oleg_Ang, откройте еще один рекордсет (лучше пустой) на этой таблице. Цикл по записям RS1, добавление записей в RS2.

...WHERE tbTarif.DataN=" & Me.DataOld & ";" - неправильное использование даты. Читайте ФАК.
...
Рейтинг: 0 / 0
копирование записей
    #39896413
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий, вот что-то написал, но выдает ошибку на строке Update. где я что упустил
...
Рейтинг: 0 / 0
копирование записей
    #39896510
Oleg_Ang, тип вашего поля "KodT" случайно не счетчик? Оно точно первое?
Выполните пошаговую отработку кода и проверьте, какое значение вы присваиваете, нет ли такого уже.
В таблице нет других полей с уникальным индексом?

В вашем коде нет цикла по записям rst. Даже если код заработает, это будет создание копии только одной записи.
И еще, цикл по полям начинается с 3, это четвертое по счету поле, а третье выпадает. Хотя может так и задумано...
...
Рейтинг: 0 / 0
копирование записей
    #39896662
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий
В вашем коде нет цикла по записям rst.

Как же нет?
Код: vbnet
1.
For i to rst.RecordCount
...
Рейтинг: 0 / 0
копирование записей
    #39896700
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
rst2.fields(0)=lngID '!кодТ


А Вы уверены что в таблице-источнике формы значение кодового поля + 1 не может совпасть со значением ID в таблице Tarif-о чем и сообщается
(да и вообще "трогать" ключ-счетчик есть не правильно от слова совсем)
...
Рейтинг: 0 / 0
копирование записей
    #39896702
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в догонку:циклом Вы перемещаетесь по полям записи,а не по записям рекордсета
...
Рейтинг: 0 / 0
копирование записей
    #39896899
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий, да это счетчик. я брал подобное решение здесь http://msa.polarcom.ru/st/s0000004.htm
...
Рейтинг: 0 / 0
копирование записей
    #39896930
ИВП
Кривцов Анатолий
В вашем коде нет цикла по записям rst.

Как же нет?
Код: vbnet
1.
For i to rst.RecordCount

Цикл, это когда есть переход по записям, а у вас нет MoveNext.
Вы несколько раз копируете одну и ту же запись, только увеличивая lngID.
Переменную i вы нигде не используете. И вообще, перемещение по записям обычно выполняется в цикле Do Until rst.EOF.

Ну и о присвоении значения счетчику - согласен с sdku.
...
Рейтинг: 0 / 0
копирование записей
    #39896940
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий, да я пробовал и так и сяк. почему при таком коде пишет что уже конец файла и не идет в цикл (выделено жирным). может что-то со строкой strSQL не так. но ставил в запрос, там все выводит. а что по поводу счетчика? если нельзя, то как тогда добавить запись?

Код: vbnet
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Private Sub Copy_Click()
'Добавляет новые записей в таблицу "tbTarif"
Dim lngID As Long, v As Long
Dim rst As DAO.Recordset, rst2 As DAO.Recordset
Dim i As Integer
Dim strSQL As String, strSQL1 As String

strSQL = "SELECT Max(tbTarif.KodT) AS [Max-KodT] FROM tbTarif"
Set rst = CurrentDb.OpenRecordset(strSQL, dbReadOnly)
v = rst.Fields(0)

'v = DMax("KodT", "tbTarif")             'MAX значение ключевого поля счетчика
lngID = v + 1                            'Значение ключ. поля новой записи

strSQL1 = "SELECT * FROM tbTarif"
Set rst2 = CurrentDb.OpenRecordset(strSQL1, dbOpenDynaset)

strSQL = "SELECT * FROM tbTarif WHERE tbTarif.DataN=#" & Format(Me.DataOld, "dd\/mm\/yyyy") & "#;"
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
    Do Until rst.EOF
        rst2.AddNew
        'Заполнение полей значениями
        rst2.Fields(0) = lngID                   ' !KodT - это счетчик в таблице tbTarif
        rst2.Fields(1) = Me.DataNew         ' !DataN новая дата заполнения полей
            For j = 2 To rst.Fields.Count - 1
                rst2.Fields(j) = rst.Fields(j)
            Next j
        rst2.Update
        lngID = lngID + 1
    rs.MoveNext
    Loop
    
    On Error Resume Next
    rst.Close
    rst2.Close
    Set rst = Nothing
    Set rst2 = Nothing
End Sub
...
Рейтинг: 0 / 0
копирование записей
    #39896950
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сори, тупанул с датой. не ту набрал вот потому и не пускал в цикл, а так вроде все заработало. видать после выходных не внимателен)
...
Рейтинг: 0 / 0
копирование записей
    #39896965
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_Ang
Кривцов Анатолий, да это счетчик. я брал подобное решение здесь http://msa.polarcom.ru/st/s0000004.htm
Код: vbnet
1.
 ...v = DMax("exRecordID", "tblExample")   'MAX значение ключевого поля (НЕ СЧЕТЧИКА !)..
...
Рейтинг: 0 / 0
копирование записей
    #39896972
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, там есть и второй вариант
...
Рейтинг: 0 / 0
копирование записей
    #39896979
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял Ваш код выполняет следующее:
-подсчитывает количество записей на определенную пользователем дату и добавляет в таблицу tbTarif такое же количество записей с другим значением поля rst2.Fields(1) (не знаю как оно у Вас называетя и правильно ли я понял Вашу "хотелку")
-отстаньте от кодового поля-счетчика,добавленным записям значение этого поля задается автоматически
...
Рейтинг: 0 / 0
копирование записей
    #39897053
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, да точно. это поле дата rst2.Fields(1) = Me.DataNew ' !DataN новая дата заполнения на момент изменения
тупо меняется дата и все. может есть пример что-то упростить в моем коде?
...
Рейтинг: 0 / 0
копирование записей
    #39897113
Oleg_Ang
тупо меняется дата и все. может есть пример что-то упростить в моем коде?
Что бы что-то посоветовать, надо сначала понять, с какой целью вы дублируете данные, меняя только дату. Может вам надо хранить даты не в этой таблице, а в подчиненной, связанной с ней по KodT?
...
Рейтинг: 0 / 0
копирование записей
    #39897217
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если добавить новые записи с пустыми полями,кроме поля myDate с новым значением, то так:
Код: vbnet
1.
2.
3.
4.
5.
Dim myC, i
myC = DCount("*", "tbl", "myDate=#" & Format(Me.stDate, "mm\/dd\/yyyy\#"))
For i = 1 To myC
CurrentDb.Execute "insert into tbl(myDate) values (#" & Format(Me.Ndate, "mm\/dd\/yyyy\#") & ")"
Next

если обновить новым значением поле в существующих записях-запрос на обновление (вообще код не нужен)
Поясните что именно Вы хотите
...
Рейтинг: 0 / 0
копирование записей
    #39897399
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, доброе утро. так вроде все объяснил выше. есть штатное расписание для каждого человека (занесено в табл tbTarif). если меняется штатное (вводятся изменения) на определен. дату, то чтобы все опять не набирать по каждому человеку нужно продублировать предыдущее штатное только с НОВОЙ ДАТОЙ (rst2.Fields(1) = Me.DataNew), но все старые значения по остальным полям сохранить в новых полях, а потом уже по единичным работникам вносить изменения. так проще чем опять вводить 350 записей вручную. как-то так.
вот фрагмент формы на рисунке. где есть две кнопки. копирования и удаления. кнопка удаления почему не работает пишу такой код, а в таблице записи не удаляются. в чем моя ошибка?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Del_Click()
'Удаление записей из таблицы "tbTarif" на установленную дату
Dim strSQl As String

If MsgBox("Хотите удалить данные на " & Me.DataOld & "?", vbYesNo + vbInformation + vbDefaultButton1, "Удаление данных") = vbNo Then Exit Sub
    strSQl = "DELETE * FROM tbTarif WHERE tbTarif.DataN=#" & Format(Me.DataOld, "dd\/mm\/yyyy#")
    CurrentDb.Execute strSQl
    Me.Requery
End Sub
...
Рейтинг: 0 / 0
копирование записей
    #39897406
Oleg_Ang
strSQL = "SELECT * FROM tbTarif WHERE tbTarif.DataN=#" & Format(Me.DataOld, "dd\/mm\/yyyy") & "#;"

сори, тупанул с датой. не ту набрал
...
почему не работает пишу такой код, а в таблице записи не удаляются. в чем моя ошибка?

strSQl = "DELETE * FROM tbTarif WHERE tbTarif.DataN=#" & Format(Me.DataOld, "dd\/mm\/yyyy # ")
CurrentDb.Execute strSQl
Не знаю, как вы справились первый раз, но грабли остались. Дата в запросе должга быть в формате MM/DD/YYYY. Также замыкающая "#" указана неправильно.
...
Рейтинг: 0 / 0
копирование записей
    #39897418
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий, спасибо большое все прошло)
...
Рейтинг: 0 / 0
копирование записей
    #39897459
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой лобовой подход к решению задачи штатного расписания, совершенно не приемлем для базы данных. Я предвижу огромные проблемы уже в ближайшее время. Зачем копировать все записи, например, если введена только лдна новая должность? Или произошло одно изменение, скажем, в размере премии? А как быть, если, наоборот, какая-то ставка упразднена? Или работник уволился? Работник уволится вместе с должностью? Или должность исчезнет вместе с работником? ....
Штатное расписание и работники - это две разные сущности. И объединять их в одной таблице - ошибка (мягко говоря!). Необходимо проработать сущность "Штатное расписание" с соответствующим набором таблиц и процедур по их ведению. Включая историю и аудит лог. Необходимо создать базу данных на людей - со всеми необходимыми данными. И, также с процедурами ведения, истории и лога. И только после этого проработать базу данных совмещения штатного расписпния и людей. И здесь тоже нужна будет история и лог.
Задача не такая простая, как кажется.
...
Рейтинг: 0 / 0
копирование записей
    #39897492
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry
+100500
"Не все так просто как кажется" (Козьма Прутков)
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / копирование записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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