ERRO ESTRANHO
SAMUKA, desculpe por ter postado errado a rotina é que aqui ta uma loucura e to quase sem tempo, fazer as coisas na correria é isso que dá, né?? kkkk , mas ai segue a rotina de alteraçao.
Citação:
CloseBanco()
OpenBanco()
[ô]cria um objeto command e altera registro no banco
Dim sql As String = [Ô]Update Cidade Set Cidade = [ô][Ô] & NomeCid & [Ô][ô],[Ô] & _
[Ô]Uf = [ô][Ô] & Estado & [Ô][ô][Ô] & _
[Ô] Where Codigo = [Ô] & CodCid
OleCidades = New MySqlCommand(sql, AbreBanco)
[ô]define um data adapter
AdapterCidades = New MySqlDataAdapter()
AdapterCidades.SelectCommand = OleCidades
TbCidades = New DataTable()
AdapterCidades.Fill(TbCidades)
gravou = 1
Limpa_Cidade()
CloseBanco()
MAXGUIMEL, não há nada de errado nessas 2 rotinas que você colocou.
O erro vem de outro lugar.
O erro vem de outro lugar.
Eu sei SAMUKA que não ha nada de errado com as rotinas, ja foram testadas muitas e muitas vezes. O erro não vem das rotinas, o que me interessou foi o metodo FIND que vc colocou aqui. Posta um exemplo ai pra gente.
Boa tarde MAXGUIMEL
Qdo eu sugeri o método FIND não me atentei para o fato que você estava desenvolvendo VB.NET
Eu utilizo o FIND no VB6 com ADO 2.8 pq posso deixar a conexão aberta. E pra evitar qualquer erro, antes de salvar uma informação, eu dou um recordset.FIND [Ô]ID = [Ô] & txtNumeroID pra garantir que estou alterando a linha correta.
No ADO.NET você não deve deixar a conexão aberta. E com isso acho que nem existe o médoto FIND da forma como uso no ADO 2.8.
Qdo eu sugeri o método FIND não me atentei para o fato que você estava desenvolvendo VB.NET
Eu utilizo o FIND no VB6 com ADO 2.8 pq posso deixar a conexão aberta. E pra evitar qualquer erro, antes de salvar uma informação, eu dou um recordset.FIND [Ô]ID = [Ô] & txtNumeroID pra garantir que estou alterando a linha correta.
No ADO.NET você não deve deixar a conexão aberta. E com isso acho que nem existe o médoto FIND da forma como uso no ADO 2.8.
E o errocontinua gente, fiz o mais cruel, deletei tudo e criei todos os controle e todas as rotinas de novo e o bendito ainda da o mesmo erro,apagado banco quando se tem que alterar. voltando a frisar que não existe nada de errado com as rotinas. o que será.... mistérios...
MAXGUIMEL, e ai blz? Conseguiu descobrir o erro?
SAMUKA, ainda não cara, ta difÃcil, cliente reclamando, ta osso!
use parametros e não do jeito que vc fez assim fica mais limpo o codigo assim.
sql = [Ô]update cidade set cidade=@cidade,uf=@uf where codigo=@codigo[Ô]
cmd.Parameters.AddWithValue([Ô]@cidade[Ô], cidade)
cmd.Parameters.AddWithValue([Ô]@uf[Ô], estado)
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], codigo)
[ô][ô]esse olecidades seria melhor colocar cmd que representa command
sql = [Ô]update cidade set cidade=@cidade,uf=@uf where codigo=@codigo[Ô]
cmd.Parameters.AddWithValue([Ô]@cidade[Ô], cidade)
cmd.Parameters.AddWithValue([Ô]@uf[Ô], estado)
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], codigo)
[ô][ô]esse olecidades seria melhor colocar cmd que representa command
Tente usando um código mais direto.
Por exemplo, eu suponho que há uma ConnectionString utilizada pelo aplicativo (óbvio), então, antes de mais nada, o que eu faria, seria manter uma classe com os métodos CRUD, mais ou menos assim (vou simplificar bem, sem tratar instância, sem parametrização, sem DDLs, apenas dois métodos simples, só para exemplificar):
Bom, agora que eu tenho essa classe, em um módulo do aplicativo crio uma variável pública para manter a instância utilizada:
Na inicialização do aplicativo (Sub Main ou no form de inicialização), finalmente, gero a instância:
Posso ainda testar a conectividade, em qualquer momento, avaliando a propriedade CanConnect. Assim, o código acima poderia ficar um pouco diferente, algo como:
à partir desse momento, todas as operações CRUD que eu quiser realizar, chamo os métodos do objeto oDb instanciado, por exemplo:
Espero que isso ajude.
Por exemplo, eu suponho que há uma ConnectionString utilizada pelo aplicativo (óbvio), então, antes de mais nada, o que eu faria, seria manter uma classe com os métodos CRUD, mais ou menos assim (vou simplificar bem, sem tratar instância, sem parametrização, sem DDLs, apenas dois métodos simples, só para exemplificar):
Public Class oDb
[ô] Mantém o comando de conexão á base de dados.
Private mCS As String = [Ô][Ô]
[ô] Mantém a última mensagem de erro.
Private mErr As String = [Ô][Ô]
[ô] Cria uma instância da classe
Public Sub New(ByVal connectionString As String)
Me.mCS = connectionString
End Sub
[ô] Retorna um booleano indicando se a instância da classe consegue se conectar ao banco.
Public ReadOnly Property CanConnect As Boolean
Get
Dim ret As Boolean = False
Dim cn As MySqlConnection = Nothing
Try
cn = New MySqlConnection(Me.mCS)
cn.Open
ret = True
Catch ex As Exception
ret = False
Finally
If cn IsNot Nothing Then
If cn.State <> ConnectionState.Closed Then cn.Close
cn.Dispose
End If
End Try
Return ret
End Get
End Property
[ô] Retorna a última mensagem de erro, se houver alguma.
Public ReadOnly Property [LastError] As String
Get
Return Me.mErr
End Get
End Property
[ô] Executa uma instrução DML simples (sem parâmetros) e retorna o sucesso da operação.
Public Function [Execute](ByVal parCode As String) As Boolean
Dim ret As Boolean = False
Try
Using cn As New MySqlConnection(Me.mCS)
Using cm As MySqlCommand = cn.CreateCommand
cm.CommandText = parCode
ret = (cm.ExecuteNonQuery() > 0)
End Using
End Using
Catch ex As Exception
Me.mErr = ex.Message
ret = False
End Try
Return Ret
End Function
[ô] Retorna um DataTable baseado numa consulta SQL
Public Function [Query](ByVal parCode As String) As DataTable
Dim ret As New DataTable([Ô]Query[Ô])
Try
Using da As New MySqlDataAdapter(parCode, Me.mCS)
da.Fill(ret)
End Using
Catch ex As Exception
Me.mErr = ex.Message
ret = New DataTable([Ô]Query[Ô])
End Try
Return Ret
End Function
End Class
Bom, agora que eu tenho essa classe, em um módulo do aplicativo crio uma variável pública para manter a instância utilizada:
[ô]...
Public db As oDB()
[ô]...
Na inicialização do aplicativo (Sub Main ou no form de inicialização), finalmente, gero a instância:
[ô]...
db = New oDB(minhaStringDeConexão)
[ô]...
Posso ainda testar a conectividade, em qualquer momento, avaliando a propriedade CanConnect. Assim, o código acima poderia ficar um pouco diferente, algo como:
[ô]...
db = New oDB(minhaStringDeConexão)
If (db.CanConnect = False) Then
MessageBox.Show([Ô]Não foi possÃvel conectar ao servidor de dados.[Ô])
Application.Exit
End If
[ô]...
à partir desse momento, todas as operações CRUD que eu quiser realizar, chamo os métodos do objeto oDb instanciado, por exemplo:
[ô]...
[ô]Atualizar a cidade na base de dados...
If db.Execute(String.Format([Ô]UPDATE Cidade SET Cidade=[ô]{0}[ô][ô],Uf=[ô]{1}[ô] WHERE (Codigo={2})[Ô], _
NomeCid, _
Estado, _
CodCid)) = True Then
[ô]Chamar as rotinas necessárias caso a gravação seja efetuada...
Limpa_Cidade()
[ô]Carregar os dados em uma grade, por exemplo:
Me.DataGridView1.DataSource = db.Query([Ô]SELECT CodCidade, Cidade, Uf FROM [Cidade][Ô])
Else
[ô] Mensagens por não haver gravado (estão na instância)
MessageBox.Show(db.LastError)
End If
[ô]...
Espero que isso ajude.
Opa, bons exemplos... SAMUKA e PROFESSOR, vou testa-los, e posto aqui, por enquanto obrigado.
Tópico encerrado , respostas não são mais permitidas