Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Записать поле MEMO в таблицу через VB


Автор: neosapient 2.6.2008, 19:01
Здравствуйте.

Есть нужно сделать БД для техподдержки, чтоб в ней отмечать переговоры с клиентами.
Так как переписка обычно содержит много сообщений, каждое из которых начинается с красной строки, то решил для записи сообщений использовать поле типа Memo. 
(Есть ли альтернативы, для сложно структурированного текста?)

Есть таблица с именами клиентов (Name): каждому ФИО (Name.Name) присвоен свой идентификатор (Name.ID) .
Есть таблица со способами контактов (Contact): телефон, форум, Skype, ICQ и т.д. (ограниченный набор)
Есть таблица "сообщений":
ID - код записи
NameID - имя клиента, совпадает c Name.ID
Message - тип мемо, здесь храниться переписка.
ContactID - идентификатор способа контакта
Data - Дата добавления переписки 

Схема связи таблиц:
http://ipicture.ru/

Есть форма для ввода сообщений:
- два поля со списком для выбора имени и способа контакта
- поле сообщения, для ввода МЕМО
- кнопка для добавления сообщения, при клике вызывает программу на VB
http://ipicture.ru/

При попытке добавить новую запись ругаеться
Код

Private Sub Add_Click()
Dim strSQL As String
On Error GoTo ErrorHandler
strSQL = "INSERT INTO [Message] ([NameID],[ContactID],[Message],[Data]) VALUES ("
'NameID
Me.NameID.SetFocus
strSQL = strSQL & Me.NameID.Column(0) & ","
'ContactID
Me.ContactID.SetFocus
strSQL = strSQL & Me.ContactID.Column(0) & ","
'Message
Me.Message.SetFocus
strSQL = strSQL & """" & Me.Message.Text & ""","
'Data
strSQL = strSQL & Now() & ")"
'start transaction
DoCmd.RunSQL strSQL
'clear dialog
Me.Order.SetFocus
Me.Order.Text = ""
Me.Message.SetFocus
Me.Message.Text = ""
ExitSub:
Me.Order.SetFocus
Exit Sub
ErrorHandler:
MsgBox "Ошибка записи данных." & vbNewLine & "Проверьте ввод и повторите попытку.", vbOKOnly + vbCritical, "Ошибка"
Resume ExitSub
End Sub

Автор: Akina 2.6.2008, 20:04
Правильно ругается - нельзя добавлять в МЕМО через инлайн. Используйте открытие обновляемого рекордсета. Типа 

Код

set rs = CurrentDB.openrecordset("Select [NameID],[ContactID],[Message],[Data] From [Message]")
With rs
  .AddNew
  ![NameID] = Me.NameID.Column(0)
  ![ContactID] = Me.ContactID.Column(0)
  ![Message] = Me.Message.Text
  ![Data] = Now()
  .Update
End With
rs.Close

Автор: neosapient 2.6.2008, 21:18
Спасибо, заработало.  smile 
+

Код

Private Sub Add_Click()
On Error GoTo ErrorHandler
Set rs = CurrentDb.openrecordset("Select [NameID],[ContactID],[Message],[Data] From [Message]")
With rs
  .AddNew
  ![NameID] = Me.NameID.Column(0)
  ![ContactID] = Me.ContactID.Column(0)
  ![Message] = Me.Message.Value
  ![Data] = Now()
  .Update
End With
rs.Close
ExitSub:
Me.Order.SetFocus
Exit Sub
ErrorHandler:
MsgBox "Ошибка записи данных." & vbNewLine & "Проверьте ввод и повторите попытку.", vbOKOnly + vbCritical, "Ошибка"
Resume ExitSub
End Sub


Поясни, что есть 
Цитата

Используйте открытие обновляемого рекордсета

Что есть "рекордсет" и "обновляемый рекордсет"
(я полный noob)
-----------
Есть где-нибудь литература, чтоб всё было понятно разжевано ?

Автор: bopoha 2.6.2008, 22:23
Берем любую книжку по MS Access со словами "разработка", например, "Разработка настольных приложений на MS Access хххх".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)