CADASTRAR DADOS EM UMA TABELA
Olá,
Estou desenvolvendo uma aplicação de nota fiscal, mas estou com um problema que talvez seja facil, pra mim não estar sendo nem um pouco, tirou o meu feriado de fim de ano, se alguem me ajudar ficarei agradecido. é o seguinte, fiz todo o acesso ao banco de dados por meio da biblioteca ADO, até ai tranquilo, só que não consigo adcionar o conteudo de um objeto Text do meu form em um campo da minha tabela, abaixo segue a minha conexão:
Private Sub Form_Load()
Dim strSql As String
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
strArquivo = "banco.mdb"
strLocal = App.Path
Set Cn = CreateObject("ADODB.Connection")
cadastro = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=" & strArquivo & ";" & _
"DefaultDir=" & strLocal & ";" & _
"Uid=Admin;Pwd=;"
Cn.Open cadastro
strSql = "select * from nota"
Rs.Open strSql, Cn
End Sub
Aqui listo o botão onde tenho que fazer o cadastro dos dados:
Private Sub Cadastro_Click()
If Rs.EOF = False Then
Rs.Fields("nome-razao") = nomeRaz.Text
Rs.AddNew
End If
End Sub
Porém quando clico no botão nada acontece.
Se alguem me mostrar onde estou pecando.
mais uma vez Agradeço
Antonio Sales
Estou desenvolvendo uma aplicação de nota fiscal, mas estou com um problema que talvez seja facil, pra mim não estar sendo nem um pouco, tirou o meu feriado de fim de ano, se alguem me ajudar ficarei agradecido. é o seguinte, fiz todo o acesso ao banco de dados por meio da biblioteca ADO, até ai tranquilo, só que não consigo adcionar o conteudo de um objeto Text do meu form em um campo da minha tabela, abaixo segue a minha conexão:
Private Sub Form_Load()
Dim strSql As String
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
strArquivo = "banco.mdb"
strLocal = App.Path
Set Cn = CreateObject("ADODB.Connection")
cadastro = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=" & strArquivo & ";" & _
"DefaultDir=" & strLocal & ";" & _
"Uid=Admin;Pwd=;"
Cn.Open cadastro
strSql = "select * from nota"
Rs.Open strSql, Cn
End Sub
Aqui listo o botão onde tenho que fazer o cadastro dos dados:
Private Sub Cadastro_Click()
If Rs.EOF = False Then
Rs.Fields("nome-razao") = nomeRaz.Text
Rs.AddNew
End If
End Sub
Porém quando clico no botão nada acontece.
Se alguem me mostrar onde estou pecando.
mais uma vez Agradeço
Antonio Sales
Veja, você está adicionando um registro novo (em branco) ao clicar no botão Cadastro. Mas o está fazendo após dizer que o campo "nome-razao" terá o mesmo conteúdo que em nomeRaz.Text. Dessa forma, o conteúdo se perde. Não é que nada aconteça, está acontecendo o que você pediu.
Não sou o mais indicado para aconselhar em se tratando do seu método de desenvolvimento, pois não gosto de vincular dados aos controles, o que parece ser o caso. Mas vou tentar ajudar.
Primeiramente, eu faria algo assim: A conexão, eu deixaria como um objeto público, em um módulo BAS. Dessa forma, de todas as partes da aplicação eu poderia utilizar a mesma conexão. Já no formulário especÃfico, eu manteria o Recordset, mas utilizaria o método Execute do Connection para as transações com alteração, inclusão e exclusão de dados. Não usaria também um CreateObject, pois esta instrução pós-define o objeto, o que causa mais demora. E as variáveis locais, as manteria locais. Como a conexão já está ativa, no Formulário, então, as preocupações se restringem apenas ao próprio formulário e aos dados.
Option Explicit
Private RS As ADODB.Recordset
Private Sub Form_Load()
Set RS = New ADODB.REcordset
Rs.Source = "SELECT * FROM NOTA"
Rs.Open
...
'Aqui você escreve o código ou chama a função/procedimento
'que preenche a tela com os dados da tabela.
End Sub
Private Sub Cadastro_Click()
'Valide e consista os dados antes de realizar a gravação dos mesmos, como:
If nomeRaz.Text = Empty Then
MsgBox "Dados Inválidos, por favor complete as informações.", vbOkOnly + vbInformation, "Cadastro"
nomeRaz.SetFocus
Exit Sub
End If
'Feita a validação e a consistência, partimos para a ação.
CN.EXECUTE "INSERT INTO NOTA (EMPRESA) VALUES ('" & nomeRaz.Text & "')"
End Sub
Mais ou menos, em linhas grossas e toscas, seria essa a codificação. Claro, existem vários outros fatores á serem considerados, tais como validar se o registro que se está tentando inserir já não existe, os codigos para edição e exclusão, os demais campos, as consistências de erro (ou tratamento de erros) etc.
Não sou o mais indicado para aconselhar em se tratando do seu método de desenvolvimento, pois não gosto de vincular dados aos controles, o que parece ser o caso. Mas vou tentar ajudar.
Primeiramente, eu faria algo assim: A conexão, eu deixaria como um objeto público, em um módulo BAS. Dessa forma, de todas as partes da aplicação eu poderia utilizar a mesma conexão. Já no formulário especÃfico, eu manteria o Recordset, mas utilizaria o método Execute do Connection para as transações com alteração, inclusão e exclusão de dados. Não usaria também um CreateObject, pois esta instrução pós-define o objeto, o que causa mais demora. E as variáveis locais, as manteria locais. Como a conexão já está ativa, no Formulário, então, as preocupações se restringem apenas ao próprio formulário e aos dados.
Option Explicit
Private RS As ADODB.Recordset
Private Sub Form_Load()
Set RS = New ADODB.REcordset
Rs.Source = "SELECT * FROM NOTA"
Rs.Open
...
'Aqui você escreve o código ou chama a função/procedimento
'que preenche a tela com os dados da tabela.
End Sub
Private Sub Cadastro_Click()
'Valide e consista os dados antes de realizar a gravação dos mesmos, como:
If nomeRaz.Text = Empty Then
MsgBox "Dados Inválidos, por favor complete as informações.", vbOkOnly + vbInformation, "Cadastro"
nomeRaz.SetFocus
Exit Sub
End If
'Feita a validação e a consistência, partimos para a ação.
CN.EXECUTE "INSERT INTO NOTA (EMPRESA) VALUES ('" & nomeRaz.Text & "')"
End Sub
Mais ou menos, em linhas grossas e toscas, seria essa a codificação. Claro, existem vários outros fatores á serem considerados, tais como validar se o registro que se está tentando inserir já não existe, os codigos para edição e exclusão, os demais campos, as consistências de erro (ou tratamento de erros) etc.
Vc colocou assim:
Private Sub Cadastro_Click()
If Rs.EOF = False Then
Rs.Fields("nome-razao") = nomeRaz.Text
Rs.AddNew
End If
End Sub
Tente assim:
Private Sub Cadastro_Click()
If Rs.EOF = False Then
Rs.AddNew
Rs.Fields("nome-razao") = nomeRaz.Text
Rs.Update
End If
End Sub
Adionar um novo registro, depois colocar o conteúdo no campo e depois atualizar.
Eu faço assim e funciona.
Espero ter ajudado.
Falow,
RGAFFO
Private Sub Cadastro_Click()
If Rs.EOF = False Then
Rs.Fields("nome-razao") = nomeRaz.Text
Rs.AddNew
End If
End Sub
Tente assim:
Private Sub Cadastro_Click()
If Rs.EOF = False Then
Rs.AddNew
Rs.Fields("nome-razao") = nomeRaz.Text
Rs.Update
End If
End Sub
Adionar um novo registro, depois colocar o conteúdo no campo e depois atualizar.
Eu faço assim e funciona.
Espero ter ajudado.
Falow,
RGAFFO
valeu, agora ficou mais claro!!!
Tópico encerrado , respostas não são mais permitidas