BOTAO GRAVAR DADOS NO ACCESS NAO GRAVA 2 REGISTROS

GILBERTOJW 21/02/2013 11:40:06
#419470
Pessoal digito minha string no textbox7 e uso o button7 para gravar os dados. Ele grava bem a primeira string, mas ao digitar uma segunda string e clicar no button , dá msgbox ([Ô]A inclusão de assunto falhou.[Ô]).

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

NESTA PRIMEIRA PARTE EU VERIFICO SE JÁ NÃO TEM NADA IGUAL CADASTRADO

Dim connS As String
connS = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\databasegeral.mdb;Persist Security Info=false;jet oledb:database password=gibadoexpresso340[Ô]
Dim conect As New OleDb.OleDbConnection

conect.ConnectionString = connS
conect.Open()

Dim selcom As New OleDb.OleDbCommand
selcom.CommandText = [Ô]SELECT assunto FROM [assuntos] WHERE assunto = [ô][Ô] & UCase(TextBox7.Text) & [Ô][ô];[Ô]
selcom.Connection = conect

Dim dr As OleDb.OleDbDataReader
dr = selcom.ExecuteReader()

While dr.Read()
strAssunto = dr.Item(0)
End While

conect.Close()


AQUI EU GRAVO CASO REALMENTE NÃO EXISTA IGUAL


If strAssunto = UCase(TextBox7.Text) Then
GoTo 1
Else
Try
cmd = Con.CreateCommand
Con.Open()

With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO assuntos (assunto)VALUES (@assunto)[Ô]
.Parameters.Add([Ô]@assunto[Ô], OleDbType.VarChar)
.Parameters([Ô]@assunto[Ô]).Value = UCase(TextBox7.Text)
.ExecuteNonQuery()
End With
MsgBox([Ô]Incluido com sucesso na tabela assuntos.[Ô])
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO assuntosfixos (assunto)VALUES (@assunto)[Ô]
.Parameters.Add([Ô]@assunto[Ô], OleDbType.VarChar)
.Parameters([Ô]@assunto[Ô]).Value = UCase(TextBox7.Text)
.ExecuteNonQuery()
End With
MsgBox([Ô]Incluido com sucesso na tabela assuntosfixos.[Ô])
TextBox7.Text = [Ô][Ô]
GoTo 2
Con.Close()
Catch
Con.Close()
MsgBox([Ô]A inclusão de assunto falhou.[Ô])
GoTo 2
End Try
GoTo 2
End If
1:
MsgBox([Ô]Assunto já cadastrado.[Ô])
TextBox7.Focus()
GoTo 4
2:


AQUI EU RECARREGO MEU DATAGRIDVIEW JÁ COM A NOVA STRING DIGITADA

conn = New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\databasegeral.mdb;Persist Security Info=false;jet oledb:database password=gibadoexpresso340[Ô])
conn.Open()
da = New OleDbDataAdapter([Ô]select num,assunto from assuntos order by assunto[Ô], conn)
ds = New DataSet()
da.Fill(ds, [Ô]contatos[Ô])
DataGridView2.DataSource = ds.Tables([Ô]contatos[Ô])
conn.Close()
With DataGridView2
.Columns(0).Width = [Ô]40[Ô] [ô]Primeira coluna
.Columns(0).HeaderText = [Ô]ID[Ô]
.Columns(1).Width = [Ô]250[Ô] [ô]Primeira coluna
.Columns(1).HeaderText = [Ô]Assuntos[Ô]
Dim Indice As Integer = 1
For x = 0 To DataGridView2.Rows.Count - 1
If Indice = 1 Then
.Rows(x).DefaultCellStyle.BackColor = Color.Aqua
Else
If Indice = 2 Then
.Rows(x).DefaultCellStyle.BackColor = Color.White
End If
End If
Indice += 1

If Indice = 3 Then
Indice = 1
End If
Next
End With
4:

MAS AO TENTAR GRAVAR UMA SEGUNDA STRING, DÁ PAU.
FELLIPEASSIS 22/02/2013 13:39:01
#419531
Resposta escolhida


Sql = [Ô]INSERT INTO assuntos (assunto)VALUES (@assunto) [Ô]
cmd.CommandText = Sql
cmd.Parameters.AddWithValue([Ô]@assunto[Ô], txtassunto.Text.Trim())
cmd.Connection = sua conexao
Try
cmd.ExecuteNonQuery()
MessageBox.Show([Ô]gravado com sucesso![Ô], [Ô]gravar[Ô], MessageBoxButtons.OK)
End If
cmd.Parameters.Clear()
Catch
MessageBox.Show([Ô]Ocorreu um erro:[Ô] & vbNewLine & _
Err.Description.ToString, _
[Ô]Gravar Dados[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)

cmd.Parameters.Clear()
Exit Sub
End Try
cmd.Parameters.Clear()

GILBERTOJW 22/02/2013 17:02:41
#419547
Caro Felipe obrigado. Parece que resolveu meu problema apenas colocando a linha cmd.Parameters.Clear() nos tres lugares que vocÊ recomenda, mas mantive minha estrutura anterior. Caso vocÊ tenha alguma ressalva favor me ajudar.

Agradeço;
OMAR2011 23/02/2013 11:28:53
#419560
Quanto ao código ele funciona de forma normal com o teste que realizei retirando os Gotos.
Vou te mostrar pequenos erros.
Acredito eu que todo esse códgo esteja dentro do Private Sub Button7_Click.
Vamos lá.

Dim connS As String
connS = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\databasegeral.mdb;Persist Security Info=false;jet oledb:database password=gibadoexpresso340[Ô]
Dim conect As New OleDb.OleDbConnection

conect.ConnectionString = connS
conect.Open()

Dim selcom As New OleDb.OleDbCommand
selcom.CommandText = [Ô]SELECT assunto FROM [assuntos] WHERE assunto = [ô][Ô] & UCase(TextBox7.Text) & [Ô][ô];[Ô]
selcom.Connection = conect

Dim dr As OleDb.OleDbDataReader
dr = selcom.ExecuteReader()

While dr.Read()
strAssunto = dr.Item(0)
End While

conect.Close() [txt-color=#e80000] [ô]Você fechou[/txt-color]

AQUI EU GRAVO CASO REALMENTE NÃO EXISTA IGUAL


If strAssunto = UCase(TextBox7.Text) Then
GoTo 1
Else
Try
[ô] cmd = Con.CreateCommand
[ô] Con.Open() [ô][txt-color=#e80000] Errado[/txt-color]

cmd = Conect.CreateCommand
Conect.Open()



With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO assuntos (assunto)VALUES (@assunto)[Ô]
.Parameters.Add([Ô]@assunto[Ô], OleDbType.VarChar)
.Parameters([Ô]@assunto[Ô]).Value = UCase(TextBox7.Text)
.ExecuteNonQuery()
End With
MsgBox([Ô]Incluido com sucesso na tabela assuntos.[Ô])
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO assuntosfixos (assunto)VALUES (@assunto)[Ô]
.Parameters.Add([Ô]@assunto[Ô], OleDbType.VarChar)
.Parameters([Ô]@assunto[Ô]).Value = UCase(TextBox7.Text)
.ExecuteNonQuery()
End With
MsgBox([Ô]Incluido com sucesso na tabela assuntosfixos.[Ô])
TextBox7.Text = [Ô][Ô]
GoTo 2
Con.Close()
Catch
Con.Close()
MsgBox([Ô]A inclusão de assunto falhou.[Ô])
GoTo 2
End Try
GoTo 2
End If
1:
MsgBox([Ô]Assunto já cadastrado.[Ô]) [ô][txt-color=#e80000] Não tem utilidade nenhuma,este código tem que ficar mais acima onde faz a comparação . If strAssunto = UCase(TextBox7.Text) Then[/txt-color]
TextBox7.Focus()
GoTo 4
2:


AQUI EU RECARREGO MEU DATAGRIDVIEW JÁ COM A NOVA STRING DIGITADA

conn = New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\databasegeral.mdb;Persist Security Info=false;jet oledb:database password=gibadoexpresso340[Ô])
conn.Open()
da = New OleDbDataAdapter([Ô]select num,assunto from assuntos order by assunto[Ô], conn)
ds = New DataSet()
da.Fill(ds, [Ô][txt-color=#e80000]contatos[/txt-color][Ô]) [ô] [txt-color=#007100]Tem que ser Assuntos[/txt-color]
DataGridView2.DataSource = ds.Tables([Ô][txt-color=#e80000]contatos[/txt-color][Ô]) [ô] [txt-color=#007100]Idem[/txt-color]
conn.Close()
With DataGridView2
.Columns(0).Width = [Ô]40[Ô] [ô]Primeira coluna
.Columns(0).HeaderText = [Ô]ID[Ô]
.Columns(1).Width = [Ô]250[Ô] [ô]Primeira coluna
.Columns(1).HeaderText = [Ô]Assuntos[Ô]
Dim Indice As Integer = 1
For x = 0 To DataGridView2.Rows.Count - 1
If Indice = 1 Then
.Rows(x).DefaultCellStyle.BackColor = Color.Aqua
Else
If Indice = 2 Then
.Rows(x).DefaultCellStyle.BackColor = Color.White
End If
End If
Indice += 1

If Indice = 3 Then
Indice = 1
End If
Next
End With
4:


GILBERTOJW 25/02/2013 16:21:21
#419624
Pessoal obrigado. Omar foram importantes suas observações.

Agradeço;
Tópico encerrado , respostas não são mais permitidas