比如表 k_bhzbm 的字段 HZ 的字段大小是 1 。在access中直接执行插入命令:INSERT INTO k_bhzbm (HZ) VALUES ( "三个字") ,能够通过,只是字段HZ中只保存“三”字。
但是,如果执行以下代码,则在BqPCommand.ExecuteNonQuery()方法中出错。当然如果把插入命令中的“三个字”改为“三”,就不会出错了。
为什么会这样呢?
Dim m As Boolean = False '
Dim sCmdtxt As String
Dim tran As Data.OleDb.OleDbTransaction
Dim BqPCommand As New System.Data.OleDb.OleDbCommand
tran = q_Conn.BeginTransaction(IsolationLevel.ReadCommitted)
BqPCommand.Connection = q_Conn
BqPCommand.Transaction = tran
sCmdtxt="INSERT INTO k_bhzbm (HZ) VALUES ( "三个字 ") "
Try
BqPCommand.CommandText = sCmdtxt
m = BqPCommand.ExecuteNonQuery() '执行此处时出错。
tran.Commit()
Catch e As Exception
m = False
Try
tran.Rollback()
Catch ex As Exception
End Try
End Try
附:我在vb.net中用下面的方式连接的access数据库,
Public q_Conn As New System.Data.OleDb.OleDbConnection
Dim l_conn As String
l_conn=" Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source= e:\school\bqssxsgl.db ;Persist Security Info=False;Jet OLEDB:Database Password=12345678 "
q_Conn.ConnectionString = l_conn
q_Conn.Open()
25 个解决方案
#1
这是肯定的,在SQL中错误描述为什么未能将二进制截断之类的
#2
如何解决这个问题??
#3
在插入之前把字符串截断,使其长度不超过字段长度
#4
那这个工作量有些大哟,作为前端开发工具而言,要根据每个字段的大小来计算,有些不太现实哟.
#5
把数据库字段加长!
#6
没办法的事!用输入控件的MaxLength 属性来限制输入的字符数!
#7
1.加长数据库字段
2.页面输入时做判断,超过限制字段就不让输入,自动截断,或提示用户输入过长.
2.页面输入时做判断,超过限制字段就不让输入,自动截断,或提示用户输入过长.
#8
如果你想让他随便输 但是加的时候就一个 那么 直接用left(xxx,1) 就可以了
不然就想后晌的说得 maxlength设置成1
不然就想后晌的说得 maxlength设置成1
#9
1、每次接受用户输入的时候都要做检查的,比如数据类型、长度、有无特殊字符等等。这是必须的
2、做一个函数,传入字段的长度和文本,然后返回合适的文本部分,这样工作量也不是很大
3、把textbox的最大长度设一下,但是1还是少不了要检查类型和字符的
2、做一个函数,传入字段的长度和文本,然后返回合适的文本部分,这样工作量也不是很大
3、把textbox的最大长度设一下,但是1还是少不了要检查类型和字符的
#10
没有必要在输入了以后再做检查,除非这种输入是需要转换的。比如:1000-1010要转换为1000,1001,1002...1010。
对于一般的情况,限制用户输入的字符的长度是最好的办法,他输入了很长,却给人家截取了,那么他会知道截取了什么吗?这种结果是他想要的吗?所以,友好的设计程序要体现在很细微的地方!
对于一般的情况,限制用户输入的字符的长度是最好的办法,他输入了很长,却给人家截取了,那么他会知道截取了什么吗?这种结果是他想要的吗?所以,友好的设计程序要体现在很细微的地方!
#11
个人认为比较赞同 hamadou(闵峰) 的方法。
再一个问题请大家帮忙看一下这个问题。
http://community.csdn.net/Expert/topic/4051/4051894.xml?temp=.8955652
再一个问题请大家帮忙看一下这个问题。
http://community.csdn.net/Expert/topic/4051/4051894.xml?temp=.8955652
#12
赞同 hamadou(闵峰) 的方法
#13
最简单的方法就是在数据库中将此字段的长度加大
#14
设置输入框的长度吧,加宽数据库字段,再长也会有可能超过的
#15
用输入控件的MaxLength 属性来限制输入的字符数!
#16
在数据库中把字段长度加长,然后定义空间的MAXLENGTH属性
#17
你可以根据数据字段的长度再输入时候给于判断,免得出现类似情况,要不就把字段长度设的足够!
#18
这是前期调研有问题!!
#19
捕捉错误!!!
#20
现在,我的想法是:编写一个继承于文本框的类mytxt,在这个类中,当用DataBindings.Add方法绑定数据时,想办法找出绑定字段的宽度,再设置mytxt的MaxLength 属性
#21
怪了,用下面方法得到的字段宽度始终是-1.
i = tb.Columns(zd).MaxLength()
其中 tb 是 DataTable ,表示表
zd 是 String ,表示字段名称
i = tb.Columns(zd).MaxLength()
其中 tb 是 DataTable ,表示表
zd 是 String ,表示字段名称
#22
用户输入完成后,提交时判断每个参数的长度,超长的要给用户提示,比方说该值不要超过8位等等。如果用户一定要超过8位,那么就是你的数据库设计失败。
数据库设计是在用户需求分析一结束就要完成的东西,千万不能一边写代码一边更改数据库结构。
数据库设计是在用户需求分析一结束就要完成的东西,千万不能一边写代码一边更改数据库结构。
#23
to : njqibin(杉树林)、liuqm(blue) 你的理解有一定的偏差。
我的意思是说,在数据库设计阶段,已经明确了每个字段的宽度,比如某个表的mc字段是8位,
但在窗口设计中,由于没有设置文本框的MaxLength属性,用户在其中输入内容时,很有可能超过8位,从而造成在更新数据库时出错。而这并非如你们所说的“如果用户一定要超过8位,那么就是你的数据库设计失败。”这层意思。
我的意思是说,在数据库设计阶段,已经明确了每个字段的宽度,比如某个表的mc字段是8位,
但在窗口设计中,由于没有设置文本框的MaxLength属性,用户在其中输入内容时,很有可能超过8位,从而造成在更新数据库时出错。而这并非如你们所说的“如果用户一定要超过8位,那么就是你的数据库设计失败。”这层意思。
#24
经过版主的帮助,以上的问题已经解决了.
编写一个继承于文本框的类BqUTxt,在这个类中,当用DataBindings.Add方法绑定数据时,找出绑定字段的宽度,再设置BqUTxt的MaxLength 属性.
代码大致如下:
一、将 DataTable 添加到 DataSet 中,并配置架构以匹配数据源中的架构。
...
lAdapter.FillSchema(lPDataset,SchemaType.Mapped, "表名") '得到框架结构
lAdapter.Fill(lDataset,"表名")
二、编写继承文本框的类BqUTxt,代码如下
Public Class BqUTxt
Inherits System.Windows.Forms.TextBox
'编写自己的数据绑定方法,参数分别表示:表名、字段名
Public Sub Bq_Bind(ByVal tb As DataTable, ByVal zd As String)
Dim i As Integer
Dim m As Boolean
Dim s As String
Try
m = Me.Visible
If m = False Then
Me.Visible = True
End If
s = tb.Columns.Item(zd).DataType.ToString
i = tb.Columns.Item(zd).MaxLength
If s = "System.String" Then '字符型数据才设置文本框的最多允许的字符数
Me.MaxLength = i
End If
Me.DataBindings.Clear()
Me.DataBindings.Add("Text", tb, zd)
Me.Visible = m
Catch ex As Exception
End Try
End Sub
Private Sub BqUTxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
'按回车键,就相当于执行一个Tab,到下一个控件
If e.KeyChar = Chr(13) Then
e.Handled = True
System.Windows.Forms.SendKeys.Send("{TAB}")
End If
End Sub
Private Sub BqUTxt_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus
'得到焦点时,就全部选中文本
sender.SelectAll()
End Sub
End Class
编写一个继承于文本框的类BqUTxt,在这个类中,当用DataBindings.Add方法绑定数据时,找出绑定字段的宽度,再设置BqUTxt的MaxLength 属性.
代码大致如下:
一、将 DataTable 添加到 DataSet 中,并配置架构以匹配数据源中的架构。
...
lAdapter.FillSchema(lPDataset,SchemaType.Mapped, "表名") '得到框架结构
lAdapter.Fill(lDataset,"表名")
二、编写继承文本框的类BqUTxt,代码如下
Public Class BqUTxt
Inherits System.Windows.Forms.TextBox
'编写自己的数据绑定方法,参数分别表示:表名、字段名
Public Sub Bq_Bind(ByVal tb As DataTable, ByVal zd As String)
Dim i As Integer
Dim m As Boolean
Dim s As String
Try
m = Me.Visible
If m = False Then
Me.Visible = True
End If
s = tb.Columns.Item(zd).DataType.ToString
i = tb.Columns.Item(zd).MaxLength
If s = "System.String" Then '字符型数据才设置文本框的最多允许的字符数
Me.MaxLength = i
End If
Me.DataBindings.Clear()
Me.DataBindings.Add("Text", tb, zd)
Me.Visible = m
Catch ex As Exception
End Try
End Sub
Private Sub BqUTxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
'按回车键,就相当于执行一个Tab,到下一个控件
If e.KeyChar = Chr(13) Then
e.Handled = True
System.Windows.Forms.SendKeys.Send("{TAB}")
End If
End Sub
Private Sub BqUTxt_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus
'得到焦点时,就全部选中文本
sender.SelectAll()
End Sub
End Class
#25
请版主推荐这个贴子,最好加入到FAQ或者精华贴
#1
这是肯定的,在SQL中错误描述为什么未能将二进制截断之类的
#2
如何解决这个问题??
#3
在插入之前把字符串截断,使其长度不超过字段长度
#4
那这个工作量有些大哟,作为前端开发工具而言,要根据每个字段的大小来计算,有些不太现实哟.
#5
把数据库字段加长!
#6
没办法的事!用输入控件的MaxLength 属性来限制输入的字符数!
#7
1.加长数据库字段
2.页面输入时做判断,超过限制字段就不让输入,自动截断,或提示用户输入过长.
2.页面输入时做判断,超过限制字段就不让输入,自动截断,或提示用户输入过长.
#8
如果你想让他随便输 但是加的时候就一个 那么 直接用left(xxx,1) 就可以了
不然就想后晌的说得 maxlength设置成1
不然就想后晌的说得 maxlength设置成1
#9
1、每次接受用户输入的时候都要做检查的,比如数据类型、长度、有无特殊字符等等。这是必须的
2、做一个函数,传入字段的长度和文本,然后返回合适的文本部分,这样工作量也不是很大
3、把textbox的最大长度设一下,但是1还是少不了要检查类型和字符的
2、做一个函数,传入字段的长度和文本,然后返回合适的文本部分,这样工作量也不是很大
3、把textbox的最大长度设一下,但是1还是少不了要检查类型和字符的
#10
没有必要在输入了以后再做检查,除非这种输入是需要转换的。比如:1000-1010要转换为1000,1001,1002...1010。
对于一般的情况,限制用户输入的字符的长度是最好的办法,他输入了很长,却给人家截取了,那么他会知道截取了什么吗?这种结果是他想要的吗?所以,友好的设计程序要体现在很细微的地方!
对于一般的情况,限制用户输入的字符的长度是最好的办法,他输入了很长,却给人家截取了,那么他会知道截取了什么吗?这种结果是他想要的吗?所以,友好的设计程序要体现在很细微的地方!
#11
个人认为比较赞同 hamadou(闵峰) 的方法。
再一个问题请大家帮忙看一下这个问题。
http://community.csdn.net/Expert/topic/4051/4051894.xml?temp=.8955652
再一个问题请大家帮忙看一下这个问题。
http://community.csdn.net/Expert/topic/4051/4051894.xml?temp=.8955652
#12
赞同 hamadou(闵峰) 的方法
#13
最简单的方法就是在数据库中将此字段的长度加大
#14
设置输入框的长度吧,加宽数据库字段,再长也会有可能超过的
#15
用输入控件的MaxLength 属性来限制输入的字符数!
#16
在数据库中把字段长度加长,然后定义空间的MAXLENGTH属性
#17
你可以根据数据字段的长度再输入时候给于判断,免得出现类似情况,要不就把字段长度设的足够!
#18
这是前期调研有问题!!
#19
捕捉错误!!!
#20
现在,我的想法是:编写一个继承于文本框的类mytxt,在这个类中,当用DataBindings.Add方法绑定数据时,想办法找出绑定字段的宽度,再设置mytxt的MaxLength 属性
#21
怪了,用下面方法得到的字段宽度始终是-1.
i = tb.Columns(zd).MaxLength()
其中 tb 是 DataTable ,表示表
zd 是 String ,表示字段名称
i = tb.Columns(zd).MaxLength()
其中 tb 是 DataTable ,表示表
zd 是 String ,表示字段名称
#22
用户输入完成后,提交时判断每个参数的长度,超长的要给用户提示,比方说该值不要超过8位等等。如果用户一定要超过8位,那么就是你的数据库设计失败。
数据库设计是在用户需求分析一结束就要完成的东西,千万不能一边写代码一边更改数据库结构。
数据库设计是在用户需求分析一结束就要完成的东西,千万不能一边写代码一边更改数据库结构。
#23
to : njqibin(杉树林)、liuqm(blue) 你的理解有一定的偏差。
我的意思是说,在数据库设计阶段,已经明确了每个字段的宽度,比如某个表的mc字段是8位,
但在窗口设计中,由于没有设置文本框的MaxLength属性,用户在其中输入内容时,很有可能超过8位,从而造成在更新数据库时出错。而这并非如你们所说的“如果用户一定要超过8位,那么就是你的数据库设计失败。”这层意思。
我的意思是说,在数据库设计阶段,已经明确了每个字段的宽度,比如某个表的mc字段是8位,
但在窗口设计中,由于没有设置文本框的MaxLength属性,用户在其中输入内容时,很有可能超过8位,从而造成在更新数据库时出错。而这并非如你们所说的“如果用户一定要超过8位,那么就是你的数据库设计失败。”这层意思。
#24
经过版主的帮助,以上的问题已经解决了.
编写一个继承于文本框的类BqUTxt,在这个类中,当用DataBindings.Add方法绑定数据时,找出绑定字段的宽度,再设置BqUTxt的MaxLength 属性.
代码大致如下:
一、将 DataTable 添加到 DataSet 中,并配置架构以匹配数据源中的架构。
...
lAdapter.FillSchema(lPDataset,SchemaType.Mapped, "表名") '得到框架结构
lAdapter.Fill(lDataset,"表名")
二、编写继承文本框的类BqUTxt,代码如下
Public Class BqUTxt
Inherits System.Windows.Forms.TextBox
'编写自己的数据绑定方法,参数分别表示:表名、字段名
Public Sub Bq_Bind(ByVal tb As DataTable, ByVal zd As String)
Dim i As Integer
Dim m As Boolean
Dim s As String
Try
m = Me.Visible
If m = False Then
Me.Visible = True
End If
s = tb.Columns.Item(zd).DataType.ToString
i = tb.Columns.Item(zd).MaxLength
If s = "System.String" Then '字符型数据才设置文本框的最多允许的字符数
Me.MaxLength = i
End If
Me.DataBindings.Clear()
Me.DataBindings.Add("Text", tb, zd)
Me.Visible = m
Catch ex As Exception
End Try
End Sub
Private Sub BqUTxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
'按回车键,就相当于执行一个Tab,到下一个控件
If e.KeyChar = Chr(13) Then
e.Handled = True
System.Windows.Forms.SendKeys.Send("{TAB}")
End If
End Sub
Private Sub BqUTxt_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus
'得到焦点时,就全部选中文本
sender.SelectAll()
End Sub
End Class
编写一个继承于文本框的类BqUTxt,在这个类中,当用DataBindings.Add方法绑定数据时,找出绑定字段的宽度,再设置BqUTxt的MaxLength 属性.
代码大致如下:
一、将 DataTable 添加到 DataSet 中,并配置架构以匹配数据源中的架构。
...
lAdapter.FillSchema(lPDataset,SchemaType.Mapped, "表名") '得到框架结构
lAdapter.Fill(lDataset,"表名")
二、编写继承文本框的类BqUTxt,代码如下
Public Class BqUTxt
Inherits System.Windows.Forms.TextBox
'编写自己的数据绑定方法,参数分别表示:表名、字段名
Public Sub Bq_Bind(ByVal tb As DataTable, ByVal zd As String)
Dim i As Integer
Dim m As Boolean
Dim s As String
Try
m = Me.Visible
If m = False Then
Me.Visible = True
End If
s = tb.Columns.Item(zd).DataType.ToString
i = tb.Columns.Item(zd).MaxLength
If s = "System.String" Then '字符型数据才设置文本框的最多允许的字符数
Me.MaxLength = i
End If
Me.DataBindings.Clear()
Me.DataBindings.Add("Text", tb, zd)
Me.Visible = m
Catch ex As Exception
End Try
End Sub
Private Sub BqUTxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
'按回车键,就相当于执行一个Tab,到下一个控件
If e.KeyChar = Chr(13) Then
e.Handled = True
System.Windows.Forms.SendKeys.Send("{TAB}")
End If
End Sub
Private Sub BqUTxt_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus
'得到焦点时,就全部选中文本
sender.SelectAll()
End Sub
End Class
#25
请版主推荐这个贴子,最好加入到FAQ或者精华贴