CADASTRAR DADOS EM UMA TABELA

USUARIO.EXCLUIDOS 03/01/2005 02:00:43
#58234
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
USUARIO.EXCLUIDOS 03/01/2005 02:41:19
#58236
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.
USUARIO.EXCLUIDOS 03/01/2005 02:52:31
#58237
Resposta escolhida
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
USUARIO.EXCLUIDOS 03/01/2005 23:24:15
#58396
valeu, agora ficou mais claro!!!
Tópico encerrado , respostas não são mais permitidas