У меня есть следующая настройка:MS Access Текстовое поле Значение по умолчанию Максимальный размер Ограничение
У меня есть форма с несвязанными элементами управления текстовыми полями. У меня есть процедура, которая срабатывает после каждого события AfterUpdate.
Процедура отправляет входное значение в таблицу и возвращает значение, введенное в таблицу, как значение DefaultValue текстового поля. Таблица определяет уникальные строки по форме и имени управления, 2 первичных ключам.
После ввода данных появляется кнопка, которая отправляет данные из формы структурированным способом в другую таблицу, и отчет считывается из таблицы. Данные вводятся в таблицу структурированным способом с помощью SQL-запроса.
Проблема заключается в том, что пользователь вводит тексты более 2048 символов в двух из полей, код прерывается из-за ограничения. Два поля в форме, на каждой странице, вероятно, имеют более 2 тыс. Символов из-за характера форм.
Мой вопрос: могу ли я обходить, увеличивать или обходить ограничение персонажа?
Мой код размещен ниже для справки, если это необходимо (процедура называется Оптимизирует загружаются в каждом текстовом поле на форме):
Процедура, которая записывает значение входного сигнала в таблицу:
Private Sub OptimizeS()
Dim cmd As ADODB.Command
Dim strForm As String
Dim strControl As String
Dim strSQL As String
Dim strCriteria As String
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdText
strCriteria = "FormName = """ & Me.Name & """ " & _
"And ControlName = """ & Me.ActiveControl.Name & """"
' is there an existing default for this control?
If Not IsNull(DLookup("FormName", "Defaults", strCriteria)) Then
' if so then update row in table
strSQL = "UPDATE Defaults " & _
"SET DefaultVal = """ & Me.ActiveControl & """ " & _
"WHERE " & strCriteria
Else
' insert new row
strSQL = "INSERT INTO Defaults(" & _
"FormName,ControlName,DefaultVal) " & _
"VALUES(""" & Me.Name & """,""" & _
Me.ActiveControl.Name & """,""" & _
Me.ActiveControl & """)"
End If
cmd.CommandText = strSQL
cmd.Execute
End Sub
Поддержка процедуры на самой форме:
1)
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim cmd As ADODB.Command
Dim strOpened As String
Dim strForm As String
Dim strSQL As String
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdText
strOpened = "Opened = """ & Me.Name & """ "
If Not IsNull(DLookup("Opened", "AllOpened", strOpened)) Then
strSQL = "UPDATE AllOpened " & _
"SET Opened = """ & Me.Name & """ " & _
"WHERE " & strOpened
Else
strSQL = "INSERT INTO AllOpened(Opened) " & _
"VALUES(""" & Me.Name & """)"
End If
cmd.CommandText = strSQL
cmd.Execute
End Sub
2)
Private Sub Form_Open(Cancel As Integer)
Dim cmd As ADODB.Command
Dim strCriteria As String
Dim strOpened As String
Dim varDefault As Variant
Dim varOpened As Variant
Dim strForm As String
Dim strSQL As String
Dim ctrl As Control
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdText
strOpened = "Opened = """ & Me.Name & """ "
varOpened = DLookup("Opened", "AllOpened", strOpened)
If IsNull(varOpened) Then
strSQL = "INSERT INTO AllOpened(Opened) " & _
"VALUES(""" & Me.Name & """)"
cmd.CommandText = strSQL
cmd.Execute
Else
GoTo ErrMsg
End If
For Each ctrl In Me.Controls
strCriteria = "FormName = """ & Me.Name & """ " & _
"And ControlName = """ & ctrl.Name & """"
varDefault = DLookup("DefaultVal", "Defaults", strCriteria)
If Not IsNull(varDefault) Then
ctrl.DefaultValue = """" & varDefault & """"
End If
Next ctrl
Exit Sub
ErrMsg:
MsgBox ("The form is already open by another user. Please double-check before editing."), , "Important!!!"
End Sub
3)
Private Sub Form_Unload(Cancel As Integer)
Dim strSQL As String
Dim strForm As String
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdText
strSQL = "DELETE FROM AllOpened " & _
"WHERE Opened = """ & Me.Name & """"
cmd.CommandText = strSQL
cmd.Execute
End Sub
Вы действительно делаете жизнь трудной для себя. Почему бы вам просто не привязать форму к таблице? Для этого предназначен _Access_. Если вам это не нравится, используйте инструменты, такие как _Visual Studio_ с _WinForms_ и _VB.NET_ или _C# _. – Gustav
На самом деле это невозможно сделать, я бы сделал это, если мог. Форма должна иметь возможность хранить данные и служить вставкой/редактированием/удалением-платформой. WinForms на самом деле не вариант. Есть ли способ передать длинный текст через какой-то элемент? Или создать другой тип объекта, который не имеет ограничения на символ? –
Ну, если вы обнаружили, что строка 2K является максимальной, которую может хранить DefaultValue, вот и все. Там нет места, где настройка может изменить это. Поэтому вам придется создать какой-то обходной путь с помощью таблицы поиска или тому подобного. – Gustav