LOOP PARA APAGAR REGISTRO

MARIOBOARI 01/02/2015 00:53:47
#444185
Prezados, estou tentando apagar um registro em uma tabela e estou tendo alguns problemas,
Tenho um Banco de dados com duas tabelas, uma dados e outra col11, estou pegando as informações de 3 colunas de dados, inserindo em col11, e depois apagar a linha com as informações, todas utilizando variáveis.

Quero antes de iniciar o loop, pegar a primeira linha, estou usando [Ô] sql.movefirst()[Ô], não esta aceitando.

Outro problema, na linha do loop dá o seguinte erro: [Ô]A conversão da seqüência de caracteres [ô] select dz1,dz2,dz3 FROM dados[ô] no tipo [ô]Double[ô] não é válida.[Ô]

Obrigado a todos.

Segue os códigos que estou usando.

Dim con = New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & My.Application.Info.DirectoryPath & [Ô]\Banco.MDB[Ô])
con.Open()

Dim sql As String = [Ô] select dz1,dz2,dz3 FROM dados[Ô]
Dim CD As New OleDbCommand()
CD.Connection = con
CD.CommandText = sql
Dim DR As OleDbDataReader = CD.ExecuteReader

sql.movefirst()

If sql > 0 Then




Dim sql1 As String = [Ô] select dz1,dz2,dz3 FROM dados[Ô]
Dim CD1 As New OleDbCommand()
CD1.Connection = con
CD1.CommandText = sql1
Dim DR1 As OleDbDataReader = CD1.ExecuteReader
If DR1.Read Then

Dim VAR1 As String = CStr(DR1([Ô]dz1[Ô]))
Dim VAR2 As String = CStr(DR1([Ô]dz2[Ô]))
Dim VAR3 As String = CStr(DR1([Ô]dz3[Ô]))

Dim Inserir1 As String
Inserir1 = [Ô]INSERT INTO col11(dz1,dz2,dz3) VALUES([Ô] & VAR1 & [Ô],[Ô] & VAR2 & [Ô],[Ô] & VAR3 & [Ô])[Ô]
Dim CMD As New OleDbCommand(Inserir1, con)
CMD.ExecuteNonQuery()


Dim CD2 As New OleDbCommand()
CD2.Connection = con
CD2.CommandText = sql

Dim DR2 As OleDbDataReader = CD2.ExecuteReader
If DR2.Read Then
Dim VAR4 As String = CStr(DR2([Ô]dz1[Ô]))
Dim VAR5 As String = CStr(DR2([Ô]dz2[Ô]))
Dim VAR6 As String = CStr(DR2([Ô]dz3[Ô]))

Dim deletar As String
deletar = [Ô]DELETE * FROM dados WHERE dz1= [ô] [Ô] & VAR4 & [Ô] [ô] and dz2 = [ô] [Ô] & VAR5 & [Ô] [ô] and dz3= [ô] [Ô] & VAR6 & [Ô] [ô][Ô]
Dim DEL As New OleDbCommand(deletar, con)
DEL.ExecuteNonQuery()

End If

End If
End If
NICKOSOFT 01/02/2015 14:19:32
#444190
 
[ô]ler arquivo de cep
Dim conexao As OleDbConnection
Dim Sql As String
conexao = New OleDbConnection([Ô]Provider=Microsoft.ACE.OLEDB.12.0;data source=[Ô] & OfD1.FileName & [Ô];[Ô])
conexao.Open()
Sql = [Ô]select L.log_tipo_logradouro,L.log_no,L.cep,L.ufe_sg as UF,M.loc_no as Municipio,M.cep as Faixa,B.bai_no as Bairro from ((log_logradouro L[Ô] _
& [Ô] inner join log_localidade M on L.loc_nu_sequencial=M.loc_nu_sequencial)[Ô] _
& [Ô] inner join log_bairro B on l.bai_nu_sequencial_ini=B.bai_nu_sequencial)[Ô]
Try
Dim da As OleDbDataAdapter = New OleDbDataAdapter(Sql, conexao)
Dim ds As DataSet = Nothing

Dim Logradouro, Bairro, Municipio, UF, CEP As String

ds = New DataSet()
da.Fill(ds)

[ô]completou a busca, agora insere
Dim SqlInc As String = [Ô]INSERT INTO CEP(Logradouro,Cep,Bairro,Municipio,UF) values (@logradouro,@cep,@bairro,@municipio,@uf)[Ô]
For index = 0 To ds.Tables(0).Rows.Count - 1
Logradouro = ds.Tables(0).Rows(index).Item(0).ToString & [Ô] [Ô] & ds.Tables(0).Rows(index).Item(1).ToString
Bairro = ds.Tables(0).Rows(index).Item(6).ToString
Municipio = ds.Tables(0).Rows(index).Item(4).ToString
UF = ds.Tables(0).Rows(index).Item(3).ToString
CEP = ds.Tables(0).Rows(index).Item(2).ToString
[ô]inserir na tabela ceps
Dim parametrosNomes(4) As String
parametrosNomes(0) = [Ô]@Logradouro[Ô]
parametrosNomes(1) = [Ô]@Cep[Ô]
parametrosNomes(2) = [Ô]@Bairro[Ô]
parametrosNomes(3) = [Ô]@Municipio[Ô]
parametrosNomes(4) = [Ô]@UF[Ô]

Dim parametrosValores(4) As String
parametrosValores(0) = Mid(Logradouro, 1, 50)
parametrosValores(1) = Mid(CEP, 1, 8)
parametrosValores(2) = Mid(Bairro, 1, 50)
parametrosValores(3) = Mid(Municipio, 1, 50)
parametrosValores(4) = Mid(UF, 1, 2)

Dim command As New SqlCeCommand(SqlInc, connection)
FillParameters(command, parametrosNomes, parametrosValores)
command.ExecuteNonQuery()
command.Dispose()
Next

não sei em q nível de conhecimento vc esta, mas veja se te ajuda um pouco, no caso fiz uma busca num banco do correio, buscando parte dos dados q me interessa, pra jogar numa tabela de outro banco, isso pode causar uma confusão no seu entendimento, mas acho q fica claro a separação de busca, e inclusão
como vc não passou qq critério de busca, entendo q vai excluir tudo da tabela então basta [Ô]delete from dados where dz1=[ô][Ô] & var1 e assim vai....não precisa criar novas pra mesmos valores....e no caso de uma leitura q retorna vários registros em um DS DR vc usa um for pra percorrer as linhas retornadas, eu gosto de trabalhar no geral com DS, não sei se no DR vc tem esse suporte....ah esse Dim command As New SqlCeCommand(SqlInc, connection) usa uma connection diferente da inicial pois é outro banco, não apareceu ai a sua declaracao

MARIOBOARI 02/02/2015 23:51:41
#444225
NICKOSOFT, Obrigado pela ajuda. Realmente causou uma baita confusão......Tenho lido tanta coisa sobre Banco de dados, minha cabeça esta uma salada.

Resolvi preparar o programa por partes, primeiro fazer as linhas para INSERT, depois para DELETE e no fim preparar o Loop.

Descobri uma coisa ruim, as linhas para Deletar não está funcionando, estou pegando as informações da tabela DADOS, criando 3 variáveis, depois tento apagar a linha de DADOS que contém as informações da variável.

Não apresenta erro, mas também não funciona.

Segue os códigos que estou usando, quem conseguir ver onde esta o problema fico agradecido.

No início, eu carrego os seguintes provedores de dados:

Imports System.Data.OleDb
Imports System.Data


códigos que estou usando:

Private Sub apagarrepetidos()

Dim con = New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & My.Application.Info.DirectoryPath & [Ô]\Banco.MDB[Ô])
con.Open()

Dim sql As String = [Ô] select dz1,dz2,dz3 FROM dados[Ô]
Dim CD As New OleDbCommand()
CD.Connection = con
CD.CommandText = sql
Dim DR As OleDbDataReader = CD.ExecuteReader

DR.Read()

Dim VAR1 As String = CStr(DR([Ô]dz1[Ô]))
Dim VAR2 As String = CStr(DR([Ô]dz2[Ô]))
Dim VAR3 As String = CStr(DR([Ô]dz3[Ô]))


Dim deletar As String
deletar = [Ô]DELETE * FROM dados WHERE dz1=[ô]&VAR1&[ô]and dz2=[ô]&VAR2[ô] and dz3=[ô]&VAR3[ô][Ô]
Dim DEL As New OleDbCommand(deletar, con)

DEL.CommandText = deletar

DEL.ExecuteNonQuery()


End Sub
NICKOSOFT 03/02/2015 08:06:30
#444227
na declaração da variável mostre o tipo
dim con as new oledbconnection.....

o delete from dados, não precisa dizer delete *
e não vejo necessidade dessa linha del.commandtext=deletar, vc já definiu o comando e a conexão na linha anterior, basta o executenonquery na próxima linha

mas além disso acho q vc esta tendo mais problemas, qnd vc faz o primeiro select, vc pega os valores das colunas dz1,2 e 3, mas não há parâmetros, então na verdade vc pega a tabela toda, qnd segue jogando na variável, imagino eu q vai jogar apenas a primeira linha da tabela, de qq forma se for a primeira ou não, sera apenas uma linha da tabela....qnd entrar no delete vai apagar apenas 1 linha....

use breakpoints para ajudar a entender o q esta acontecendo ou msg mesmo, após a declaração das vars e seu carregamento, use um msgbox pra mostrar o valor das variáveis, pra vc saber o q tem ali, pode ser q nessa seleção da tabela completa, e a falta do índice de linha a ser carregado na variável, elas nem tenham valor....

veja isso
  
Dim cnn As New SqlConnection(provider caminho do bd)
Dim cmd As New SqlCommand([Ô]select * from dados[Ô], cnn)
Dim dr As SqlDataReader
cnn.Open()
dr = cmd.ExecuteReader()

If dr.Read Then
TextBox1.Text = dr.Item(0)
TextBox2.Text = dr.Item(1)
End If

dr.Close()
cnn.Close()

trabalhe essa parte, deixe o select redondinho primeiro.....vamos ter certeza q ele esta ok, como não uso, não sei o comportamento ao ler a tabela como um todo, mas creio q trabalhe com linhas, vou procurar ver....qq coisa mudamos esse datareader para outro....se comparar com meu código, muda a declaração, a função de armazenar o resultado do select é o mesmo, ai o pessoal mais profi tem suas questões a levantar sobre velocidade, uso de memoria e afins em cada uso
NICKOSOFT 03/02/2015 08:12:06
#444228
opa, experimenta isso pra ver, so acerta de acordo com seu banco de dados.....acabei de fazer pra ver se funcionava

  
Dim con = New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\cep2014.MDB[Ô])
con.Open()

Dim sql As String = [Ô]select ufe_sg,ufe_no FROM log_faixa_uf[Ô]
Dim CD As New OleDbCommand()
CD.Connection = con
CD.CommandText = sql
Dim DR As OleDbDataReader = CD.ExecuteReader

Do While DR.Read
MessageBox.Show(DR.Item(0))
Loop

DR.Close()
con.Close()
OMAR2011 03/02/2015 09:40:55
#444236
Onde tem,
sql.movefirst() [txt-color=#e80000] Apaga[/txt-color]

If sql > 0 Then Troca por [txt-color=#e80000] If DR.Read= True Then[/txt-color]

deletar = [Ô]DELETE * FROM dados WHERE dz1= [ô] [Ô] & VAR4 & [Ô] [ô] and dz2 = [ô] [Ô] & VAR5 & [Ô] [ô] and dz3= [ô] [Ô] & VAR6 & [Ô] [ô][Ô] Troca por

[txt-color=#e80000] deletar = [Ô]DELETE * FROM dados WHERE dz1= [Ô] & VAR4 &[Ô] and dz2 = [Ô] & VAR5 & [Ô] and dz3= [Ô] & VAR6 & [Ô] [Ô][/txt-color]

NICKOSOFT 03/02/2015 19:47:45
#444269
Resposta escolhida
Calma omar, vamos por partes mostrar e fazer entender o loop com o q for pego no select, fazer o loop funcionar, depois fica mais suave entender onde por o delete dentro do loop, entender q cada novo dado mostrado acontece uma nova execucao de tudo q esta a dentro, parece q o colega mario ta iniciando, acho q esse ultimo codigo q postei c o select e while ele ja vai absorver bem a ideia, e entender o q foi pego na tabela e como e por qnt tempo se mantem no loop
MARIOBOARI 03/02/2015 23:14:04
#444274
Prezado Omar2011, Obrigado pelas dicas, testei todas as modificações sugeridas e apareceu o erro em anexo.

Vou continuar fazendo os teste.

Obrigado.
MARIOBOARI 03/02/2015 23:33:01
#444275
NICKOSOFT, Obrigado pela ajuda e dicas.

Fiz conforme você orientou, fiz uma pequena modificação, conforme segue:

Do While DR.Read
MessageBox.Show(DR.Item(0))
MessageBox.Show(DR.Item(1))
MessageBox.Show(DR.Item(2))
Loop

Funcionou perfeitamente, consegui ver que as informações estão certinho as da primeira linha da tabela.

O primeiro Loop que eu tinha postado, já fiz o teste por partes, na parte das variáveis e inserir em outra tabela, funciona bem, o erro está acontecendo na parte que deveria deletar na tabela dados os valores igual das variáveis.

Obrigado!
FILMAN 04/02/2015 00:01:35
#444276
Tente isso, não realizei testes mas acho que é o que precisa

Try
Dim sql As String = [Ô][Ô]

sql &= [Ô]INSERT INTO COL11 (DZ1,DZ2,DZ3)[Ô]
sql &= [Ô] SELECT A.DZ1, A.DZ2, A.DZ3[Ô]
sql &= [Ô] FROM DADOS A[Ô]
sql &= [Ô] LEFT JOIN COL11 B ON (B.DZ1 = A.DZ1 AND B.DZ2 = A.DZ2 AND B.DZ3 = A.DZ3)[Ô]
sql &= [Ô] WHERE B.DZ1 IS NULL[Ô]

Dim con = New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & My.Application.Info.DirectoryPath & [Ô]\Banco.MDB[Ô])
con.Open()

Dim objCommand As New OleDbCommand(sql, con)
Dim LinhasAfetadas As Long = objCommand.ExecuteNonQuery()

If LinhasAfetadas > 0 Then
sql = [Ô][Ô]
sql &= [Ô]SELECT A.DZ1, A.DZ2, A.DZ3[Ô]
sql &= [Ô] FROM DADOS A[Ô]
sql &= [Ô] LEFT JOIN COL11 B ON (B.DZ1 = A.DZ1 AND B.DZ2 = A.DZ2 AND B.DZ3 = A.DZ3)[Ô]
sql &= [Ô] WHERE NOT B.DZ1 IS NULL[Ô]

Dim objCommand1 As New OleDbCommand(sql, con)
OleDbDataReader oDataReader = objCommand1.ExecuteReader(CommandBehavior.CloseConnection);
Dim dt As New DataTable

dt.Load(oDataReader)

If dt IsNot Nothing and dt.Rows.Count > 0 Then
For i As Integer = 0 To dt.Rows.Count - 1
sql = String.Format([Ô]DELETE FROM DADOS WHERE DZ1=[ô]{0}[ô] AND DZ2=[ô]{1}[ô] AND DZ3=[ô]{2}[ô][Ô], dt.Rows(i)(0), dt.Rows(i)(1), dt.Rows(i)(2))

Dim obj As New OleDbCommand(sql, con)
LinhasAfetadas = obj.ExecuteNonQuery()
Next i
End If

MessageBox.Show([Ô]Importação Concluída[Ô])
Else
MessageBox.Show([Ô]Nenhum item importado[Ô])
End If

Catch ex As Exception
MessageBox.Show([Ô]Erro:[Ô] & Environment.NewLine() & ex.Message(), [Ô]Erro[Ô])
Finally
con.Close()
End Try
NICKOSOFT 04/02/2015 05:10:51
#444277
ok se o loop vc entendeu já é o começo...
mas pra excluir ta faltando coisas ai, e sobrando outras.....
no mesmo banco q usei pra testar, vc so precisa alterar de acordo com o seu, não fiz a inclusão pq vc disse q ta blz entendeu e funcionando....

  
Dim con = New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\cep2014.MDB[Ô])
con.Open()

Dim sql As String = [Ô]select ufe_sg,ufe_no FROM log_faixa_uf[Ô]
Dim CD As New OleDbCommand()
CD.Connection = con
CD.CommandText = sql
Dim DR As OleDbDataReader = CD.ExecuteReader

Dim sqlExcluir As String
Dim comandoExcluir As New OleDbCommand()
comandoExcluir.Connection = con
Dim Contador As Integer = 0
Do While DR.Read
[ô]MessageBox.Show(DR.Item(0))
sqlExcluir = [Ô]delete from log_faixa_uf where ufe_sg=[ô][Ô] & DR.Item(0).ToString & [Ô][ô] and ufe_no=[ô][Ô] & DR.Item(1).ToString & [Ô][ô][Ô]
comandoExcluir.CommandText = sqlExcluir
comandoExcluir.CommandType = CommandType.Text
comandoExcluir.ExecuteNonQuery()
contador += 1
Loop
DR.Close()
con.Close()

MessageBox.Show(Contador & [Ô] Registros excluidos[Ô])

onde vc andou lendo faltou detalhes de como fazer pra entender um comando passado via texto pra um Command, e no caso se quer tudo dentro do loop pra operação se repetir em todos os registros encontrados, toda essa logica tem q ta dentro do loop, inclusive a inclusão em outra tabela, senão como disse antes, vai incluir um so, apagar um so....
Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas