Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Drika

[Resolvido] Insert usando Oracle

Recommended Posts

Boa tarde. Estou utilizando o Oracle a pouco tempo, e não estou conseguindo dar um insert na tabela. Segue meu código

 

ssql = " insert into pedtemp "

ssql = ssql &" (cnpj_cli, reg, cnpj_dest, cod_produto, quant, usuario, data_limite, hora_limite, obs, campanha, divisao) "

ssql = ssql &" values "

ssql = ssql &" ("&cnpj_cli&",SQ_PEDIDOTEMP.NEXTVAL,"&Request.Form("cod_destinatario")&",'"&Request.Form("hid_produto")&"',"&Request.Form("nr_qtde")&",'"&usuario&"',TO_DATE('"&dt_limite&"','DD/MM/YYYY'),TO_DATE('"&hr_limite&"','HH24:MI:SS'),'"&ds_obs&"','"&ds_campanha &"','" & Session("divisao") & "')"

Set RsAddPedido =OraDatabase.DbCreateDynaset(ssql, cint(0))

 

E sempre aparece a mensagem :

OIP-04116: Cursor not ready for I-O

 

/Users/pedido.asp, line 54

 

A linha 54 é Set RsAddPedido =OraDatabase.DbCreateDynaset(ssql, cint(0))

 

O que preciso fazer ?

 

Obrigada pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dê um response.wite na sua string SQL para ver o k esta sendo passado

response.write(SQL)
response.end()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda.

 

Os parametros estão OK, se faço uma consulta não dá erro, mas quando quero inserir apresenta o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

as permissoes estao todas corretas...

verfique se a opcao de exibir mensagens de erro HTTP amigaveis esta habilitado no browser, se tiver desabilite, pra ver se exibe algum erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

A mensagem que aparece é sempre esta:

 

OIP-04116: Cursor not ready for I-O

 

Parece que preciso informar mais alguma coisa ao comando, mas não sei o que.

 

Será que existem algum exemplo com inserção que eu possa verificar ?

 

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste a string de conexao.

 

será que é algo com oTO_DATE? eu sempre faço TO_CHAR antes passando o formato da string pra depois pegar a data, mas pelo erro me parece algo com o driver. tem algum campo tipo clob?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o código

Dim OraSession
  Dim OraDatabase

  Set OraSession = Server.CreateObject("OracleInProcServer.XOraSession")
  Set OraDatabase = OraSession.DbOpenDatabase("INTECDSV", "wms/wms",cint(0))
    
  if acao = "X" then ' Se acao = X remove os produtos
    ssql = " delete from pedtemp where reg = "&Request("hid_remove_produto")&" "	
	Set RsApagaProduto =OraDatabase.DbCreateDynaset(ssql, cint(0))
	RsApagaProduto.delete
	RsApagaProduto.update
  end if  
   
  
  if acao = "I" then

    if isdate(dt_limite) = false then
		Response.Write "<script>{alert('Verifique se os dados estão corretos!');location='pedido.asp';}</script>"
		Response.End 
	end if 
	
    sql = "select suchbegriff as cnpj from klienten where id_klient ='" & Session("cliente") & "'"
    Set RsCliente =OraDatabase.DbCreateDynaset(sql, cint(0))	
	cnpj_cli = Rscliente("cnpj")
	RsCliente.close

	
	ssql = " insert into pedtemp "
	ssql = ssql &" (cnpj_cli, reg, cnpj_dest, cod_produto, quant, usuario, data_limite, hora_limite, obs, campanha, divisao) "
	ssql = ssql &" values "
	ssql = ssql &" ("&cnpj_cli&",SQ_PEDIDOTEMP.NEXTVAL,"&Request.Form("cod_destinatario")&",'"&Request.Form("hid_produto")&"',"&Request.Form("nr_qtde")&",'"&usuario&"',TO_DATE('"&dt_limite&"','DD/MM/YYYY'),TO_DATE('"&hr_limite&"','HH24:MI:SS'),'"&ds_obs&"','"&ds_campanha &"','" & Session("divisao") & "')"

	Set RsAddPedido =OraDatabase.DbCreateDynaset(ssql, cint(0))	

    Response.Write "<B>Registro salvo com sucesso !</B>"

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu utilizo assim o driver direto:

set con = server.createobject("adodb.connection")
con.open "Provider=OraOLEDB.Oracle.1;Password=senha_ts_name;Persist Security Info=True;User ID=user_ts_name;Data Source=alias_ts_name"
con.execute("insert into (coluna, coluna2) values (1,2) ")

mas acredito que seu problema esteja nos dados do insert, não há incompatibilidade nos tipos de dados? se puder, poste o tipo de dados de cada coluna e a string do insert

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu utilizo assim o driver direto:

set con = server.createobject("adodb.connection")
con.open "Provider=OraOLEDB.Oracle.1;Password=senha_ts_name;Persist Security Info=True;User ID=user_ts_name;Data Source=alias_ts_name"
con.execute("insert into (coluna, coluna2) values (1,2) ")

mas acredito que seu problema esteja nos dados do insert, não há incompatibilidade nos tipos de dados? se puder, poste o tipo de dados de cada coluna e a string do insert

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue :

 

CNPJ-CLI Varchar2(14)

COD_ARM Varchar2(2)

REG Number

CNPJ-DEST Varchar2(14)

COD_PRODUTO Varchar2(15)

UNID_ESTOQUE Varchar2(6)

QUANT Number

TIPO

USUARIO Varchar2(14)

DATA_LIMITE Varchar2(2)

HORA_LIMITE

DIVISAO

OBS

CAMPANHA

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, dei um tab e nem percebi.

Segue :

 

CNPJ-CLI Varchar2(14)

COD_ARM Varchar2(2)

REG Number

CNPJ-DEST Varchar2(14)

COD_PRODUTO Varchar2(15)

UNID_ESTOQUE Varchar2(6)

QUANT Number

TIPO Char(3)

USUARIO Varchar2(30)

DATA_LIMITE Date

HORA_LIMITE TimeStamp(6) with local time zone

DIVISAO Varchar2(30)

OBS Varchar2(1000)

CAMPANHA Varchar2(100)

 

Segue a string :

 

ssql = " insert into pedtemp "

ssql = ssql &" (cnpj_cli, reg, cnpj_dest, cod_produto, quant, usuario, data_limite, hora_limite, obs, campanha, divisao) "

ssql = ssql &" values "

ssql = ssql &" ("&cnpj_cli&",SQ_PEDIDOTEMP.NEXTVAL,"&Request.Form("cod_destinatario")&",'"&Request.Form("hid_produto")&"',"&Request.Form("nr_qtde")&",'"&usuario&"',TO_DATE('"&dt_limite&"','DD/MM/YYYY'),TO_DATE('"&hr_limite&"','HH24:MI:SS'),'"&ds_obs&"','"&ds_campanha &"','" & Session("divisao") & "')"

 

Se eu pegar o resultado atraves do response.write e colocar no PL/SQL, funciona.

 

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho funcionar direto. percebi que o vlaor Request.Form("cod_destinatario") você pasa como numerico mas a coluna CNPJ-DEST é varchar2, deveria ter apostrofes pra nao dar erro. veja se é isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então na duvida fiz assim, colocando só 1 campo, mas dá o mesmo erro. você tem algum exemplo para me mostrar ?

 

ssql = " insert into pedtemp "

ssql = ssql &" (cnpj_cli) "

ssql = ssql &" values "

ssql = ssql &" ('123456') "

 

Retorna este erro

Oracle Automation error '800a01b8'

 

OIP-04116: Cursor not ready for I-O

 

Nesta linha

Set RsAddPedido =OraDatabase.DbCreateDynaset(ssql, cint(0))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora eu fiz, e funcionou.

 

Não entendi o porque, mas o importante que funcionou.

 

Para todo insert,update e delete tenho que criar este abaixo ?

 

set con = server.createobject("adodb.connection")

con.open "Provider=OraOLEDB.Oracle.1;Password=pass;Persist Security Info=True;User ID=id;Data Source=dts"

 

Muito obrigada, pela atenção e ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que o problema está no driver.

 

você não precisa fazer a conexao em todas as páginas desta forma, pode colocar no global.asa um application ou entao criar uma function que vai abrir a conexao e adicionar em um arquivo de include. assim você facilita na manutenção

 

se você está no inicio do projeto, aconselho usar para trodas as trasações desta forma para que fique padrão

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser o driver dele, você tb pode tentar

quando o servidor de automação usando para inserir um registro esta usando o createdynaset ,

conn.createdynaset (sql, 0)

você pode tentar assim

conn ExecuteSQL sql

 

com o ADO, você não precisa criar um dynaset a fazer um INSERT. Basta executar a instrução SQL diretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.