Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
manuelbarreto

problemas ao buscar dados á base de dados

Recommended Posts

manuelbarreto

 Private Sub bt_ant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_ant.Click

        txt_nome_forne.Enabled = False
        tx_rua.Enabled = False
        contact_forn.Enabled = False

        Dim cod, max, min As Integer

        Dim x As Integer
       

        If x = 0 Then



            ' Texto de ligação à base de dados 
            Dim mmmyConnectionString As String = _
            "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Users\utilizador\AppData\Desktop\Pap_Project\Pap_economato\Pap_economato\economato.mdf';" & _
            ";Integrated Security=True;User Instance=True"

            ' Selecção à  tabela "fornecedores " 
            ' será passado através de parâmetros posteriormente 
            Dim ssSQL As String = "SELECT MAX(codfornecedor) AS codfornecedor FROM fornecedor"
            ' Cria uma nova ligação à base de dados 
            Dim ccconnection As New SqlConnection(mmmyConnectionString)

            ' Criação do comando indicando a instrução e a ligação 
            Dim cccommand As New SqlCommand(ssSQL, ccconnection)

            ' Indicação dos parâmetros da selecção 

            ' Abre a ligação 
            ccconnection.Open()

            ' Executa o comando colocando num SqlDataReader os resultados 
            Dim rrreader As SqlDataReader = cccommand.ExecuteReader()



            ' Caso existam rows (linhas) 
            If rrreader.HasRows Then

                ' Executa um ciclo nas linhas existentes mostrando o campo codfornecedor
                While rrreader.Read()
                    Debug.WriteLine(rrreader.Item("codfornecedor"))
                    'uma variavel toma o valor do que leuda tabela
                    max = (rrreader.Item("codfornecedor"))
                    cod = max
                    x = max
                End While




                ' Fecha a ligação e limpa as variáveis 
                ccconnection.Close()
                ccconnection = Nothing
                cccommand = Nothing



                If x <> 0 Then
                    ' Texto de ligação à base de dados 
                    Dim myConnectionString As String = _
                    "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Users\utilizador\AppData\Desktop\Pap_Project\Pap_economato\Pap_economato\economato.mdf';" & _
                    ";Integrated Security=True;User Instance=True"
                    'linha onde vola a executar o código caso não exista uma determinada linha na tabela da db
z:
                    cod = cod - 1

                    ' Selecção à  tabela "fornecedores com todos os campos" 
                    ' será passado através de parâmetros posteriormente 
                    Dim SQL As String = "SELECT * FROM fornecedor WHERE [codfornecedor] =" & cod & ""

                    ' Cria uma nova ligação à base de dados 
                    Dim connection As New SqlConnection(myConnectionString)

                    ' Criação do comando indicando a instrução e a ligação 
                    Dim command As New SqlCommand(SQL, connection)

                    ' Indicação dos parâmetros da selecção 

                    ' Abre a ligação 
                    connection.Open()

                    ' Executa o comando colocando num SqlDataReader os resultados 
                    Dim reader As SqlDataReader = command.ExecuteReader()
                    'caso não exista uma determinada linha na coluna vai voltar a executar o código a seguir a z:
                    If reader.HasRows = False And cod <> 0 Then
                        GoTo z
                    End If

                    If reader.HasRows Then

                        ' Executa um ciclo nas linhas existentes mostrando o campo codfornecedor, nome, morada, contacto
                        While reader.Read()
                            Debug.WriteLine(reader.Item("numfiscal"))
                            txt_nif.Text = (reader.Item("numfiscal"))
                            Debug.WriteLine(reader.Item("nome"))
                            txt_nome_forne.Text = (reader.Item("nome"))
                            Debug.WriteLine(reader.Item("localidade"))
                            txt_localidade.Text = (reader.Item("localidade"))
                            Debug.WriteLine(reader.Item("codigo_postal"))
                            txt_codpostal1.Text = (reader.Item("codigo_postal"))
                            Debug.WriteLine(reader.Item("cod_localidade"))
                            txt_codlocalidade.Text = (reader.Item("cod_localidade"))
                            Debug.WriteLine(reader.Item("rua"))
                            tx_rua.Text = (reader.Item("rua"))
                            Debug.WriteLine(reader.Item("contacto"))
                            contact_forn.Text = (reader.Item("contacto"))
                            Debug.WriteLine(reader.Item("fax"))
                            txt_fax.Text = (reader.Item("fax"))
                            Debug.WriteLine(reader.Item("mail"))
                            txt_mail.Text = (reader.Item("mail"))


                        End While

                    End If


                    ' Fecha a ligação e limpa as variáveis 
                    connection.Close()
                    connection = Nothing
                    command = Nothing

                End If
            End If
        End If


    End Sub

ola amigos eu tenho este código e eu queria que ele guarda-se no x o valor do maximo mas quando volto a carregar no butao o x toma o valor de 0 e assim nao me deixa mostrar os anteriores só me mostra o fornecedor que registei antes.

Alguem me pode ajudar?

obg

Share this post


Link to post
Share on other sites
jpaulino
maximo mas quando volto a carregar no butao o x toma o valor de 0

Mass quando tu declaras novamente a variável "x" ela fica a 0. Tens de declarar a variável fora do bt_ant_Click, e não dentro, do tipo: Private x As Integer

Share this post


Link to post
Share on other sites
manuelbarreto

vou explicar passo a passo.

eu abro o form

depois ao carregar no botao anterior ele vai a base de dados buscar o max de linhas e queria guardar isso na vairavel x

depois quando carregua-se no botao ele já tivesse armazenado o maximo no x para nao ir outra vex calcular o maximo

entendes-te?

Share this post


Link to post
Share on other sites
ByMySlf

Então a variável x não pode ser declarada dentro do evento click do botão, tal como o jpaulino referiu. Ou seja, para o que pretendes e se bem entendi, tem que ser declarada global ao form.

Share this post


Link to post
Share on other sites
jpaulino

No topo, Public X as Integer

Private x As Integer

Não precisas declarar uma variável pública se é usada apenas dentro da classe.

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
Sign in to follow this  

×

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.