ERRO ESTRANHO

MAXGUIMEL 26/04/2013 19:31:52
#422590
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()




SAMUKA 27/04/2013 08:57:02
#422597
MAXGUIMEL, não há nada de errado nessas 2 rotinas que você colocou.

O erro vem de outro lugar.
MAXGUIMEL 29/04/2013 12:27:48
#422674
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.
SAMUKA 29/04/2013 14:40:39
#422687
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.
MAXGUIMEL 30/04/2013 12:00:34
#422720
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...
SAMUKA 06/05/2013 12:21:31
#423000
MAXGUIMEL, e ai blz? Conseguiu descobrir o erro?
MAXGUIMEL 06/05/2013 12:45:33
#423002
SAMUKA, ainda não cara, ta difícil, cliente reclamando, ta osso!
FELLIPEASSIS 06/05/2013 14:02:40
#423005
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
PROFESSOR 06/05/2013 14:42:30
#423007
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):

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.
MAXGUIMEL 07/05/2013 11:56:24
#423044
Opa, bons exemplos... SAMUKA e PROFESSOR, vou testa-los, e posto aqui, por enquanto obrigado.
Página 3 de 4 [34 registro(s)]
Tópico encerrado , respostas não são mais permitidas