NOVA ROTINA PARA ATUALIZAR DADOS

FABAO 05/01/2010 00:31:26
#331057


olá amigos... preciso modificar os dados de uma tabela do meu banco de dados....



tenho 31098 registros, cujos mesmos estão da forma à seguir


Nome_do_livro [1]
Nome_do_livro [2]
Nome_do_livro [3]

e assimpor diante, o que eu preciso é:

fazer um update na tabela e pegar somente esses numeros e gravar em um noutro campo chamado num, e depois apagar esse numero e as chaves [Ô][ ][Ô] do campo atual ficando:

[Ô]Nome_do_livro[Ô] em um campo da tabela e o numero correspondente à ele em outro campo

será que exliquei bem?

será?

obrigado desde já
RCMRO 05/01/2010 07:49:54
#331063
Qual o Banco? SQL Server, MySQL, ACCESS???
TECLA 05/01/2010 08:34:55
#331064
Usando como base o tópico anterior, fiz algumas adaptações para este caso.
Verifique se é isso mesmo:

Dim i As Integer, num As Integer, texto As String
Do While Not rs.EOF
i = InStr(1, rs.Fields([Ô]nome[Ô]), [Ô][[Ô])

num = Trim(Left(rs.Fields([Ô]nome[Ô]), i + 1))
texto = Mid(rs.Fields([Ô]nome[Ô]), 1, i - 1)

sSQL = [Ô]UPDATE tabela SET nome=[ô][Ô] & texto & [Ô][ô], num=[Ô] & num & [Ô] WHERE nome=[ô][Ô] & rs.Fields([Ô]nome[Ô]) & [Ô][ô][Ô]
con.Execute sSQL
rs.MoveNext
Loop
MsgBox [Ô]Atualização concluída![Ô], , [Ô]Tecla - VBMania[Ô]


Como você não informou o NOME DO CAMPO que vai armazenar o texto [Ô][txt-color=#0000f0]Nome_do_livro[/txt-color][Ô], informei [Ô][txt-color=#0000f0]nome[/txt-color][Ô].
MARCELO.TREZE 05/01/2010 11:29:25
#331072
Resposta escolhida
só para entender melhor como exatamente está escrito neste campo, você poderia citar alguns exemplos.

ou é isto mesmo, na integra, nome_do_livro [1]

FABAO 05/01/2010 19:32:38
#331106
Citação:

RCMRO :
Qual o Banco? SQL Server, MySQL, ACCESS???




olá amigo...banco access

Citação:

TECLA :
Usando como base o tópico anterior, fiz algumas adaptações para este caso.
Verifique se é isso mesmo:

Dim i As Integer, num As Integer, texto As String
Do While Not rs.EOF
i = InStr(1, rs.Fields([Ô]nome[Ô]), [Ô][[Ô])

num = Trim(Left(rs.Fields([Ô]nome[Ô]), i + 1))
texto = Mid(rs.Fields([Ô]nome[Ô]), 1, i - 1)

sSQL = [Ô]UPDATE tabela SET nome=[ô][Ô] & texto & [Ô][ô], num=[Ô] & num & [Ô] WHERE nome=[ô][Ô] & rs.Fields([Ô]nome[Ô]) & [Ô][ô][Ô]
con.Execute sSQL
rs.MoveNext
Loop
MsgBox [Ô]Atualização concluída![Ô], , [Ô]Tecla - VBMania[Ô]


Como você não informou o NOME DO CAMPO que vai armazenar o texto [Ô][txt-color=#0000f0]Nome_do_livro[/txt-color][Ô], informei [Ô][txt-color=#0000f0]nome[/txt-color][Ô].



olá amigo tecla, erro de sintaxe (operador faltando) na expressão da consulta [ô]ALMANAQUES [1 WHERE LIVRO = [ô]ALMANAQUE [13][Ô].

o erro é exatamente este...




Citação:

MARCELO-TREZE :
só para entender melhor como exatamente está escrito neste campo, você poderia citar alguns exemplos.

ou é isto mesmo, na integra, nome_do_livro [1]



sim amigo é isso mesmo na integra, lembrandro que os numeros que estão dentro das [Ô][ ][Ô] podem conter até 3 casas...
MARCELO.TREZE 05/01/2010 20:33:08
#331112
Bom vamos lá é até meio que simples

seguindo o exemplo do tecla

faça um laço no campo

Set RS = CNN.Execute([Ô]SELECT campo FROM tabela[Ô])
Dim A() As String
Do While Not RS.EOF
A() = Split(RS!campo,[Ô][[Ô])
Set RS2 = CNN.Execute([Ô]UPDATE tabela SET novocampo1 = [ô][Ô] & A(0) & [Ô][ô],novocampo2 = [ô][Ô] & Replace(A(1),[Ô]][Ô],[Ô][Ô]) & [Ô][ô][Ô])
RS.MoveNext
Loop


FABAO 05/01/2010 22:53:59
#331118
Citação:

MARCELO-TREZE :
Bom vamos lá é até meio que simples

seguindo o exemplo do tecla

faça um laço no campo

Set RS = CNN.Execute([Ô]SELECT campo FROM tabela[Ô])
Dim A() As String
Do While Not RS.EOF
A() = Split(RS!campo,[Ô][[Ô])
Set RS2 = CNN.Execute([Ô]UPDATE tabela SET novocampo1 = [ô][Ô] & A(0) & [Ô][ô],novocampo2 = [ô][Ô] & Replace(A(1),[Ô]][Ô],[Ô][Ô]) & [Ô][ô][Ô])
RS.MoveNext
Loop





amigo, em partes funcionou perfeitamente, porém naum fez o que eu queria:


ele pegou os dados do primeiro ragistro e alterou todos os outros 31097 registros com os dados do primeiro


o primeiro registro é:

ALMANAQUE [13]

ele fez o correto, separou o numero e gravou em outro campo, depois atualizou o campo ficando somente o nome em um campo e somente o numero em outro campo, porém ele gravou igaul em todos os registros ou seja [Ô]ALMANAQUE 13[Ô] em todos os registros da tabela, quando na verdade são nomes e numeros diferentes para quase todos os registro, podendo eventualmente ser repetidos...
MARCELO.TREZE 06/01/2010 08:05:05
#331130
desculpe colega faltou uma instruçao where no update

veja esta alteracao

Set RS2 = CNN.Execute([Ô]UPDATE tabela SET novocampo1 = [ô][Ô] & A(0) & [Ô][ô],novocampo2 = [ô][Ô] & Replace(A(1),[Ô]][Ô],[Ô][Ô]) & [Ô][ô] WHERE campo = [ô][Ô] & RS!campo & [Ô][ô][Ô])


tente agora
FABAO 06/01/2010 17:54:04
#331235
Citação:

MARCELO-TREZE :
desculpe colega faltou uma instruçao where no update

veja esta alteracao

Set RS2 = CNN.Execute([Ô]UPDATE tabela SET novocampo1 = [ô][Ô] & A(0) & [Ô][ô],novocampo2 = [ô][Ô] & Replace(A(1),[Ô]][Ô],[Ô][Ô]) & [Ô][ô] WHERE campo = [ô][Ô] & RS!campo & [Ô][ô][Ô])


tente agora




amigo, agora com essa alteração, el modifica o primeiro registro, mas ao passar para o próximo dá o erro:

[Ô]subscript out of range[Ô]

o erro é na linha do update...
MARCELO.TREZE 06/01/2010 22:34:32
#331253
poste a rotina que vc escreu ai pra vermos onde esta o erro
FABAO 06/01/2010 22:38:43
#331254
Citação:

MARCELO-TREZE :
poste a rotina que vc escreu ai pra vermos onde esta o erro




Conn
Set Rs = DB.Execute([Ô]SELECT * FROM livrosconteudos[Ô])
Dim A() As String
Do While Not Rs.EOF
A() = Split(Rs!livro, [Ô][[Ô])
Set RS2 = DB.Execute([Ô]UPDATE livrosconteudos SET livro = [ô][Ô] & A(0) & [Ô][ô],capitulo = [ô][Ô] & Replace(A(1), [Ô]][Ô], [Ô][Ô]) & [Ô][ô] WHERE livro = [ô][Ô] & Rs!livro & [Ô][ô][Ô])
Rs.MoveNext
Loop
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas