FORMATAR MONEY NO SQL

F001E 08/09/2006 15:54:54
#170258
Galera tenho o seguinte Código :

If TBClientes.State = 1 Then TBClientes.Close
StringSQL = "Select Codigo,Nome,Endereco,VCompra from Clientes"
Set TBClientes = New ADODB.Recordset
TBClientes.Open StringSQL, Cnn, adOpenDynamic
If TBClientes.RecordCount <> 0 Then
Set frmClientes.Grid.DataSource = TBClientes
frmClientes.Label1.Caption = "" & CStr(TBClientes.AbsolutePosition) & " de " & CStr(TBClientes.RecordCount)
frmClientes.Label1.Refresh
Else
frmClientes.Grid.Clear
End If

....com esse código eu preencho um FlexGrid via ADO atraves do DataSource do FlexGrid, mostrando apenas os campos definidos no Select acima... mas eu gostaria de formatar o campo VCompra, com o simbolo monetário(R$)...pois ele esta me mostrando só o q esta gravado no banco(tipo 15,3) eu querio mostra (Tipo R$15,30)...
será q alguem poderia me ajudar ..???
USUARIO.EXCLUIDOS 08/09/2006 16:31:24
#170269
Assim dá certo, mas ao concatenar o 'R$ ' com o VCompra, o typo de dado na passará a ser uma String.

Se for só pra visualização, não tem problema pois não vai manipular dados, mas se tiver atualizações, pode dar erro.
USUARIO.EXCLUIDOS 08/09/2006 17:16:06
#170285
Citação:

HugoSSouza.. esse forma q vc colocou nao funciona....
StringSQL = "Select Codigo,Nome,Endereco,'R$ ' & format(VCompra,'0.00') from Clientes"

da erro : "Run-timer Error"
"format" is not a recognized function name"
não certo dessa forma não..




Se vc tiver usando ACCESS, tente :

Citação:

'R$ ' & Format(VCompra,'#,000.00')



Tenho 2 considerações:

1. No ACCESS funfa bem, não é garantido em outros BD's, vc vai precisar verificar qual a sintaxe correta do Format... e da concatenação de strings/campos pro seu banco.
2. Se continuar dando erro, adicione o as NomeDoCampo após a instrução format para dar um nome de campo válido para a Concatenação. Pois além de mudar o tipo de dado do campo (como postei antes), ao concatenar, o nome do campo tb vai ser alterado e pode gerar um nome inválido.
F001E 08/09/2006 17:30:04
#170290
entao... nao estou usando o ACCESS... é o SQL Server... e mesmo assim continua dando o mesmo erro......
USUARIO.EXCLUIDOS 08/09/2006 17:40:02
#170292
Não manjo de SQL Server... só trampo com MySQl.

Mas é como eu te disse, o problema deve tá na sintaxe do Format no SQL SERVER.

O ACCESS é um caso a parte, tem muita coisa que dá certo nele que não funfa direito em SGBD's de verdade.

Testei seu SQL no mysql e tb não deu certo... vou pesquisar aki e ver se encontro algo que dá certo... se der certo no mysql deve dar tb no server pois a sintaxe sql 2 é mto parecida.
F001E 08/09/2006 17:53:30
#170297
Cara eu fiz assim...
For i = 0 To TBClientes.RecordCount
frmClientes.Grid.TextMatrix(i, 2) = Format(frmClientes.Grid.TextMatrix(i, 2), "0.00")
Next i

mas tipo..... com o passar do tempo...vai ficar lerdo pra montar isso....
USUARIO.EXCLUIDOS 08/09/2006 17:56:12
#170299
No mysql, consegui fazer a concatenação usando a função concat() que concatena 2 strings...

Sintaxe da CONCAT do MySQL:

CONCAT(String1, String2)


primeiro fiz... CONCAT('R$ ', VCompra) as VCompra

O resultado foi : R$ ####,# e não R$ #.###,##

Daí apliquei o format:

Sintaxes do Format:

MySQL: Format(VCompra, Decimais) as VCompra
ACCESS: Format(VCompra, '#,000.00')) as VCompraX
No mysql, aceita renomear o resultado para ter o mesmo nome do Campo, já no access dá um erro de referência circular. Precisei mudar o nome do campo (VCompraX)

O resultado foi : R$ #.###,## -> Formatação OK

Então juntei as 2 assim :
CONCAT('R$ ', format(VCompra, 2))

Verifique na documentação do SQL Server se existe uma função para concatenação de strings e campos... A sintaxe pode variar um pouco mas o conceito é o mesmo.

Crei que deve ser mais parecida com a sintaxe do MySQL que se se basea em muitas características do SQL Server.


Infelizmante não pude ajudar mais...
USUARIO.EXCLUIDOS 08/09/2006 18:09:56
#170303
use esta função que criamos aqui

Public Function PontoMoney(frmt As String) As String
Dim i As Integer
frmt = FormatNumber(frmt, 2)
frmt = Replace(frmt, ".", "")
For i = 1 To Len(frmt)
If Mid(frmt, i, 1) = "," Then
Mid(frmt, i, 1) = "."
End If
Next i
PontoMoney = frmt
End Function


F001E 08/09/2006 18:12:17
#170304
Cara ... valeu a dica.. valeu mesmo....
achei a função no SQL Server q faz isso....

StringSQL = "Select Codigo,Nome,Cast(Cast('R$',VCompra as Money(8)) as Decimal(10,2)) as VCompra from Clientes"

é a função Cast q faz isso.... agora deu certo....

valeus irmão.... abraços....
USUARIO.EXCLUIDOS 08/09/2006 18:15:24
#170305
blz

F001E 08/09/2006 18:18:46
#170307
entao cara.. eu fiz uma parecido com essa sua ae...
mas é o seguinte...se a tabela ficar muito grande.. eu creio q vai ficar lerdo pra montar isso....
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas