ASP .NET - Obtendo o último registro incluído no Access


Para obter o último registro incluído em um banco de dados Access você pode usar a função SQL - MAX .

A função MAX retorna o valor máximo de uma expressão. Sua sintaxe é :

SELECT MAX (expressão)
FROM tabelas
WHERE condição;

Vejamos um exemplo:  

Em uma tabela funcionarios você deseja saber o maior salário pago:

SELECT MAX (salario) as "Maior Salario"
FROM funcionarios;

Neste exemplo eu estou usando como alias para o resultado da função a expressão - Maior Salario.

Se você quiser saber o maior salário pago em cada departamento da tabela funcionarios pode usar a seguinte expressão SQL:

SELECT departamento, MAX (salario) as "Maior Salario"
FROM funcionarios
GROUP BY departamento;

Como listei uma coluna que não é usada na função MAX preciso usar a cláusula GROUP BY.

Neste exemplo eu vou usar a função MAX para obter sempre o último registro da tabela produtos após uma inclusão de dados feita em uma página ASP.NET.  Abaixo temos a tabela Categorias e a Tabela Produtos exibindo cada uma sua estrutura.

O campo ProductID da tabela Produtos é uma chave primária do tipo Autonumeração e por isto sofre um incremento de uma unidade sempre que for incluído um registro na tabela.

Na página ASP.NET que eu vou chamar de ultimoreg.aspx  eu vou usar dois campos do tipo TextBox para informar o Nome do Produto e a quantidade do produto e um dropdown para exibir as categorias presentes na tabela Categorias.

Note que a coluna CategoryID é chave primária na tabela Categorias e chave estrangeira na tabela Produtos. Abaixo temos o layout do formulário usado sendo exibido no Web Matrix na guia Design.

O código HTML do projeto é dado abaixo: Nele estão declarados os objetos ASP .NET que vamos usar no projeto.

O botão de comando - button1 - tem vinculado ao seu evento Click a rotina doInsert. Veja linha de código abaixo:

<asp:button id="button1" onclick="doInsert" runat="server" Text="Enviar"></asp:button>
 

<html>
<head>
<title>Obtendo o último registro incluído no Access</title>
</head>
<body>
<form runat="server">
<table style="WIDTH: 340px; HEIGHT: 144px">
<tbody>
<tr>
<td align="right">
Produto</td>
<td>
<asp:textbox id="frmitemName" runat="server" Width="208px"></asp:textbox>
</td>
</tr>
<tr>
<td align="right">
Quantidade</td>
<td>
<asp:textbox id="frmitemText" runat="server" Width="247px"></asp:textbox>
</td>
</tr>
<tr>
<td align="right">
Categoria</td>
<td>
<asp:dropdownlist id="frmCatID" runat="server" Width="147px"></asp:dropdownlist>
</td>
</tr>
<tr>
<td align="right">
<asp:button id="button1" onclick="doInsert" runat="server" Text="Enviar"></asp:button>
</td>
<td>
</td>
</tr>
</tbody>
</table>
<asp:Label id="label1" runat="server"></asp:Label>
</form>
</body>
</html>

O código do projeto e dado a seguir. Nele estou fazendo o seguinte:

Código vinculado ao evento Load da página:

Código da rotina doInsert que inclui um registro na tabela Produtos e obtêm o código do último registro incluído usando a função SQL MAX.

Dim intNewID

Sub Page_Load(Source as Object, E as EventArgs)

Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("/data/Nwind.mdb") & ";"
Dim MySQL as string = "Select CategoryID, CategoryName from Categorias Order by CategoryID"

Dim MyConn as New OleDBConnection(strConn)
Dim objDR as OleDBDataReader
Dim Cmd as New OLEDBCommand(MySQL, MyConn)

MyConn.Open()

objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)

frmCatID.DataTextField="CategoryName"
frmCatID.DataValueField="CategoryID"
frmCatID.DataSource = objDR
frmCatID.DataBind()

MyConn.Close()

End Sub

Sub doInsert(Source as Object, E as EventArgs)

Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("/data/Nwind.mdb") & ";"
Dim MySQL as string = "Insert into Produtos (ProductName, QuantityPerUnit, CategoryID) Values (@ProductName, @QuantityPerUnit, @CategoryID);"

Dim MySQL2 as string = "select MAX(ProductID) from Produtos"

Dim MyConn as New OleDbConnection(strConn)
Dim Cmd as New OleDbCommand(MySQL, MyConn)
Dim Cmd2 as New OLEDBCommand(MySQL2, MyConn)

With Cmd.Parameters
   .Add(New OleDbParameter("@ProductName", frmitemName.text))
   .Add(New OleDbParameter("@QuantityPerUnit", frmitemText.text))
   .Add(New OleDbParameter("@ProductID", frmCatID.selecteditem.value))
End With

MyConn.Open()

cmd.ExecuteNonQuery()

Label1.text = "Os dados foram incluídos com sucesso. <p>"

label1.text +="O codigo do último produto incluído é igual a = " &
cmd2.executescalar()

MyConn.Close

End Sub

Ao executar a página ultimoreg.aspx no servidor Web matrix iremos obter:

O objeto Command cmd2 (cmd2.executescalar()) executa a declaração SQL usando o método - ExecuteScalar - que retorna um valor único como resultado da função agregada SUM . (Poderíamos ter usando outras funções como : COUNT, MIN , AVG E SUM).

Até o próximo artigo ASP.NET


José Carlos Macoratti