回 帖 发 新 帖 刷新版面

主题:求助关于 sel-sql的一个问题

如果我们要选择全部字段是用 sel *;
如果只是其中某几个字段是用 sel a,b,c,....
但如果我的字段很多有50几个,但是我只有3个不要显示,我要怎么处理。
一个一个写感觉不方便,请各位老师指教。 (我要把一个数据库中的50几个字段,搜索完显示在gird中的时候,有几个字段不显示。指令要怎么写才是最方便呢?)先谢谢各位抽空回复我的老师。

回复列表 (共5个回复)

沙发

这么懒啊
这是程序员的基本功啊

板凳

[quote]这么懒啊
这是程序员的基本功啊[/quote]
[em8]不是懒,是觉得如果字段有100个或者更多呢?一个一个写没问题,主要是觉得浪费时间,不知道select是否有这个样的功能,比如,select * [color=FF0000]except a,b,c[/color] from aa.dbf.我试了好像一直提示错误。所以就来这里问问老师,是否有方便的语句。

3 楼

好像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 楼

楼主的想法很值得肯定,程序员不光要有吃苦耐劳的精神,更要有投机取巧的法门.首先支持一下楼主!
关于这个问题,可以用一个循环语句构造SQL语句的字串,然后用:
&SQLSTR(宏代换)来运行
当字段数很多时,字段名肯定有 共同性,好好想想,看有没有办法.另外,还可以用:
字段名=field(1)
for i = 2 to fcount()
  if ...
    字段名 = 字段名+','+field(i)
  endif
endfor
把需要的字段名罗列成串,然后...
楼主自己偿试.....

5 楼

谢谢3,4楼的老师,谢谢你们抽出时间回帖。等我测试,结果如何再公布。

我来回复

您尚未登录,请登录后再回复。点此登录或注册