Ir para conteúdo

POWERED BY:

Arquivado

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

pedrovisk

Como corrigir essa instrução?

Recommended Posts

Olá Galera!

 

Estou inserindo os valores de 3 campos e automaticamente quero recuperar, na tabela que recem recebeu esses valores, pegar o ID gerado utilizando o @@Identity, eu não sei como é essa instrução no Access, conforme abaixo, mas ela gera o erro em VERMELHO.

 

 

Tipo de erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][Driver ODBC para Microsoft Access] Ponto e vírgula ; faltando no final da instrução SQL.

/fortalmag_2006/Sistema/Confirmacao_Orcamento.asp, line 41

 

Logo abaixo, está o SQL que insere os dados e recupera o ID recem gerado:

 

INSERT INTO Orcamento (IDCliente,IDProduto,Quantidade) VALUES (2,4,2) SELECT @@IDENTITY AS IDOrcamento

 

Abaixo, está o código da página:

 

<%

Set objCon = Server.CreateObject("ADODB.Connection")

strCon = MM_Fortalmag_STRING

objCon.Open strCon

 

IDCliente = Session("IDCliente")

IDProduto = Request.Form("Produto")

Quantidade = Request.Form("Quantidade")

 

SQL = SQL & "INSERT INTO Orcamento (IDCliente,IDProduto,Quantidade) "

SQL = SQL & "VALUES ("& IDCliente &","& IDProduto &","& Quantidade &") "

 

SQL = SQL & "SELECT @@IDENTITY AS IDOrcamento "

 

'Response.Write(SQL)

'Response.End()

Linha 41 objCon.Execute SQL

Linha 42

Linha 43 IDOrcamento = objCon("IDOrcamento")

%>

Eu só preciso inserir os dados e recuperar o ID recem gerado para utilizar na tela de confimação.

Estou utilizando o Access 2003, mas o banco está em formato 2000.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro ali fala q esta faltando um ; entre as instruções sql, você tentou colocar isso

SQL = SQL & "VALUES ("& IDCliente &","& IDProduto &","& Quantidade &"); "
pra ficar assim

INSERT INTO Orcamento (IDCliente,IDProduto,Quantidade) VALUES (2,4,2); SELECT @@IDENTITY AS IDOrcamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado.Eu já fiz assim, mas ele pede para remover um caractere da instrução e destaca em o SELECT.Isso utilizando o Access.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum acho q o access naum dv ter o @@identity, o skema entaum é usar o max

 

SELECT MAX(campo)FROM tabelaWHERE condição;
veja, http://www.macoratti.net/d190404.htm

 

neste outro artigo fala que "com a versão 4.0 do provider JetOleDB, que estamos utilizando, é possível buscarmos o identificador do último registro inserido. Basta utilizarmos o @@IDENTITY em uma query junto com o OleDbCommand,conforme mostrado na Listagem 6, que é bem conhecido para aqueles que estão acostumados a trabalhar com o SQL Server. " (no artigo ele tá usando ado.net)

artigo completo: http://www.microsoft.com/brasil/msdn/tecno...T.mspx?mfr=true

 

 

 

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda!

 

Fiz conforme exemplo em .aspx, "funcionou", mas ele não pega o ÚLTIMO e sim o ANTERIOR ao último.

Exemplo: o último registro na tabela é 26, quando insiro, ele exibe o registro de número 26 e não o último (27). Veja abaixo como está.

 

<%

Set objCon = Server.CreateObject("ADODB.Connection")

strCon = MM_Fortalmag_STRING

objCon.Open strCon

 

IDCliente = Session("IDCliente")

IDProduto = Request.Form("Produto")

Quantidade = Request.Form("Quantidade")

 

SQL = SQL & "INSERT INTO Orcamento (IDCliente,IDProduto,Quantidade) "

SQL = SQL & "VALUES ("& IDCliente &","& IDProduto &","& Quantidade &") "

 

'Response.Write(SQL)

'Response.End()

objCon.Execute SQL

 

'Recuperando o ultimo registro

'Set objCon2 = Server.CreateObject("ADODB.Connection")

'strCon2 = MM_Fortalmag_STRING

'objCon2.Open strCon2

 

'SQL2 = SQL2 & "SELECT MAX(IDOrcamento) As NOrcamento From Orcamento "

 

'objCon2.Execute SQL2

%>

 

<%

Dim rsOrc

Dim rsOrc_cmd

Dim rsOrc_numRows

 

Set rsOrc_cmd = Server.CreateObject ("ADODB.Command")

rsOrc_cmd.ActiveConnection = MM_Fortalmag_STRING

rsOrc_cmd.CommandText = "SELECT MAX(IDOrcamento) FROM Orcamento"

rsOrc_cmd.Prepared = true

 

Set rsOrc = rsOrc_cmd.Execute

rsOrc_numRows = 0

 

NOrcamento = rsOrc("Expr1000")

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que rola colocar um Order by no final..Tipo ::'SQL2 = SQL2 & "SELECT MAX(IDOrcamento) As NOrcamento From Orcamento order by IDOrcamento DESC "

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.