INSERIR DADOS NO BANCO FUNCIONAR APENAS UMA VEZ

BRUNOJUL 16/12/2012 01:25:21
#416025
Olá ,

Pode auxiliar ,


Tenho este codigo para inserir dados só que funciona apenas uma vez , depois apresenta erro não especificado na linha de abrir conxão com o banco .

Dim con
Dim rst
Const adOpenKeyset = 1
Const adLockOptimistic = 3
[ô] Cria os objetos
Set con = Server.CreateObject([Ô]ADODB.Connection[Ô])
Set rst = Server.CreateObject([Ô]ADODB.Recordset[Ô])

[ô] Abre a conexão com o banco de dados agenda.mdb
con.Open [Ô]DBQ=C:\Inetpub\wwwroot\bd\LOCADORA.mdb;DRIVER={Microsoft Access Driver (*.mdb)}[Ô]

[ô] Cria um Recordset do tipo keyset baseado na tabela clientes
[ô] usando o bloqueio otimista
rst.Open [Ô]SELECT * FROM TBL_EVENTOS[Ô], con, adOpenKeyset, adLockOptimistic

[ô] Cria um registro em branco
rst.AddNew

[ô] Recebe os dados do formulário e os atribui aos campos da tabela cliente
rst([Ô]EVENTO[Ô])= Request.Form([Ô]txt_evento[Ô])
rst([Ô]DATA[Ô])= Request.Form([Ô]txt_data[Ô])
rst([Ô]ENVOLVIDO[Ô])= Request.Form([Ô]txt_envolvido[Ô])
rst([Ô]DESCRICAO[Ô])= Request.Form([Ô]txt_descricao[Ô])

[ô] Salva o registro
rst.Update

Response.Write [Ô]<B>Registro salvo com sucesso !</B>[Ô]

rst.Close
con.Close
Set con = Nothing
Set rst = Nothing

PROFESSOR 16/12/2012 03:38:48
#416031
Resposta escolhida
A pouca coisa que detectei foi você ter enviado o Response ANTES de encerrar as conexões.

Mas deve ser interessante se não utilizar o Recordset (menos peso) e substituir a ODBC pela OleDb.

Também aproveitando, substituir o Server.CreateObject por um simples CreateObject, pois á partir da versão 5 do IIS, o Server.CreateObject [Ô]amarra[Ô] um ponteiro da instância criada á sessão ativa, ao enviar uma notificação á biblioteca [Ô]Urlmon. dll[Ô].
Já o método [Ô]CreateObject[Ô] é oriundo do VBScript, ou seja, não utiliza a MTS, funcionando bem até sob firewall.
Para mais detalhes sobre esse assunto, veja com a Microsoft

Mas vamos voltar ao seu problema, que é apenas o de ter enviado a resposta antes de encerrar as conexões.

Tente assim:

[ô]...
[ô] Cria o conector
Dim con
Const adOpenKeyset = 1
Const adLockOptimistic = 3
[ô] Conexão via OleDb.
Const cs = [Ô]Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Inetpub\wwwroot\bd\LOCADORA.mdb;User ID=Admin;Password=;[Ô]
[ô] Cria a instância do conector.
Set con = CreateObject([Ô]ADODB.Connection[Ô])
[ô] Estabelece a conexão.
con.Open cs
[ô] Executa a instrução SQL.
con.Execute [Ô]INSERT INTO TBL_EVENTOS (EVENTO,DATA,ENVOLVIDO,DESCRICAO) VALUES ([ô] & Request.Form([Ô]txt_evento[Ô]) & [ô],[ô] & Request.Form([Ô]txt_data[Ô]) & [ô],[ô] & Request.Form([Ô]txt_envolvido[Ô]) & [ô],[ô] & Request.Form([Ô]txt_descricao[Ô]) & [ô])[Ô]
[ô] Encerra a conexão.
con.Close
[ô]Agora sim, envia o Response ao Request do form.
Response.Write [Ô]<B>Registro salvo com sucesso !</B>[Ô]
[ô]...


Isto deve ajudar, quem sabe até resolver.
Tópico encerrado , respostas não são mais permitidas