Kbase P10829: How can the current values of the fields that make up the primary index on a table be displayed dyna
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  11/14/2008 |
|
Status: Unverified
GOAL:
How can the current values of the fields that make up the primary index on a table be displayed dynamically?
FACT(s) (Environment):
Progress 9.x
OpenEdge 10.x
All Supported Operating Systems
FIX:
The following code allows you to pass in the database name and a handle to a buffer (either static or dynamic) and it will return a character string containing the values of the fields that make up the primary index in a CHR(1) delimited list where each element in the list consists of the name of the field followed by an equal sign followed by the value of the field.
DEFINE VARIABLE hVacation AS HANDLE NO-UNDO.
FIND FIRST Vacation NO-LOCK NO-ERROR.
ASSIGN hVacation = BUFFER Vacation:HANDLE.
RUN CurrentValuesForPrimaryIndexFields ('S2K_91D', hVacation).
MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX.
PROCEDURE CurrentValuesForPrimaryIndexFields:
DEFINE INPUT PARAMETER cDatabaseName AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER hTableBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
DEFINE VARIABLE cResult AS CHARACTER NO-UNDO.
DEFINE VARIABLE cTemp AS CHARACTER NO-UNDO.
DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferFile AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferIndex AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferIndexField AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferField AS HANDLE NO-UNDO.
ASSIGN cQueryString = 'FOR EACH &1._File NO-LOCK WHERE &1._File._File-Name = "&2",'
cQueryString = cQueryString + ' EACH &1._Index NO-LOCK WHERE &1._Index._File-Recid = RECID(&1._File),'
cQueryString = cQueryString + ' EACH &1._Index-Field NO-LOCK WHERE &1._Index-Field._Index-Recid = RECID(&1._Index),'
cQueryString = cQueryString + ' EACH &1._Field NO-LOCK WHERE RECID(&1._Field) = &1._Index-Field._Field-Recid'
cQueryString = SUBSTITUTE(cQueryString, cDatabaseName, hTableBuffer:TABLE).
CREATE QUERY hQuery.
CREATE BUFFER hBufferFile FOR TABLE cDatabaseName + '._File'.
CREATE BUFFER hBufferIndex FOR TABLE cDatabaseName + '._Index'.
CREATE BUFFER hBufferIndexField FOR TABLE cDatabaseName + '._Index-Field'.
CREATE BUFFER hBufferField FOR TABLE cDatabaseName + '._Field'.
hQuery:SET-BUFFERS(hBufferFile, hBufferIndex, hBufferIndexField, hBufferField).
hQuery:QUERY-PREPARE(cQueryString).
hQuery:QUERY-OPEN().
hQuery:GET-FIRST().
IF hBufferField:AVAILABLE THEN
DO:
DO WHILE hQuery:QUERY-OFF-END = FALSE:
ASSIGN cTemp = TRIM(hBufferField:BUFFER-FIELD('_Field-Name'):STRING-VALUE).
IF cResult <> '' THEN
ASSIGN cResult = cResult + CHR(1) + cTemp + '=' + TRIM(hTableBuffer:BUFFER-FIELD(cTemp):STRING-VALUE).
ELSE
ASSIGN cResult = cTemp + '=' + TRIM(hTableBuffer:BUFFER-FIELD(cTemp):STRING-VALUE).
hQuery:GET-NEXT().
END.
hQuery:QUERY-CLOSE().
DELETE OBJECT hBufferFile.
DELETE OBJECT hBufferIndex.
DELETE OBJECT hBufferIndexField.
DELETE OBJECT hBufferField.
DELETE OBJECT hQuery.
RETURN cResult.
END.
ELSE
DO:
hQuery:QUERY-CLOSE().
DELETE OBJECT hBufferFile.
DELETE OBJECT hBufferIndex.
DELETE OBJECT hBufferIndexField.
DELETE OBJECT hBufferField.
DELETE OBJECT hQuery.
RETURN '?'.
END.
END PROCEDURE.