1 / 1 / 0
Регистрация: 01.10.2014
Сообщений: 29
1

Обновление таблицы с сохранением первичного ключа

20.10.2014, 10:00. Показов 831. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане!
Вопрос. Имеется форма, в которой содержатся данные клиентах, дате добавления, сумме покупке, и т.д. и т.п.
никак не могу разобраться как редактировать записи. Т.е нажимаю кнопку редактировать, открывается форма, где автоматически заполняются поля, имя клиента, дата, вид прихода и т.д. все это можно редактировать. Но когда изменяю данные и сохраняю их, то старые данные не изменяются, а просто добавляется новая строка с новой информацией. я не опытен еще. знаю, что как то надо по колдовать с первичным ключом, но как?
Вот код двух процедур одна на добавление новой записи а другая по идеи на редактирование. форма для добавления и редактирования одна, просто запускается в двух разных режимах.

добавление новой записи (тут все работает)
Visual Basic
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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("VidRash", adVarChar, adParamInput, 200, r_vid)
'        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
а вот та которая должна редактировать

Visual Basic
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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
Это скорее набросок, я просто примерно так думаю что надо сделать, но это скорее всего не правильно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2014, 10:00
Ответы с готовыми решениями:

Обновление первичного ключа после выполнения запроса
У меня в классе есть такой метод: public void Delete(int id) { using...

Обновление первичного ключа через хранимую процедуру
Пишу клиент - серверное приложение: Delphi + Firebird. Для взаимодействия с БД написал несколько...

Запрос на создание таблицы. Установка первичного ключа.
Доброго времени суток. Ситуация следующая: у меня есть запрос на создание таблицы. Мне нужно в...

Связь 1:N по части первичного ключа главной таблицы
Здравствуйте! Возник такой вопрос: имеется таблица (допустим, table1), для нее определен первичный...

5
4043 / 1429 / 394
Регистрация: 07.08.2013
Сообщений: 3,571
20.10.2014, 10:11 2
что-то вы перемудрили
слишком много кода
вообще форма если правильно настроена обычно сразу дает редактировать запись, ну или вносить новую (если конечно разработчик этого захотел)
с записями в таблице можно работать и запросами - необязательно это делать через рекордсет. Тем более что я как-то слышал мнение что запрос отрабатывает (во многих случаях) быстрее чем код

а вот что бы разобраться где у вас непонятки - нужна база данных
которую к сожалению вы не прикрепили
0
Заблокирован
20.10.2014, 10:33 3
snipe, вы слишком перемудряете с ответом
надеюсь ваш пользователь еще не убежал
..пользователю я так скажу, я умею вскрывать базу, которая например
находится на иностранном ресурсе.. достаточно нужных тегов
0
1 / 1 / 0
Регистрация: 01.10.2014
Сообщений: 29
20.10.2014, 10:39  [ТС] 4
Просто мне не понятно как сделать так, что бы при редактировании не добавлялась новая запись с новым первичным ключом, а просто обновлялась информация в конкретной строке. (Первичный ключ при этом не увеличивался на один, а оставался прежним)
Может кто нибудь поделиться своим опытом, может пример кода на эту тему подкинет. буду раз любой помощи
0
Заблокирован
20.10.2014, 10:46 5
Вам если нужно полностью обновить ключ, то удалите его программно а затем запишите новый
и всего делофф

Добавлено через 1 минуту
Найдите выполняемое значение Remove ..
оно может еще называться RemoveKey

Добавлено через 1 минуту
Цитата Сообщение от NewNeron Посмотреть сообщение
Может кто нибудь поделиться своим опытом
я просто не до конца понимаю что требуется.. , но с радостью бы помог.. пока я без дела ))
0
1 / 1 / 0
Регистрация: 01.10.2014
Сообщений: 29
20.10.2014, 10:46  [ТС] 6
Спасибо за идею, буду двигаться в этом направлении
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2014, 10:46
Помогаю со студенческими работами здесь

Не удаляется запись из таблицы. Нет первичного ключа
Доброго времени суток. Возникла такая проблема: есть 3 таблицы Library { BookName - Primary...

Как выглядит SQL запрос на получение первичного ключа с таблицы
Подскажите пожалуйста,как выглядит SQL запрос на получение первичного ключа таблицы c SQL Server

Извлечение макимального значения первичного ключа из одной таблицы в MySQL
Есть таблица в MySql с полем с уникальными первичными ключами ID... Можно ли как-то извлечь...

Создать таблицы, генераторы для получения значения первичного ключа
Создать таблицы, генераторы для получения значения первичного ключа. Каждая таблица должна иметь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru