Austin
Austin

Reputation: 1255

Query a database table whose name is known only at runtime

I get a database table name at run time(let us suppose from user). I need to query the table and return few fields(which I know). How to do this?

"FOR EACH" wont accept a variable name in it. So, I cant use it.

I have gone through dynamic queries, especially SET-BUFFERS() method. Even with this, I need to know the table name before.

I need something like:

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

Can someone please point me to right direction?

Upvotes: 2

Views: 2950

Answers (1)

Jensd
Jensd

Reputation: 8011

You can do a dynamic query with a dynamic buffer. Simply replace the value of cTableName variable in this example:

/* 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.

Upvotes: 5

Related Questions