NOVA ROTINA PARA ATUALIZAR DADOS
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á
Qual o Banco? SQL Server, MySQL, ACCESS???
Usando como base o tópico anterior, fiz algumas adaptações para este caso.
Verifique se é isso mesmo:
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][Ô].
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][Ô].
só para entender melhor como exatamente está escrito neste campo, você poderia citar alguns exemplos.
ou é isto mesmo, na integra, nome_do_livro [1]
ou é isto mesmo, na integra, nome_do_livro [1]
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...
Bom vamos lá é até meio que simples
seguindo o exemplo do tecla
faça um laço no campo
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
Citação:MARCELO-TREZE :
Bom vamos lá é até meio que simples
seguindo o exemplo do tecla
faça um laço no campoSet 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...
desculpe colega faltou uma instruçao where no update
veja esta alteracao
tente agora
veja esta alteracao
Set RS2 = CNN.Execute([Ô]UPDATE tabela SET novocampo1 = [ô][Ô] & A(0) & [Ô][ô],novocampo2 = [ô][Ô] & Replace(A(1),[Ô]][Ô],[Ô][Ô]) & [Ô][ô] WHERE campo = [ô][Ô] & RS!campo & [Ô][ô][Ô])
tente agora
Citação:MARCELO-TREZE :
desculpe colega faltou uma instruçao where no update
veja esta alteracaoSet 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...
poste a rotina que vc escreu ai pra vermos onde esta o erro
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
Tópico encerrado , respostas não são mais permitidas