Foxtable(狐表)用户栏目专家坐堂 → 语法解法


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

主题:语法解法

帅哥哟,离线,有人找我吗?
wtfwsk05
  241楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:398 积分:2369 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/11/21 12:42:00 [只看该作者]

Dim dt As DataTable
Dim cmd As new SQLCommand
cmd.C
cmd.CommandText ="SELECT DISTINCT a1.mandt AS 客户端, a1.lifnr AS 编码, a1.name1 AS 名称, a1.sortl AS 简称, a1.ktokk AS 类型 , decode(ktokk, 'Z001', '供应商_外部', 'Z002', '供应商_内部', 'Z003', '供应商_临时', 'Z004', '供应商_财务', '供应商_其他') AS 类型描述 , a1.erdat AS 创建日期, a1.ernam AS 用户, a3.name_text AS 用户名, a1.ort01 AS 归属地, a1.regio AS 纳税地 , a6.bezei AS 纳税地名, a1.stras AS 纳税号, a1.telf1 AS 电话1, a1.telf2 AS 电话2, a1.stceg AS 地址 , a1.loevm AS 全部删除, a1.sperr AS 财务删除, a1.sperm AS 采购删除, a1.sperq AS 删除代码, a5.kurztext AS 删除原因 F ROM sapprd.lfa1 a1 LEFT JOIN sapprd.usr21 a2 ON a1.ernam = a2.bname AND a2.mandt = '800' LEFT JOIN sapprd.adrp a3 ON a2.persnumber = a3.persnumber LEFT JOIN sapprd.lfb1 a4 ON (a1.lifnr = a4.lifnr AND a4.mandt = '800' AND a4.erdat = a1.erdat) LEFT JOIN sapprd.tq04s a5 ON a1.sperq = a5.sperrfkt AND sprache = '1' LEFT JOIN sapprd.t005u a6 ON (a1.regio = a6.bland AND a6.mandt = '800' AND a6.land1 = 'CN' AND a6.spras = '1') WHERE (a1.loevm <> 'X' AND a1.sperr <> 'X' AND a1.sperm <> 'X')" 
dt=cmd.ExecuteReader()
Dim sql ="select * fr om dt where 名称 in (select 名称 fr om dt group by 名称 having count(编码)=1)"
Tables("窗口2_table1").DataSource =dt
Tables("窗口2_table1").Filter=sql
Tables("窗口2_table1").AllowClickSort=True
可以通过上面这个方式实现双击某单元格后加载指定条件的数据


 回到顶部
帅哥哟,离线,有人找我吗?
wtfwsk05
  242楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:398 积分:2369 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/11/21 12:50:00 [只看该作者]

我用的数据库是db2,无法直接加载表,需通过上sqlcommand先生成一个临时表,在根据指定条件将临时表中符合条件的数据加载到窗口的表中

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  243楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/21 12:57:00 [只看该作者]

 

思路已经告诉你了。如何实现自己想办法。

 


 回到顶部
帅哥哟,离线,有人找我吗?
wtfwsk05
  244楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:398 积分:2369 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/11/21 12:58:00 [只看该作者]

我执行上述代码,提示:
语法错误:“dt”运算符后缺少操作数。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  245楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/21 13:02:00 [只看该作者]

无法直接使用dt作为sql语句。

 

Dim sql ="select * fr om dt where 名称 in (select 名称 fr om dt group by 名称 having count(编码)=1)"

 

红色dt要改成原来的一整段sql语句才行。不然,你在你db2那里做一个视图,这样可以方便使用表。


 回到顶部
帅哥哟,离线,有人找我吗?
wtfwsk05
  246楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:398 积分:2369 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/11/21 13:07:00 [只看该作者]

哦,谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
wtfwsk05
  247楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:398 积分:2369 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/11/21 13:11:00 [只看该作者]

Dim dt As DataTable
Dim cmd As new SQLCommand
cmd.C
Dim sql_1="SELECT DISTINCT a1.mandt AS 客户端, a1.lifnr AS 编码, a1.name1 AS 名称, a1.sortl AS 简称, a1.ktokk AS 类型 , decode(ktokk, 'Z001', '供应商_外部', 'Z002', '供应商_内部', 'Z003', '供应商_临时', 'Z004', '供应商_财务', '供应商_其他') AS 类型描述 , a1.erdat AS 创建日期, a1.ernam AS 用户, a3.name_text AS 用户名, a1.ort01 AS 归属地, a1.regio AS 纳税地 , a6.bezei AS 纳税地名, a1.stras AS 纳税号, a1.telf1 AS 电话1, a1.telf2 AS 电话2, a1.stceg AS 地址 , a1.loevm AS 全部删除, a1.sperr AS 财务删除, a1.sperm AS 采购删除, a1.sperq AS 删除代码, a5.kurztext AS 删除原因 F ROM sapprd.lfa1 a1 LEFT JOIN sapprd.usr21 a2 ON a1.ernam = a2.bname AND a2.mandt = '800' LEFT JOIN sapprd.adrp a3 ON a2.persnumber = a3.persnumber LEFT JOIN sapprd.lfb1 a4 ON (a1.lifnr = a4.lifnr AND a4.mandt = '800' AND a4.erdat = a1.erdat) LEFT JOIN sapprd.tq04s a5 ON a1.sperq = a5.sperrfkt AND sprache = '1' LEFT JOIN sapprd.t005u a6 ON (a1.regio = a6.bland AND a6.mandt = '800' AND a6.land1 = 'CN' AND a6.spras = '1') WHERE (a1.loevm <> 'X' AND a1.sperr <> 'X' AND a1.sperm <> 'X')" 
cmd.CommandText = sql_1
dt=cmd.ExecuteReader()
Tables("窗口2_table1").DataSource =dt

Dim sql_2 ="select * f rom sql_1 where 名称 in (select 名称 f rom sql_1 group by 名称 having count(编码)=1)"
Tables("窗口2_table1").Filter=sql_2
我通过变量来实现,什么还是提示缺少参数

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  248楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/21 15:02:00 [只看该作者]

 

Dim sql_2 ="select * from (" & sql_1 & ") where 名称 in (select 名称 from (" & sql_1 & ") group by 名称 having count(编码)=1)"

 


 回到顶部
帅哥哟,离线,有人找我吗?
wtfwsk05
  249楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:398 积分:2369 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/11/21 20:59:00 [只看该作者]

我将上述代码,放在我的代码中,提示:表达式包含未定义的函数调用 from()。
代码如下:
Dim dt As DataTable
Dim cmd As new SQLCommand
cmd.C
Dim sql_1="SELECT DISTINCT a1.mandt AS 客户端, a1.lifnr AS 编码, a1.name1 AS 名称, a1.sortl AS 简称, a1.ktokk AS 类型 , decode(ktokk, 'Z001', '供应商_外部', 'Z002', '供应商_内部', 'Z003', '供应商_临时', 'Z004', '供应商_财务', '供应商_其他') AS 类型描述 , a1.erdat AS 创建日期, a1.ernam AS 用户, a3.name_text AS 用户名, a1.ort01 AS 归属地, a1.regio AS 纳税地 , a6.bezei AS 纳税地名, a1.stras AS 纳税号, a1.telf1 AS 电话1, a1.telf2 AS 电话2, a1.stceg AS 地址 , a1.loevm AS 全部删除, a1.sperr AS 财务删除, a1.sperm AS 采购删除, a1.sperq AS 删除代码, a5.kurztext AS 删除原因 F ROM sapprd.lfa1 a1 LEFT JOIN sapprd.usr21 a2 ON a1.ernam = a2.bname AND a2.mandt = '800' LEFT JOIN sapprd.adrp a3 ON a2.persnumber = a3.persnumber LEFT JOIN sapprd.lfb1 a4 ON (a1.lifnr = a4.lifnr AND a4.mandt = '800' AND a4.erdat = a1.erdat) LEFT JOIN sapprd.tq04s a5 ON a1.sperq = a5.sperrfkt AND sprache = '1' LEFT JOIN sapprd.t005u a6 ON (a1.regio = a6.bland AND a6.mandt = '800' AND a6.land1 = 'CN' AND a6.spras = '1') WHERE (a1.loevm <> 'X' AND a1.sperr <> 'X' AND a1.sperm <> 'X')"

cmd.CommandText = sql_1
dt=cmd.ExecuteReader()
Tables("窗口2_table1").DataSource =dt
Dim sql_2 ="select * f rom (" & sql_1 & ") where 名称 in (select 名称 f rom (" & sql_1 & ") group by 名称 having count(编码)=1)"
Tables("窗口2_table1").Filter = sql_2

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  250楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/21 21:44:00 [只看该作者]

那试试

 

Dim sql_2 ="select * from (" & sql_1 & ") as abcd where 名称 in (select 名称 from (" & sql_1 & ") as efg group by 名称 having count(编码)=1)"


 回到顶部