Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
1

Как сделать только что вставленную запись текущей???

21.02.2012, 12:10. Показов 3058. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вставляю запись через (запрос длинный много полей)

Visual Basic
1
DoCmd.RunSQL "INSERT INTO Табл (Поля) VALUES (Значения)"
Через CurrentProject.Connection.Execute выдаёт ошибку что слишком много полей, поэтому не могу воспользоваться CurrentProject.Connection.Execute("SELECT @@IDENTITY")
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2012, 12:10
Ответы с готовыми решениями:

Как после добавления записей в БД сделать перенаправление на только что созданную запись?
Добрый вечер! Подскажите пжл, как после добавления записей в базу данных сделать перенаправление...

Как в подчинённой форме сделать текущей последнюю запись
Помогите, кто сможет. :-) У меня есть основная форма и подчинённая. В основной форме есть кнопка,...

Как сделать запись в адотейбл текущей если знаю код этой записи?
в dblookupcombobox вывожу фамилии и с помощью dblookupcombobox.keyvalue беру код записи которую...

Как сделать запись в реестр win7 64. В реестр попадает только последняя запись
Добрый вечер! Не могу сделать запись в реестр win7 64. Microsoft.Win32.RegistryKey hklm =...

34
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
27.02.2012, 12:21  [ТС] 21
Author24 — интернет-сервис помощи студентам
С последним вопросом разобрался, не те поля выводил
А как быть с примененим изменений:
При переходе на другую запись не применять (вернуть прежние значения), а по нажатию кнопки применить????
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
27.02.2012, 12:25  [ТС] 22
Оказывается! - запрос там вообще не нужен , а я голову ломал
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
27.02.2012, 13:13 23
Цитата Сообщение от xtreme Посмотреть сообщение
Я хочу сделать чтобы если пользователь переходит на другую строку, то данные возвращались, те которые были, а если нажал на кнопку, то они применяются (вносятся изменения)

Не много переделал, но теперь не работает, ошибка
У меня такое впечатление, что вы работаете методом инженерного тыка.
Воозвратимся к прежнему, несколько модифицированному, варианту
Visual Basic
1
2
3
4
5
6
7
8
9
Dim vcanc As Boolean
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
  If vcanc Then vcanc = False Else Me.Undo: Cancel = True
End Sub
 
Private Sub Кнопка6_Click()
  If Me.Dirty Then vcanc = True: Me.Dirty = False
End Sub
Думаю ваши пользователи не будут в восторге от того, что случайный переход на другую запись, или нажатие на область выделения текущей записи, или иные действия, приводящие к попытке сохранить изменения, вызывают отмену того, что они "в поте лица" набирали.
А почему бы вам не отказаться от кнопки и не сделать просто так
Visual Basic
1
2
3
4
5
6
7
8
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim i&
  i = MsgBox("Сохранить изменения?", vbYesNoCancel)
  If Not (i = vbYes) Then
    Cancel = True
    If i = vbCancel Then Me.Undo
  End If
End Sub
Если нажали: Да-изменения сохранить; Нет-продолжить корректирование; Отмена-изменения отменить.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
27.02.2012, 13:16 24
Цитата Сообщение от xtreme Посмотреть сообщение
С последним вопросом разобрался, не те поля выводил
Вероятно вас запутали поля подстановки в таблице.
Мое мнение, что - это зло, которым не стоит пользоваться.
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
27.02.2012, 14:00  [ТС] 25
Цитата Сообщение от minob Посмотреть сообщение
Вероятно вас запутали поля подстановки в таблице.
Мое мнение, что - это зло, которым не стоит пользоваться.
К форме был привязан запрос, в котором поля брались из разных таблиц.
От того и не изменялись данные в нужной мне таблице (в столбце ид ссылок)
а менялись данные в полях значений не идентификаторов
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
27.02.2012, 15:16  [ТС] 26
Цитата Сообщение от minob Посмотреть сообщение
У меня такое впечатление, что вы работаете методом инженерного тыка.
К сожелению другому не научили, учусь по возможности

Спасибо за помощь (точнее за решение)!
Сошёлся к такому варианту:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim vcanc As Boolean
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim rAnswer As Integer
 
If vcanc Then
  vcanc = False
  
Else
  rAnswer = MsgBox("Сохранить изменения", vbYesNoCancel)
  If Not (rAnswer = vbYes) Then
    Cancel = True
    If rAnswer = vbNo Then Me.Undo
  End If
End If
 
End Sub
 
Private Sub Кнопка_Click()
  If Me.Dirty Then vcanc = True: Me.Dirty = False
  Me.Refresh
End Sub
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
27.02.2012, 15:21  [ТС] 27
И ещё такой вопрос, может что-то подскажешь:
К примеру есть запись, которая отличается только значением одного поля. Можно сделать, чтобы данные не перебивать, а на основе текущей записи, изменив значение поля, добавить запись, а не изменять текущую???
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
27.02.2012, 17:09 28
Цитата Сообщение от xtreme Посмотреть сообщение
К примеру есть запись, которая отличается только значением одного поля. Можно сделать, чтобы данные не перебивать, а на основе текущей записи, изменив значение поля, добавить запись, а не изменять текущую???
Сделать это можно по разному. Ну, например, так (направление для размышления). Здесь, не затрагивая текущую запись, формируется новая, в которую помещаются нужные значения.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim ar, i%, s$
  s = ",Id,"
  If Not (Me.NewRecord Or Me.Dirty) Then
    With Me.Recordset
      ar = .GetRows(1)
      .AddNew
      For i = 0 To .Fields.Count - 1
        If Not s Like "*," & .Fields(i).Name & ",*" Then Me(.Fields(i).Name) = ar(i, 0)
      Next
    End With
  End If
Нужно учесть, что в коде использовано, не всегда поддерживаемое совпадение наименований полей источника записей формы и соответствующих полей на форме, но из этой ситуации можно будет выкрутиться.
В переменной s содержиться список полей, разделенных запятой, источника записей формы, которые не должны инициализироваться в новой записи. Причем список начинается и оканчивается запятой. Если данный код будет оформлен в виде функции модуля формы, то строка s может быть параметром функции.
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
28.02.2012, 11:18  [ТС] 29
Подскажи пожалуйста: у меня не во всех таблицах стоит счётчик на ид (базу начинал делатьне я), пытаюсь добавить ид
Me.Recordset("id_Поле") = 1, но выдаёт ошибку 3020,
Update или CancelUpdate без AddNew или Edit
Обновление или Отмена обновления без Добавления или Редактирования
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
28.02.2012, 12:43 30
Цитата Сообщение от xtreme Посмотреть сообщение
Подскажи пожалуйста: у меня не во всех таблицах стоит счётчик на ид (базу начинал делатьне я), пытаюсь добавить ид
Me.Recordset("id_Поле") = 1, но выдаёт ошибку 3020
Если правильно понял вопрос
Visual Basic
1
2
3
4
5
  With Me.Recordset
    .AddNew 'или Edit, если корректируете Id 
    !id_Поле = 1
    .Update
  End With
а лучше
Visual Basic
1
Me!id_Поле = 1
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
28.02.2012, 13:27  [ТС] 31
Спасибо! помогло.
А могу ли я в BeforeUpdate указать, .AddNew или .Edit??? Чтобы запись либо добавлялась, либо изменялась.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
28.02.2012, 14:54 32
Цитата Сообщение от xtreme Посмотреть сообщение
А могу ли я в BeforeUpdate указать, .AddNew или .Edit??? Чтобы запись либо добавлялась, либо изменялась.
Если это вы собираетесь добавлять или изменять в текущем рекордсете, то нет.
Для изменения в текущей записи можете сделать Me!Поле=значение.

P.S. Почему вы все время пытаетесь работать с полями текущей записи через рекордсет, когда более природно это делать через поля формы, если они (поля) связаны с полями источника записей?
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
28.02.2012, 17:17  [ТС] 33
Цитата Сообщение от minob Посмотреть сообщение
P.S. Почему вы все время пытаетесь работать с полями текущей записи через рекордсет, когда более природно это делать через поля формы, если они (поля) связаны с полями источника записей?
не люблю посредников (пользы ни какой, а кормить приходится)
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
28.02.2012, 19:00 34
Цитата Сообщение от xtreme Посмотреть сообщение
не люблю посредников (пользы ни какой, а кормить приходится)
Интерсно, в какой среде разработки вы работали до Access?
0
62 / 62 / 1
Регистрация: 22.12.2011
Сообщений: 1,440
29.02.2012, 10:28  [ТС] 35
Понял к чему ты клонишь, тогда согласен - через форму работать удобнее.

На разных, всяких учили, всего по не многу: начиная с Ассемблера до Web-языков, и Matlab-а.
А вот с Access-ом как-то не выдалось поучится, приходится на работе осваивать.
0
29.02.2012, 10:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.02.2012, 10:28
Помогаю со студенческими работами здесь

Как отметить только что добавленную запись в DataGridView?
После выполнения процедуры Sub AddRecord() SqlCom = New OleDb.OleDbCommand("INSERT...

Как сделать, что бы компьютер видел только мою флешку?
Возможно ли сделать так, что бы при подключении к компьютеру распознавалась только моя флешка... а...

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

Как сделать так что бы работали только определенные флешки
У нас разношерстный парк операционок от XP до 10ки, домена нет. Слышал, что это можно сделать на...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru