以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 查询某列的值为某个字符串的开头字符串的行 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=38529) |
||||
-- 作者:东坡一剑 -- 发布时间:2013/7/31 11:36:00 -- 查询某列的值为某个字符串的开头字符串的行 我想从后台数据表{货号名称单价}中寻找[货号]列为某个字符串的开头字符串的行,为此在表{入库复件}的datacolchanged事件中设置了代码,但没有成功。代码为:
If e.DataCol.Name = "产品条码" Then
If e.DataRow.IsNull("产品条码") = False Then Dim dr As DataRow Dim dt As DataTable Dim s,sh,s1,s2,s3 As String Dim cmd As new SQLCommand cmd.C cmd.CommandText = "select 产品名称,季别 from {货号名称单价} where" & "" & e.DataRow("产品条码") & ".startswith([货号])" dt = cmd.ExecuteReader If dt.DataRows.count > 0 Then dr = dt.DataRows(0) s = e.NewValue e.DataRow("货号") = sh = dr("货号") e.DataRow("色号1")=s1 = s.SubString(sh.length - 1,2) e.DataRow("色号2")=s2 = s.SubString(sh.length + 1,2) e.DataRow("尺码号")=s3 = s.SubString(sh.length + 3) Else Dim sp As New DotNetSpeech.SpVoice() sp.Speak("此产品无记录,请添加!", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault) e.Cancel = True MainTable = Tables("货号名称单价") End If End If 错误提示为:
.NET Framework 版本:2.0.50727.6407 Foxtable 版本:2013.5.12.1 错误所在事件: 详细错误信息: FROM 子句语法错误。 能帮我看看select语句错在什么地方吗? 这个任务有完成的办法吗?
[此贴子已经被作者于2013-7-31 11:40:11编辑过]
|
||||
-- 作者:狐狸爸爸 -- 发布时间:2013/7/31 11:42:00 -- 打不开你的文件,因为没有数据源。
我蒙一下,你是要查找货号列以当前行的产品条码开始的行吧,如果这样,代码应该是:
Dim dr As DataRow
SQL的语法和函数,请参考: http://www.foxtable.com/help/topics/0688.htm http://www.foxtable.com/help/topics/0692.htm http://www.foxtable.com/help/topics/1827.htm |
||||
-- 作者:东坡一剑 -- 发布时间:2013/7/31 15:22:00 -- 有可能你没有完全理解我的意思,我打个比方: 输入一个条码:L12345678001,其中: 货号为:L1234 色号1为:56 色号2为:78 尺码号为:001
但是,货号的长度不固定,导致条码的长度也不固定,因此根据条码来生成货号等要区分好几种情况,逻辑比较复杂,而且很不灵活。所幸色号1和色号2 的位数是固定的,因此我想寻找一种更灵活的方式来生成货号。所以我的意思是:
查找货号 是 当前行的产品条码 的开始 的 行 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2013/7/31 15:26:00 -- 那就将这一行: cmd.CommandText = "select 产品名称,季别 from {货号名称单价} where 货号 Like \'?" & e.DataRow("产品条码") & "\'"
改为: cmd.CommandText = "select 产品名称,季别 from {货号名称单价} where 产品条码 Like \'?" & e.DataRow("货号") & "\'" |
||||
-- 作者:东坡一剑 -- 发布时间:2013/7/31 15:48:00 -- 问题是{货号名称单价}里并没有名为“产品条码"的列,而且,通配符?不是表示任何单个字符吗?用在这里我还是理解不了。
我把相关的两个表从定向为内部表了,不知能否打开。有劳了!
|
||||
-- 作者:狐狸爸爸 -- 发布时间:2013/7/31 16:04:00 -- 这个我也没有办法,建议要么统一货号长度,要么规范产品条码,在货号和后续内容之间用一个符号隔开,以便根据输入的条码获取货号进行查询。 |
||||
-- 作者:Bin -- 发布时间:2013/7/31 16:21:00 -- "select 产品名称,季别 from {货号名称单价} where 货号 Like \'" & e.DataRow("产品条码") & "%\'" 这样不能满足你需求吗
|
||||
-- 作者:东坡一剑 -- 发布时间:2013/7/31 16:21:00 -- 还是谢谢你!忙了大半天,挺感激的。 不过现实的应用中这种情况还是挺多的。建议foxtable能增强相应的功能来满足这种需求。 |
||||
-- 作者:东坡一剑 -- 发布时间:2013/7/31 16:45:00 -- 我把代码调成这样,货号已经生成,不过生成了两个,第一个是正确的值,随即又被修改成了空格,你帮忙看看,怎样才能不被修改成空格,如果能做到,我的问题就解决了! Dim s As String = e.NewValue
可以用下面的条码测试 GL1352340150170 [此贴子已经被作者于2013-7-31 16:50:17编辑过]
|
||||
-- 作者:狐狸爸爸 -- 发布时间:2013/7/31 16:47:00 -- 这个简单:
Dim s As String = e.NewValue exit for [此贴子已经被作者于2013-7-31 16:55:16编辑过]
|