Poderia fazer igual eu faço, e centralizar numa função de conversão.
LOCAL cSql := "INSERT INTO "+ ::cTabela +"( " +;
"usuario, senha, nome, ativo, nivel, imagem, ultimologin ) "+;
"VALUES ( " + ;
StringSql( ::usuario ) + "," + ;
StringSql( ::senha ) + "," + ;
StringSql( ::nome ) + "," + ;
NumberSql( ::Ativo ) + "," + ;
NumberSql( ::nivel ) + "," + ;
StringSql( ::Imagem ) + "," + ;
StringSql( ::UltimoLogin ) + " )"
FUNCTION StringSql( xValue )
xValue := StrTran( xValue, ['], [\']
RETURN ['] + xValue + [']
FUNCTION NumberSql( xValue )
RETURN AllTrim( Str( xValue ) )
É só um exemplo.
Tratando tudo em função, é menos fonte, mais legível, e já ajusta tudo num logar só.
Opcionalmente, pode usar única função.
FUNCTION ValueSql( xValue )
DO CASE
CASE ValType( xValue ) == "C"; RETURN StringSql( xValue )
CASE ValType( xValue ) == "N"; RETURN NumberSql( xValue )
CASE ValType( xValue ) == "D"; RETURN DateSql( xValue )
ENDCASE
// tipo nao tratado
RETURN xValue
Só sugestão.