Foxtable(狐表)用户栏目专家坐堂 → 查询某列的值为某个字符串的开头字符串的行


  共有7484人关注过本帖树形打印复制链接

主题:查询某列的值为某个字符串的开头字符串的行

帅哥哟,离线,有人找我吗?
东坡一剑
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
查询某列的值为某个字符串的开头字符串的行  发帖心情 Post By: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语句错在什么地方吗?
这个任务有完成的办法吗?
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:例子.foxdb

[此贴子已经被作者于2013-7-31 11:40:11编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/7/31 15:22:00 [显示全部帖子]

有可能你没有完全理解我的意思,我打个比方:

输入一个条码:L12345678001,其中:

货号为:L1234

色号1为:56

色号2为:78

尺码号为:001

 

但是,货号的长度不固定,导致条码的长度也不固定,因此根据条码来生成货号等要区分好几种情况,逻辑比较复杂,而且很不灵活。所幸色号1和色号2 的位数是固定的,因此我想寻找一种更灵活的方式来生成货号。所以我的意思是:

 

查找货号 是 当前行的产品条码 的开始 的 行


 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/7/31 15:48:00 [显示全部帖子]

问题是{货号名称单价}里并没有名为“产品条码"的列,而且,通配符?不是表示任何单个字符吗?用在这里我还是理解不了。

 

我把相关的两个表从定向为内部表了,不知能否打开。有劳了!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:例子.foxdb


 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/7/31 16:21:00 [显示全部帖子]

还是谢谢你!忙了大半天,挺感激的。

不过现实的应用中这种情况还是挺多的。建议foxtable能增强相应的功能来满足这种需求。


 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/7/31 16:45:00 [显示全部帖子]

我把代码调成这样,货号已经生成,不过生成了两个,第一个是正确的值,随即又被修改成了空格,你帮忙看看,怎样才能不被修改成空格,如果能做到,我的问题就解决了!

Dim s As String = e.NewValue
Dim sh As String
For Each dr As DataRow In DataTables("货号名称单价").DataRows
    If s.startswith(dr("货号")) Then
    MessageBox.Show(dr("货号"))
        sh = dr("货号")
    End If
Next
MessageBox.Show(sh)
e.DataRow("货号") = sh

 

可以用下面的条码测试

GL1352340150170

[此贴子已经被作者于2013-7-31 16:50:17编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/7/31 16:54:00 [显示全部帖子]

谢谢Bin,我试试


 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/7/31 17:02:00 [显示全部帖子]

感谢狐狸爸爸,我的问题解决了!

不过我还是感觉直接用select语句解决更好一点,Bin的办法试了,没有成功。不过还是谢谢Bin,感谢你们一直以来的关照!


 回到顶部