ENVIAR EMAIL COM VARIOS DESTINATARIOS

JAN031 13/03/2013 18:49:56
#420420
Boa Noite
eu estou fazendo um sisteminha que quando o usuario da um click em um determinado LinkLabel o realizado uma pesquisa com os emails e então o usuario pode enviar para todos os usuarios. Junto com o SELECT coloquei uma variavel contendo [Ô] ; [Ô].

dim ponto as String = [Ô] ; [Ô]
for i=0 to dados.rows.count -1
destinatario.Text = dados.Rows(i).Item([Ô]email[Ô])+vbnewline+ponto

next i

O problema é que so é permitido enviar o email dessa seguinte maneira:
email;email;email;

e esse ponto no final do ultimo email da erro. Estou tentando fazer com que quando for buscado o ultimo registro não apareça esse [Ô] ; [Ô].


ALVAROVB2009 13/03/2013 18:58:33
#420421
Faz um ajuste no seu for

Troca a posição do ponto, assim vc sempre irá colocar o ponto e virgula na frente do email e apenas coloquei uma alternativa para verificar se é o primeiro email que esta sendo selecionado, ficaria algo assim:

if trim(destinatario.txt)=[Ô][Ô] then
destinatario.Text = dados.Rows(i).Item([Ô]email[Ô])
else
destinatario.Text =destinatario.Text + vbnewline+ponto+dados.Rows(i).Item([Ô]email[Ô])
endif

Acho que isso pode te ajudar
LUIS.HERRERA 14/03/2013 08:37:01
#420435
Resposta escolhida
Bom eu evitaria fazer um IF a cada interação, isso aumenta o processamento, pois só é necessário na primeira vez. Assim a alternativa é mais simples.

Testa se há registros para concatenar (só usa IF uma vez) depois inverte a ordem de preenchimento da variável assim:

Dim ponto as String = [Ô] ; [Ô]
IF dados.rows > 1 Then
[ô]tem dados no grid
destinatario.Text = dados.Rows(0).Item([Ô]email[Ô])

For i=1 to dados.rows.count -1
destinatario.Text = destinatario.Text + vbnewline+ponto + dados.Rows(i).Item([Ô]email[Ô])
Next i
End IF
next i

Nota: Em Dot.Net o uso de concatenação cria novas variáveis em memória a cada interação. Isso em função do npumero de repetições pode aumentar em milhares de vezes o tempo necessário para a operação. A solução conrreta nesses casos é o uso do método StringBuider da Classe String. Ela é infinitamente mais rápida. Já postei um texto a algum tempo aqui, com um exemplo de performance com 10 mil registros ela foi instantânea.

Ex:

using System
using Texto = System.Text.StringBuilder

Dim ponto as String = [Ô] ; [Ô]
IF dados.rows > 1 Then
[ô]tem dados no grid
Texto myEmails = new Texto()
myEmails.Append(dados.Rows(0).Item([Ô]email[Ô]));

destinatario.Text =

For i=1 to dados.rows.count -1
myEmails.Append(vbnewline+ponto + dados.Rows(i).Item([Ô]email[Ô]))
Next i
destinatario.Text = myEmails
End IF


PEGUDO 14/03/2013 09:16:12
#420439
Porque você não tira esse último ponto usando o MID?
Exemplo:
Dim Destinatarios As String = Nothing
Dim Ponto As String = [txt-color=#e80000][Ô];[Ô][/txt-color]

For i=0 To dados.Rows.Count -1
Destinatarios += dados.Rows(i).Item([txt-color=#e80000][Ô]email[Ô][/txt-color]) + VbNewLine + Ponto
Next i

Destinatarios = Mid(Destinatarios,1, InstrRev(Destinatarios, Ponto) - 1)
destinatario.Text = Destinatarios
JAN031 18/03/2013 10:15:47
#420640
Muito Obrigada pelas dicas

LUIS HERRERA não conhecia o método StringBuider, vou estudar mais esse método.
Tópico encerrado , respostas não são mais permitidas