Obtain Field Type

subscripciones

New Member
I am trying to obtain the data type (logical, character, etc) from a table and field name stored in a variable.

DEFINE VARIABLE columnName AS CHARACTER.
columnName = "TableCustomer.ColumnId".
DEFINE VARIABLE typeResult AS CHARACTER.

...do Something...

DISPLAY typeResult. /* ex. ColumnId Data Type: RECID) */


thanks
 

DevTeam

Member
You can achieve it through BUFFER-FIELD attributes :

Code:
DEFINE VARIABLE columnName AS CHARACTER.
DEFINE VAR bh AS WIDGET-HANDLE.
DEFINE VARIABLE typeResult AS CHARACTER.

columnName = "myTable.myField".

CREATE BUFFER bh FOR TABLE ENTRY(1, columnName, ".").

typeResult = bh:BUFFER-FIELD(ENTRY(2, columnName, ".")):DATA-TYPE.

DISPLAY typeResult.
 

TomBascom

Curmudgeon
The BUFFER-FIELD trick is clever!

The "classic" method is to lookup _File & _Field:

Code:
find _file no-lock where _file-name = "customer".
find _field no-lock where _file-recid = recid( _file ) and _field-name = "name".
display _data-type.
 

subscripciones

New Member
DEFINE VARIABLE columnName AS CHARACTER.
DEFINE VAR bh AS WIDGET-HANDLE.
DEFINE VARIABLE typeResult AS CHARACTER.
columnName = "TableCustomer.ColumnId".
CREATE BUFFER bh FOR TABLE ENTRY(1, columnName, ".").
typeResult = bh:BUFFER-FIELD(ENTRY(2, columnName, ".")):DATA-TYPE.
DISPLAY typeResult.

Result: could not create buffer object for table TableCustomer. (7334)


----

find _file no-lock where _file-name = "customer".
find _field no-lock where _file-recid = recid( _file ) and _field-name = "name".
display _data-type.

Result:

Unknown or ambiguous table _file. (725)
** Could not understand line 1. (196)


What is _file?


thanks
 

subscripciones

New Member
find _file no-lock where _file-name = "customer".
find _field no-lock where _file-recid = recid( _file ) and _field-name = "name".
display _data-type.

Forget to create an alias.

this works.



thanks!
 

jongpau

Member
The dynamic method using buffer objects is of course more portable across appserver and client code since it can also be used for fields in temp-tables :)

Paul
 
Top