Help

atuldalvi

Member
I want to create a temp table and after creating a data i want to check there is no special character in it i.e. i want to validate each field. All is to do with dynamic handle programming.

Thanks in advance.
 
FUNCTION ValidateTab RETURNS logical ( INPUT TABLE-HANDLE hTable ).
DEFINE VARIABLE hBuf AS HANDLE NO-UNDO.
DEFINE VARIABLE qBuf AS HANDLE NO-UNDO.
DEFINE VARIABLE hDBFld AS HANDLE NO-UNDO.
DEFINE VARIABLE i AS INTEGER.


define variable mytab AS CHARACTER.
hBuf = hTable:DEFAULT-BUFFER-HANDLE.
mytab = hBuf:NAME.
CREATE QUERY qBuf.

qBuf:SET-BUFFERS(hBuf).
qBuf:QUERY-PREPARE("for EACH " + mytab + " NO-LOCK").
qBuf:QUERY-OPEN().
qBuf:GET-FIRST().
REPEAT:
IF NOT hBuf:AVAILABLE THEN LEAVE.
REPEAT ii = 1 TO hBuf:NUM-FIELDS:
IF hBuf:BUFFER-FIELD(ii):FIELD-VALUE <> "checkvalue" THEN return false.
END.



qBuf:GET-NEXT().
IF qBuf:QUERY-OFF-END THEN LEAVE.
END.
qBuf:QUERY-CLOSE().


END FUNCTION.
 
Thanks for replying.

But is there any way to pass temp table record in function while creating. i don't want to query all records in that function. I want to pass each single record while creating to validate in that function.
 
hBuf = Yourtablename:Buffer-Handle
REPEAT ii = 1 TO hBuf:NUM-FIELDS:
IF hBuf:BUFFER-FIELD(ii):FIELD-VALUE <> "checkvalue" THEN return false.
END.
 
i am trying below code but getting many errors. Please suggest or modify below code

RUN ValidateTTData(INPUT TABLE ttBPDData).

PROCEDURE ValidateTTData:
DEFINE INPUT PARAMETER TABLE-HANDLE hBufTT.


DEFINE VARIABLE hBuf AS HANDLE NO-UNDO.
DEFINE VARIABLE iCount AS INTEGER NO-UNDO.


hBuf = hBufTT:DEFAULT-BUFFER-HANDLE.


REPEAT iCount = 1 TO hBuf:NUM-FIELDS:
MESSAGE hBuf:BUFFER-FIELD(iCount):VALUE
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.


DELETE OBJECT hBuf.
END PROCEDURE.
 
Code:
/*Dynamic Query*/

DEFINE VARIABLE lcWhere        AS CHAR     NO-UNDO.
DEFINE VARIABLE pcTableName    AS CHARACTER    NO-UNDO.
DEFINE VARIABLE lcListeFields  AS CHARACTER    NO-UNDO.

DEFINE VARIABLE hTableBuffer   AS HANDLE   NO-UNDO.
DEFINE VARIABLE hFromField     AS HANDLE   NO-UNDO.
DEFINE VARIABLE li             AS INTEGER  NO-UNDO.
DEFINE STREAM ls.

pcTableName = "Customer".
lcWhere = " WHERE CustNum < 50".
lcListeFields = "CustNum,Name,City".

DEFINE VARIABLE qh8 AS WIDGET-HANDLE.
CREATE QUERY qh8.
CREATE BUFFER hTableBuffer FOR TABLE pcTableName.
qh8:ADD-BUFFER(hTableBuffer).
qh8:QUERY-PREPARE("FOR EACH " +  pcTableName + " NO-LOCK " + lcWhere).
qh8:QUERY-OPEN().

OUTPUT STREAM ls TO "edition.txt".
REPEAT:
   qh8:GET-NEXT.
   IF qh8:QUERY-OFF-END THEN LEAVE.
   DO li = 1 TO hTableBuffer:NUM-FIELDS:
    hFromField = hTableBuffer:BUFFER-FIELD(li).
    IF LOOKUP(hFromField:NAME, lcListeFields) > 0  THEN
      PUT STREAM ls UNFORMATTED STRING(hFromField:BUFFER-VALUE) + " ".
   END.
      PUT STREAM ls SKIP.
END.
DELETE OBJECT qh8.

OUTPUT STREAM ls CLOSE.
 
Re: checking temp-table values dynamically

i have already added that one. i am getting below error:

'value is not a queryable attribuite for buffer field.

Please have the decency to at least copy / paste the EXACT error you are getting including error number - CTRL+C / CTRL+V will paste the error message as text, there is no need to attempt to copy it manually. If your error really is about value then you have typing errors in your code - you need to use buffer-value to get the value of a buffer-field.
 
Back
Top