主题:求助关于 sel-sql的一个问题
xm7050432
[专家分:180] 发布于 2009-04-22 15:55:00
如果我们要选择全部字段是用 sel *;
如果只是其中某几个字段是用 sel a,b,c,....
但如果我的字段很多有50几个,但是我只有3个不要显示,我要怎么处理。
一个一个写感觉不方便,请各位老师指教。 (我要把一个数据库中的50几个字段,搜索完显示在gird中的时候,有几个字段不显示。指令要怎么写才是最方便呢?)先谢谢各位抽空回复我的老师。
回复列表 (共5个回复)
沙发
菜鸭 [专家分:5120] 发布于 2009-04-23 07:52:00
这么懒啊
这是程序员的基本功啊
板凳
xm7050432 [专家分:180] 发布于 2009-04-23 08:18:00
[quote]这么懒啊
这是程序员的基本功啊[/quote]
[em8]不是懒,是觉得如果字段有100个或者更多呢?一个一个写没问题,主要是觉得浪费时间,不知道select是否有这个样的功能,比如,select * [color=FF0000]except a,b,c[/color] from aa.dbf.我试了好像一直提示错误。所以就来这里问问老师,是否有方便的语句。
3 楼
qjbzjp [专家分:8830] 发布于 2009-04-23 12:44:00
好像SQL没有这项功能,不过可以做一个自定义函数来实现:
selestr=myexcept("表名","排除字段1","排除字段2","排除字段3","排除字段4","排除字段5")
SELECT &selestr from 表名
FUNCTION myexcept
PARAMETERS dataname,str1,str2,str3,str4,str5
PUBLIC my_selestr
my_selestr="*"
IF !USED(dataname)
USE &dataname in 0
ENDIF
COPY STRUCTURE to mytempk exte
USE mytempk in 0
SELECT mytempk
my_str="ALLTRIM(field_name)<>UPPER"
SCAN
IF &my_str(str1).and.&my_str(str2).and.&my_str(str3).and.&my_str(str4).and.&my_str(str5)
my_selestr=my_selestr-","-field_name
ENDIF
ENDSCAN
USE in mytempk
DELETE FILE mytempk.dbf
RETURN STRTRAN(my_selestr,"*,","")
4 楼
jinlonggao [专家分:17130] 发布于 2009-04-23 14:56:00
楼主的想法很值得肯定,程序员不光要有吃苦耐劳的精神,更要有投机取巧的法门.首先支持一下楼主!
关于这个问题,可以用一个循环语句构造SQL语句的字串,然后用:
&SQLSTR(宏代换)来运行
当字段数很多时,字段名肯定有 共同性,好好想想,看有没有办法.另外,还可以用:
字段名=field(1)
for i = 2 to fcount()
if ...
字段名 = 字段名+','+field(i)
endif
endfor
把需要的字段名罗列成串,然后...
楼主自己偿试.....
5 楼
xm7050432 [专家分:180] 发布于 2009-04-23 17:24:00
谢谢3,4楼的老师,谢谢你们抽出时间回帖。等我测试,结果如何再公布。
我来回复