Function Delphi 7

Delphi

16/02/2018

Boa Tarde, estou com uma dúvida sou novo do Delphi 7 fiz uma função e ao compilar ele sempre me retorna um erro: dynamic sql error = -104, token unknown - line 7, char 8, WHEN,
Alguem pode me ajudar, segue a function:
Nessa função eu verifico se existe um determinando campo da tabela se não tiver insere.
Porque o Delphi não reconhece o comando when
begin
Clear;
Add(''''''''SELECT DISTINCT'''''''');
Add('''''''' A.RDB$FIELD_POSITION AS ORDER_ID,'''''''');
Add('''''''' A.RDB$FIELD_NAME AS F_NAME,'''''''');
Add('''''''' B.RDB$FIELD_TYPE,'''''''');
Add('''''''' B.RDB$FIELD_SCALE,'''''''');
Add('''''''' CASE'''''''');
Add('''''''' WHEN B.RDB$FIELD_PRECISION > 0 THEN'''''''');
Add(''''''''''''''''''''''''NUMERIC(''''''''''''''''||CAST(B.RDB$FIELD_PRECISION AS'''''''');
Add(''''''''VARCHAR(2))||'''''''''''''''',''''''''''''''''||CAST(B.RDB$FIELD_SCALE*-1 AS VARCHAR(2))||'''''''''''''''')'''''''''''''''''''''''');
Add('''''''' WHEN C.RDB$TYPE_NAME=''''''''''''''''LONG'''''''''''''''' THEN ''''''''''''''''INTEGER'''''''''''''''''''''''');
Add('''''''' WHEN C.RDB$TYPE_NAME=''''''''''''''''SHORT'''''''''''''''' THEN ''''''''''''''''SMALLINT'''''''''''''''''''''''');
Add('''''''' WHEN C.RDB$TYPE_NAME=''''''''''''''''VARYING'''''''''''''''' THEN'''''''');
Add(''''''''''''''''''''''''VARCHAR(''''''''''''''''||B.RDB$CHARACTER_LENGTH||'''''''''''''''')'''''''''''''''''''''''');
Add('''''''' WHEN C.RDB$TYPE_NAME=''''''''''''''''TEXT'''''''''''''''' THEN'''''''');
Add(''''''''''''''''''''''''CHAR(''''''''''''''''||B.RDB$CHARACTER_LENGTH||'''''''''''''''')'''''''''''''''''''''''');
Add('''''''' WHEN C.RDB$TYPE_NAME=''''''''''''''''BLOB'''''''''''''''' THEN ''''''''''''''''BLOB SUB_TYPE'''''''');
Add(''''''''''''''''''''''''||CAST(B.RDB$FIELD_SUB_TYPE AS CHAR(1))'''''''');
Add('''''''' ELSE'''''''');
Add('''''''' C.RDB$TYPE_NAME'''''''');
Add('''''''' END AS F_TIPO,'''''''');
Add('''''''' CASE'''''''');
Add('''''''' WHEN A.RDB$NULL_FLAG IS NULL THEN '''''''''''''''''''''''''''''''''''''''');
Add('''''''' ELSE'''''''');
Add('''''''' ''''''''''''''''NOT NULL'''''''''''''''''''''''');
Add('''''''' END AS F_NULL,'''''''');
Add('''''''' F.RDB$FIELD_NAME AS F_PRIMARY'''''''');
Add(''''''''FROM'''''''');
Add('''''''' RDB$RELATION_FIELDS'''''''');
Add('''''''' A'''''''');
Add('''''''' LEFT JOIN RDB$FIELDS'''''''');
Add('''''''' B ON A.RDB$FIELD_SOURCE=B.RDB$FIELD_NAME'''''''');
Add('''''''' LEFT JOIN RDB$TYPES'''''''');
Add('''''''' C ON C.RDB$FIELD_NAME=''''''''''''''''RDB$FIELD_TYPE'''''''''''''''' AND'''''''');
Add(''''''''B.RDB$FIELD_TYPE=C.RDB$TYPE'''''''');
Add('''''''' LEFT JOIN RDB$RELATION_CONSTRAINTS'''''''');
Add('''''''' E ON A.RDB$RELATION_NAME=E.RDB$RELATION_NAME AND'''''''');
Add(''''''''E.RDB$CONSTRAINT_TYPE=''''''''''''''''PRIMARY KEY'''''''''''''''''''''''');
Add('''''''' LEFT JOIN RDB$INDEX_SEGMENTS'''''''');
Add('''''''' F ON E.RDB$INDEX_NAME=F.RDB$INDEX_NAME AND'''''''');
Add(''''''''A.RDB$FIELD_NAME=F.RDB$FIELD_NAME'''''''');
Add(''''''''WHERE'''''''');
Add('''''''' A.RDB$RELATION_NAME = ''''''''''''''''''''''''+xTabela+'''''''''''''''''''''''''''''''');
end;
Rodrigo Estradiote

Rodrigo Estradiote

Curtidas 0

Respostas

Marcelo Cirineu

Marcelo Cirineu

16/02/2018

Mas você chegou a rodar esse comando em outro lugar ? As vezes nem ele esta funcionando!
GOSTEI 0
POSTAR