Jump to content
dipacheco

Não devia retornar o último dos códigos??

Recommended Posts

dipacheco

Boas pessoal... tenho uma tabela com códigos que não estao alternados... este código não me deveria retornar o ultimo dos codigos??

command = New SqlCommand("SELECT Codigo FROM Clientes ORDER BY Codigo ASC", connect)
reader = command.ExecuteReader
While reader.Read
     ultimocodigo = reader(0)
End While
reader.Close()

É que nao retorna nada, fica em branco!

Share this post


Link to post
Share on other sites
dipacheco

nao é por aí... tb fica em branco! e no entanto se fizer um select por um nome ou assim ele funciona... estranho.

Share this post


Link to post
Share on other sites
Caça

O que é que fica em branco? Não trás nenhum valor?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

ele nem entra no reader... e é com o ASC nao é com o DESC... o asc é ascendente... logo 1.2.3.4.5.... e o ultimo a ser lido é o ultimo, q é o q pretendo. mas ele n entra no ciclo while! estranho...

Share this post


Link to post
Share on other sites
dipacheco

e é estranho pq isto estava a funcionar e nada do q possa ter feito deveria alterar isto... ate porque isto é um formulario em q inicialmente ele so mostra a ultima posiçao vaga... ou seja, este evento é no form_load... n tem nada antes...

ultimocodigo está definido com integer daí nao fazer reader(0).tostring ... e codigo no sql tb é int!

Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.CenterToScreen()
        connect = New SqlConnection("Data Source=PACHECO-PC\SQLEXPRESS;Initial Catalog=Teste;Integrated Security=True")
        connect.Open()
        command = New SqlCommand("SELECT Codigo FROM Clientes ORDER BY Codigo ASC", connect)
        reader = command.ExecuteReader
        While reader.Read
            ultimocodigo = reader(0)
        End While
        reader.Close()
        TextBox1.Text = ultimocodigo + 1
        connect.Close()
        ComboBox1.SelectedIndex = 0
    End Sub

Share this post


Link to post
Share on other sites
ribeiro55

ASC não, DESC é o mais correcto.

Só tens de garantir que só é devolvida uma única linha.

LIMIT com MySQL e TOP com MSSQL/e talvez Access

Estares a afectar a variável por cada linha que te é devolvida... no mínimo não está correcto.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
dipacheco

pois, mesmo assim deveria devolver o valor exacto... e ja entendi o q está a fazer, infelizmente! ele está a correr tudo e devolve-me o campo NULL q é o ultimo (onde serao inseridos novos dados)... o q n faz sentido nenhum!

Share this post


Link to post
Share on other sites
Caça

Está-te a devolver um NULL porque não encontrou nenhum registo


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

oh caça... encontrou! eu se fizer dentro do ciclo while um if... em q so m substitui o valor da variavel caso o mesmo nao seja "" entao ele ja funciona...

while reader.read
     if reader(0).tostring <> "" then
          ultimocodigo=reader(0)
     end if
end while

Assim funciona...

Share this post


Link to post
Share on other sites
ribeiro55

pois, mesmo assim deveria devolver o valor exacto... e ja entendi o q está a fazer, infelizmente! ele está a correr tudo e devolve-me o campo NULL q é o ultimo (onde serao inseridos novos dados)... o q n faz sentido nenhum!

Da forma como estás a fazer devolveria-te tudo (literalmente) excepto um "valor exacto".

Não existe "último campo NULL para inserir" como se vê nas datagrids e afins.

A base de dados não te vai devolver nunca tal coisa, a menos que exista um registo e que esse campo seja NULL.

Estás a trabalhar em MSSQL, portanto isto devolve-te o valor que queres:

SELECT TOP 1 Codigo + 1 FROM Clientes ORDER BY Codigo DESC

Se vier a NULL, é porque está mesmo null.

Aconselho-te a correres esta query num ambiente controlado (como o SQL Server Management Studio) e veres exactamente o que te é devolvido.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
dipacheco

lol... nao sei pq isto m está a acontecer sinceramente! se correr isso sem o "codigo+1" no mssql devolve-me 247 q é o ultimo codigo. se correr no vb.net dá ""

Enfim... obrigado d qlq forma!

Share this post


Link to post
Share on other sites
ribeiro55

Então o comando não está a ser devidamente executado a partir do VB.

E porque não sem o Codigo+1 ? Já te vem correcto da db. Para quê dar a soma ao cliente?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.