progress-4gl之查询仅在运行时才知道名称的数据库表

98°冷暖 阅读:73 2025-01-19 22:14:33 评论:0

我在运行时获取数据库表名称(让我们假设来自用户)。我需要查询表并返回几个字段(我知道)。如何做到这一点?

“FOR EACH”不接受其中的变量名称。所以,我不能使用它。

我经历过动态查询,尤其是 SET-BUFFERS() 方法。即使如此,我之前也需要知道表名。

我需要类似的东西:

DEF VAR tablename AS CHAR.  
tablename = somename. 
FOR EACH tablename WHERE ....: 
     ... 
     ... 
END. 

有人可以指出我正确的方向吗?

请您参考如下方法:

您可以使用动态缓冲区进行动态查询。只需替换本例中 cTableName 变量的值即可:

/* Replace _file with whatever field you're after */ 
DEFINE VARIABLE cTableName AS CHARACTER   NO-UNDO INIT "_file". 
 
DEFINE VARIABLE hQuery  AS HANDLE      NO-UNDO. 
DEFINE VARIABLE hBuffer AS HANDLE      NO-UNDO. 
 
CREATE BUFFER hBuffer FOR TABLE cTableName. 
CREATE QUERY hQuery. 
 
hQuery:SET-BUFFERS(hBuffer). 
 
hQuery:QUERY-PREPARE("FOR EACH " + cTableName). 
hQuery:QUERY-OPEN(). 
 
REPEAT: 
    hQuery:GET-NEXT(). 
    IF hQuery:QUERY-OFF-END THEN LEAVE. 
 
    DISPLAY hBuffer:BUFFER-FIELD(1):BUFFER-VALUE. 
 
    /* If you know the name of the field you can do: */ 
    /* DISPLAY hBuffer:BUFFER-FIELD("nameoffield"):BUFFER-VALUE. */ 
 
END. 
 
 
/* Clean up */ 
hQuery:QUERY-CLOSE(). 
hBuffer:BUFFER-RELEASE(). 
DELETE OBJECT hBuffer. 
DELETE OBJECT hQuery. 


标签:数据库
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号