Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba MS Access文本框默认值最大大小限制_Vba_Forms_Ms Access_Stored Procedures - Fatal编程技术网

Vba MS Access文本框默认值最大大小限制

Vba MS Access文本框默认值最大大小限制,vba,forms,ms-access,stored-procedures,Vba,Forms,Ms Access,Stored Procedures,我有以下设置: 我有一个带有未绑定文本框控件的窗体。我有一个程序,在每次AfterUpdate事件后启动 该过程将输入值发送到表中,并将表中输入的值作为文本框的默认值返回。该表通过窗体和控件名以及2个主键定义了唯一的行 输入数据后,会有一个按钮,它以结构化方式将表单中的数据发送到另一个表,并从表中读取报告。数据通过SQL查询以结构化方式输入到表中 问题是,当用户在其中两个字段中输入超过2048个字符的文本时,代码会因限制而中断。由于表单的性质,表单上的两个字段在每个页面上可能有超过2k个字符 我

我有以下设置:

我有一个带有未绑定文本框控件的窗体。我有一个程序,在每次AfterUpdate事件后启动

该过程将输入值发送到表中,并将表中输入的值作为文本框的默认值返回。该表通过窗体和控件名以及2个主键定义了唯一的行

输入数据后,会有一个按钮,它以结构化方式将表单中的数据发送到另一个表,并从表中读取报告。数据通过SQL查询以结构化方式输入到表中

问题是,当用户在其中两个字段中输入超过2048个字符的文本时,代码会因限制而中断。由于表单的性质,表单上的两个字段在每个页面上可能有超过2k个字符

我的问题是,我能绕过、增加或绕过角色限制吗

我的代码发布在下面,以供参考(名为OptimizeS的过程加载到表单上的每个文本框中):

将输入值写入表的过程:

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
表格上的支持程序:

(一)

(二)

(三)


这是你最后一句话中的暗示。然后使用肯定没有2K限制的字符串变量尝试此详细代码:

Dim DefaultString As String

DefaultString = Nz(varDefault)
ctrl.DefaultValue = DefaultString

你真的让自己的生活很艰难。你为什么不把表格绑在桌子上呢?这就是Access的设计目的。如果你不喜欢,可以使用Visual Studio、WinForms、VB.NET或C#等工具。这不是真的可以做到的,如果可以的话,我会做到的。表单需要能够保存数据并充当插入/编辑/删除平台。WinForms并不是一个真正的选项。有没有办法让长文本通过某种元素传递?或者创建一个没有字符限制的不同类型的对象?好吧,如果您发现2K字符串是DefaultValue可以容纳的最大值,那么就这样。在任何地方,设置都不能改变这一点。因此,您必须创建一个查找表或类似的解决方案。Dlookup是问题所在,它无法在备注字段中搜索超过2000个字符。我使用Left将搜索限制在前2000个字符,并将其修复。不过我现在面临另一个问题。在第二个过程中,在ctrl.DefaultValue=“”&varDefault&=“”->处,表示表达式长度超过2048个字符。有什么想法吗?那不是你的原版吗?根据你的经验,我看不出解决办法。非常好!我没有使用Nz,而是使用了以下代码:
varDefault=DLookup(“DefaultVal”,“Defaults”,strCriteria)LMeasure=Left(varDefault,2000)MyLen=Len(varDefault)如果MyLen>2000,则使用ctrl.DefaultValue=“””&LMeasure&“ctrl.Value=varDefault-else如果不为null(varDefault),则使用ctrl.DefaultValue=“””&varDefault&“End If End If
基本上它按defaultvalue进行搜索,但在加载时在value属性中显示全文。表单中的值是临时的,但如果每次都加载,则不会:)非常感谢!伟大的谢谢你的反馈。
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
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
Dim DefaultString As String

DefaultString = Nz(varDefault)
ctrl.DefaultValue = DefaultString