Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Дублирование записей N-раз в 2003 Аксе
 
 автор: lexalex_84   (12.12.2010 в 20:45)   личное сообщение
 
 

Добрый день господа!!!Подскажите пожалуйста как можно красиво и правильно сделать чтобы в форме была кнопочка "Копирование N-раз". Имеется форма с множествами записями, которые вводятся или выбирается оператором.
При нажатии кнопочки должно вылезти сообщение "Введите количество раз дублирование записей", мы вводим например 3, при этом записей должно клонироваться еще два - несчитая основную запись; и при этом например поле "Литера" должно быть в первой записи равно быть 1, во второй записи 2, и в третьей записи 3..... и т.д....И при этом клонирование запесей допускается только при "Литера" >=1, если "Литера" >1, то выводится сообщение о предложении переправить на 1 и продолжить клонирование также как приводил пример с 3.

  Ответить  
 
 автор: snipe   (12.12.2010 в 21:12)   личное сообщение
 
 


можно узнать про практическое применение данного действа
а то плодить клоны записей как-то не есть хорошо

  Ответить  
 
 автор: lexalex_84   (12.12.2010 в 21:54)   личное сообщение
 
 

Есть форма, где оператор набирает заявку.... и там необходимо не просто вписывать количество а например чтобы было сколько существует количество заявок клонов столько и должно быть записей.....

  Ответить  
 
 автор: lexalex_84   (12.12.2010 в 21:55)   личное сообщение
 
 

у них есть поле "Код" которое никогда неповторяется.....

  Ответить  
 
 автор: Дядя Федор   (13.12.2010 в 08:11)   личное сообщение
11 Кб.
 
 

копировать все кроме кода

Private Sub BtnCopy_Click()
Dim i As Integer
If Me.fcount > 0 Then
For i = 1 To Me.fcount
CurrentDb.Execute ("INSERT INTO Tbl_Price ( Naim )" & _
"SELECT Tbl_Price.Naim FROM Tbl_Price WHERE [IdPrice]=" & Me.IdPrice & ";")
Next
End If
Me.fcount = 0
Me.Requery
End Sub
-> копирует текущую запись заданное в поле fcount раз

  Ответить  
 
 автор: lexalex_84   (13.12.2010 в 09:28)   личное сообщение
22 Кб.
 
 

Private Sub cmd_n_copy_Click()
On Error GoTo error_main

Dim dveri As Recordset
Set dveri = CurrentDb().OpenRecordset("dveri")

Dim n_s As String
Dim n As Integer
Dim schet As Integer
Dim otvet1 As Integer
Dim otvet2 As Integer
Dim lit As Long
Dim lit_n As Long
Dim lit_cc As Long

Me.Refresh

otvet1 = MsgBox("Создать несколько подобных изделий в рамках этого договора ?", vbOKCancel)
If otvet1 = 2 Then
MsgBox "Отменено пользователем"
otvet1 = DoEvents
Exit Sub
End If

n_s = InputBox("введите количество дверей в договоре") 'выводим форму для ввода
n = Val(n_s) 'переводим string в integer

If n = 0 Then
MsgBox "Ошибка ввода", vbCritical 'обрабатываем неправильный ввод
n = DoEvents
Exit Sub
End If

lit = Forms!Двери_Е!litera

If lit = 1 Then
lit_n = 1
lit_cc = 2
lit_n = DoEvents
lit_cc = DoEvents
End If

If lit <> 1 Then
If lit = 0 Then
otvet2 = MsgBox("Начальный номер изделия в договоре 0." & Chr(10) & _
"Исправить на 1 ?", vbOKCancel, "Предупреждение")
lit = DoEvents
If otvet2 = 1 Then
lit_n = 1
lit_cc = 2
End If
If otvet2 = 2 Then
MsgBox "Отменено пользователем"
Exit Sub
End If
End If

If lit <> 1 And Not lit = 0 Then
otvet2 = MsgBox("Начальный номер изделия в договоре не равен 1." & Chr(10) & _
"Исправить?", vbYesNoCancel, "Предупреждение")
If otvet2 = 7 Then
lit_n = lit
lit_cc = lit + 1
lit_n = DoEvents
in_otvet = MsgBox("Нумерация будет продолжена с " & lit_cc & "-го изделия", _
vbOKCancel, "Предупредждение")
If in_otvet = 2 Then
MsgBox "Отменено пользователем"
Exit Sub
End If
End If
If otvet2 = 6 Then
lit_n = 1
lit_cc = 2
End If
If otvet2 = 2 Then
MsgBox "Отменено пользователем"
Exit Sub
End If
End If
End If

Forms!Двери_Е!litera = lit_n
schet = n - lit_n
If schet < 0 Then
MsgBox "Ошибка ввода - текущий номер изделия больше чем у последнего", _
vbCritical 'обрабатываем неправильный ввод
Exit Sub
End If
If schet = 0 Then
MsgBox "Ошибка ввода - текущий номер изделия совпадает с последним", _
vbCritical
Exit Sub
End If

Do Until schet = 0 'запускаем цикл копирования
schet = schet - 1 '{!}f переписать на уровне записей
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70
Forms!Двери_Е!litera = lit_cc
Forms!Двери_Е.Refresh
lit_cc = lit_cc + 1
DoCmd.GoToRecord acDataForm, "Двери_Е", acLast
Loop


Exit Sub

error_main:
MsgBox err.Description
Exit Sub

End Sub





Вот весь код....вылазит ошибка. см ошибка.JPG.
Имеется: таблицы хранятся в Мускуле, а в Аксе только линкованные таблицы, запросы, формы, отчеты.
Если вся база в Аксесе, то ошибок нет.....

  Ответить  
 
 автор: lexalex_84   (13.12.2010 в 09:48)   личное сообщение
 
 

Добрый день господа!!!Посмотрите пожалуйста почему вылазит ошибка.....уже неделю мучаюсь и никак неполучается...... Самое главное ошибка появляется только когда все таблицы перекинуты в Мускул - в Аксе остаются только линкованные таблицы....

При нажатии на кнопку "Копировать N-раз", вылазит форма с сообщением как показано в коде


otvet1 = MsgBox("Создать несколько подобных изделий в рамках этого договора ?", vbOKCancel)
If otvet1 = 2 Then
MsgBox "Отменено пользователем"
Exit Sub
End If

n_s = InputBox("введите количество дверей в договоре")



затем мы вводим количество дверей необходимых для клонирования. Для клонирования допускается только поле № изделия(litera) равным 1, если оно будет равно нуль или будет больше единицы то клонирование его выполнить нельзя.
т.е если мы посмотрин на картринку Форма Двери Евро-межгород.JPG, то мы должны получить в итоге клонированных столько записей сколько мы укажем в "введите количество дверей в договоре" включая и саму запись, т.е если мы указали 5, то он должен скопировать 4 раза.

Например: на картинке Двери Евро-межгород.JPG показан №дог 3137 и все остальные поля - это запись 127585. Значит если мы нажмем на конопку "Копировать N-раз" и введем в предложенной форме "введите количество дверей в договоре" число 3, то тогда эта запись 127585 с №дог 3137 и всеми остальными полями должны клонироваться включая эту запись ровно три раза, т.е клонируется еще два раза. Тогда получим что в записях 127585;127586 и 127587 будет одна и та же информация.
При этом поле № изделия(litera) должно идти по порядку до числа равному числу введенному в "введите количество дверей в договоре", а вся остальная информация без изменения.

Все поля находящиеся в этой форме имеются и в линкованной таблице "dveri", внутри поле "Код" ключевое.



Все скрины находятся здесь http://zalil.ru/30130817

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList