Conforme a gente vai tendo situações semelhantes, a gente cria funções para facilitar.
Por exemplo: vai criar a query com campos data, numérico, caractere, etc.
Código: Selecionar todos
cSql := Ltrim( Str( nNumero ) )
cSql := ['] + Transform( Dtos( Date() ), "@R 9999-99-99" ) + [']
cSql := ['] + cString + [']
Uma função auxiliar facilita.
Código: Selecionar todos
FUNCTION ValueSQL( xValue )
DO CASE
CASE xValue == Nil
RETURN "NULL"
CASE ValType( xValue ) == "N"
RETURN Ltrim( Str( xValue ) )
CASE ValType( xValue ) == "D"
RETURN ['] + Transform( Dtos( xValue ), "@R 9999-99-99" ) + [']
ENDCASE
RETURN ['] + Transform( xValue ) + [']
Depois nos fontes só usar:
Código: Selecionar todos
cSql := ValueSql( xValor )
Gravar "1" como numérico ou string, por exemplo.
Isto pode ser útil em migrações, que foi o que eu usei: no MySQL pode gravar "000001" em um campo numérico ou string.
Isso permite mudar a base de dados de caractere para numérica, sem precisar mexer nos fontes depois.
Uma outra que criei:
Código: Selecionar todos
FUNCTION ArrayAsSQL( aList )
LOCAL cTxt := "", oItem
FOR EACH oItem IN aList
IF oItem:__EnumIndex != 1
cTxt += ", "
ENDIF
cTxt += ValueSQL( oItem )
NEXT
RETURN cTxt
Tanto faz se é data, string, valor, ou tudo misturado.
