Здравствуйте форумчане!
Вопрос. Имеется форма, в которой содержатся данные клиентах, дате добавления, сумме покупке, и т.д. и т.п.
никак не могу разобраться как редактировать записи. Т.е нажимаю кнопку редактировать, открывается форма, где автоматически заполняются поля, имя клиента, дата, вид прихода и т.д. все это можно редактировать. Но когда изменяю данные и сохраняю их, то старые данные не изменяются, а просто добавляется новая строка с новой информацией. я не опытен еще. знаю, что как то надо по колдовать с первичным ключом, но как?
Вот код двух процедур одна на добавление новой записи а другая по идеи на редактирование. форма для добавления и редактирования одна, просто запускается в двух разных режимах.
добавление новой записи (тут все работает)
Private Sub Сохранить1_Click()
On Error GoTo Err_сохранить1_Click
MsgBox "Новые данные успешно были добавлены", vbOKOnly
'-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\
'-\-\-\-\-\ДОБАВЛЕНИЕ ИНФОРМАЦИИ В ТАБЛИЦУ \-\-\-\-\-\-\-
'-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "spPrih_tAdd"
cmd.CommandType = adCmdStoredProc
cmd.CommandTimeout = 250
''
Set prm = cmd.CreateParameter("DAT_R", adDate, adParamInput, , Me.DAT_P)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("COD_KLI", adInteger, adParamInput, , Me.edtClientId)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("SUM_PR", adInteger, adParamInput, , Me.SUM_V)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("NDSPR", adInteger, adParamInput, , SUM_V)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("VID", adInteger, adParamInput, , Me.VID)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("NDS", adInteger, adParamInput, , Me.NDS)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("CustN", adInteger, adParamInput, , CInt(Me.CUST_N))
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("OTSR", adInteger, adParamInput, , Me.OTSR)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("RASH_NTTN", adInteger, adParamInput, , Me.R_NTTN)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("CAN_OPT", adInteger, adParamInput, , Me.FlagCanOpt)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("Nsek", adInteger, adParamInput, , Me.R_NSEK)
cmd.Parameters.Append prm
cmd.Execute
Set cmd = Nothing
Set prm = Nothing
Exit_сохранить1_Click:
Exit Sub
Err_сохранить1_Click:
MsgBox Err.Description
Resume Exit_сохранить1_Click
End Sub
а вот та которая должна редактировать
Public Function Save() As Boolean
Dim StrSql As String
Dim ExSql As New ADODB.Recordset
Dim col As Integer
Dim rst As ADODB.Recordset
Dim StrLog1 As String
Dim StrLog2 As String
On Error GoTo HandleErrors
Set rst = New ADODB.Recordset
Set rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Source = "PRIH_t"
rst.Open Options:=adCmdTable
With rst
If EditMode Then
.Find "NTTN=" + CStr(Me.edtNTTN)
StrLog1 = " После редактирования док-та "
StrLog2 = " До редактирования док-та "
End If
If RTrim(MyCStr(!COD_KLI)) <> MyCStr(Me.edtClientId) Then
StrLog1 = StrLog1 + " COD_KLI:" + MyCStr(Me.dtClientId)
StrLog2 = StrLog2 + " COD_KLI:" + RTrim(MyCStr(!COD_KLI))
End If
!COD_KLI = Me.edtClientId
If RTrim(MyCStr(!SUM_PR)) <> MyCStr(Me.SUM_V) Then
StrLog1 = StrLog1 + " SUM_PR:" + MyCStr(Me.SUM_V)
StrLog2 = StrLog2 + " SUM_PR:" + RTrim(MyCStr(!SUM_PR))
End If
!SUM_PR = Me.SUM_V
If RTrim(MyCStr(!NDSPR)) <> MyCStr(Me.SUM_V) Then
StrLog1 = StrLog1 + " SUM_PR:" + MyCStr(Me.SUM_V)
StrLog2 = StrLog2 + " SUM_PR:" + RTrim(MyCStr(!NDSPR))
End If
!NDSPR = Me.SUM_V
If RTrim(MyCStr(!VID)) <> MyCStr(Me.VID) Then
StrLog1 = StrLog1 + " VID:" + MyCStr(Me.VID)
StrLog2 = StrLog2 + " VID:" + RTrim(MyCStr(!VID))
End If
!VID = Me.VID
If RTrim(MyCStr(!NDS)) <> MyCStr(Me.NDS) Then
StrLog1 = StrLog1 + " NDS:" + MyCStr(Me.NDS)
StrLog2 = StrLog2 + " NDS:" + RTrim(MyCStr(!NDS))
End If
!NDS = Me.NDS
If RTrim(MyCStr(!OTSR)) <> MyCStr(Me.OTSR) Then
StrLog1 = StrLog1 + " OTSR:" + MyCStr(Me.OTSR)
StrLog2 = StrLog2 + " OTSR:" + RTrim(MyCStr(!OTSR))
End If
!OTSR = Me.OTSR
If RTrim(MyCStr(!RASH_NTTN)) <> MyCStr(Me.R_NTTN) Then
StrLog1 = StrLog1 + " RASH_NTTN:" + MyCStr(Me.R_NTTN)
StrLog2 = StrLog2 + " RASH_NTTN:" + RTrim(MyCStr(!RASH_NTTN))
End If
!RASH_NTTN = Me.R_NTTN
If RTrim(MyCStr(!CAN_OPT)) <> MyCStr(Me.FlagCanOpt) Then
StrLog1 = StrLog1 + " CAN_OPT:" + MyCStr(Me.FlagCanOpt)
StrLog2 = StrLog2 + " CAN_OPT:" + RTrim(MyCStr(!CAN_OPT))
End If
!CAN_OPT = Me.FlagCanOpt
If RTrim(MyCStr(!NSek)) <> MyCStr(Me.R_NSEK) Then
StrLog1 = StrLog1 + " NSek:" + MyCStr(Me.R_NSEK)
StrLog2 = StrLog2 + " NSek:" + RTrim(MyCStr(!NSek))
End If
!NSek = Me.R_NSEK
.update
Me.edtNTTN = !NTTN
If EditMode Then StrLog2 = "ID: " + CStr(Me.recID) + StrLog2
StrLog1 = "ID: " + CStr(Me.recID) + StrLog1
End With
If EditMode Then SaveToLog StrLog2, 80
SaveToLog StrLog1, 80
HandleExit:
Exit Function
HandleErrors:
Save = False
MsgBox Err.Description, vbCritical, ""
End Function
Это скорее набросок, я просто примерно так думаю что надо сделать, но это скорее всего не правильно
Просто при редактировании какой то записи, нужно что бы первичный ключ оставался прежним, а информация в столбцах таблицы, которые привязаны к нему, обновлялись.
буду рад любой помощи
http://www.sql.ru/forum/1121902/update-tablicy-s-sohraneniem-pervichnogo-klucha