marcosgambeta / sqlrddpp

SQLRDD for Harbour++ and Harbour
GNU General Public License v2.0
11 stars 6 forks source link

FUNCTION SR_SubQuoted #20

Open sygecom opened 7 months ago

sygecom commented 7 months ago

Mestre Marcos.

Tive que fazer uma alteração aqui no SQLRDD depois de muito teste. Por algum motivo na versão xHarbour ( lib compilada que tenho aqui antiga ) dava certo e no Harbour dava errado. Sempre que usava a function SR_cDBValue que por sua vez chama a function SR_SubQuoted, com campos vazio( ex: SR_cDBValue('')) ele gerava um E'' e, isso quebrava na hora de gerar os retortos para mostrar em tela ou gerar macro conforme exemplo abaixo: cADD:='' aCOL:=DBSTRUCT() // aqui pega uma estrutura de uma tabela minha FOR mY:=1 TO LEN(aCOL) IF alltrim(aCOL[mY,1])='NUMBOL' cADD+='0,' ELSEIF alltrim(aCOL[mY,1])='ORDEM_NRO_IMPR' cADD+='0,'
ELSEIF alltrim(aCOL[mY,1])='MEDIA_VOLUME' cADD+='0,'
ELSEIF alltrim(aCOL[mY,1])='QTD' cADD+='0,'
ELSEIF alltrim(aCOL[mY,1])='PRODUTO' cADD+="'',"
ELSE IF VALTYPE(RETORNA_TIPO_CAMPO('ORDEM',alltrim(aCOL[mY,1])))='D' cADD+='CTOD(SPACE(8)),' ELSEIF VALTYPE(RETORNA_TIPO_CAMPO('ORDEM',alltrim(aCOL[mY,1])))='L' cADD+='.F.,' ELSE
cADD+=CS(RETORNA_TIPO_CAMPO('ORDEM',alltrim(aCOL[mY,1])))+"," ENDIF ENDIF NEXT cADD+="0,'','',0" aVET:={{ &cADD }}

Colocando para ver na tela o que cada versão gerou: cADD:="0,E'',E'',E'',E'',E'',E'',E'',E'',E'',CTOD(SPACE(8)),E'',E'',E'',E'',0,'','',0," //HARBOUR cADD:="0,'','','','','','','','','',CTOD(SPACE(8)),'','','','',0,'','',0" //XHARBOUR(versão do SQLRDD antes de abrirem como opensource)

Então acabei mudando em UTILS.PRG para comentar as linhas 595 e 596, conforme abaixo: image

Eu testei com: POSTGRESQL 9.5, 10, 13 e 16 e deram varios SQL certo depois dessa alteração.