none
Gerar Código Automático RRS feed

  • Pergunta

  • Eai Galera Beleza. Estou começando a programar agora e estou com varias dificuldades caso alguém possa me ajudar ficarei muito grato,

    Estou com problema para buscar o Código da Coluna do banco de dados Access 

    gostaria tambem que na frente do codigo ele acrecentace dois zeros ex. (001) (010) teria como eu fazer isso?

    o codigo que consegui achar fazer não puxa para a textbox o valor.

          Dim dr As OleDbDataReader = Nothing
            Dim AUTOMATICO As Integer = 0
            Using con As OleDbConnection = PConnection()
                Try
                    con.Open()
                    Dim Ds As New DataSet
                    Dim sql As String = "SELECT Max(Codigo) from inventariante  =  txtCodigo.Text  "
                    Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
                    dr = cmd.ExecuteReader()
                    If dr.HasRows Then
                        dr.Read()



                        If txtCodigo.Text > 0 Then
                            AUTOMATICO = txtCodigo.Text
                        End If
                        AUTOMATICO = AUTOMATICO + 1

                    End If

    não sei se esta certo, 

    galera Obrigado.


    Douglas Antunes

    segunda-feira, 30 de março de 2015 22:48

Respostas

  • Mano, se você quer um campo de código automático, define no banco de dados um campo como automático que o campo é incrementado de acordo com a entrada de registros.

        
    'você pode pegar a string de conexão em http://www.connectionstrings.com/access/       

    Using con As new OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=CAMINHODOBANCODEDADOS;Persist Security Info=False;")
                    con.Open()
                    Dim cmd As new OleDbCommand  ("SELECT Max(Codigo) from inventariante", con)

    'Com esse sql você pegará somente um registro no caso o maior valor do campo código da tabela inventariamente

                      Dim dr As OleDbDataReader = cmd.ExecuteReader()
                    If dr.HasRows Then
                        dr.Read()

    if dr.item(0)>0 then

    textBox.text=dr.item(0).tostring

    end if

    end if

    con.close

    quarta-feira, 1 de abril de 2015 23:37
  • Tente colocar o apelido para o campo MAX, veja abaixo fiz alguns ajustes:

    Dim dr As OleDb.OleDbDataReader = Nothing
            Dim dt As DataTable = Nothing
            Dim AUTOMATICO As Integer = 0
            Dim con As OleDb.OleDbConnection
    
            con.ConnectionString = "SUA STRING DE CONEXAO";
    
    
    
            Try
                con.Open()
                Dim Ds As New DataSet
                'se o id for inteiro coverta de string para int ex.: Convert.ToInt32(txtCodigo.Text)
                Dim sql As String = "SELECT MAX(codigo) as Total from inventariante  =  '" + txtCodigo.Text + "'"
                Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sql, con)
                dr = cmd.ExecuteReader()
    
                'Carrega os dados para o DataTable
                dt.Load(dr)
    
                'Se for maior é por que retornou dados
                If dt.Rows.Count > 0 Then
    
                    If Convert.ToInt32(txtCodigo.Text.Trim) > Convert.ToInt32(dt.Rows(0).ToString) Then
                        AUTOMATICO = Convert.ToInt32(txtCodigo.Text.Trim)
                    End If
                    AUTOMATICO = AUTOMATICO + 1
                End If
            Catch ex As Exception
                MessageBox.Show("Erro " & ex.Message)
            End Try
    
        End Sub

    OBS: Finaliza a outra Thread que abriu com a mesma pergunta aqui : https://social.msdn.microsoft.com/Forums/pt-BR/6a66d581-cd45-402a-9f54-a92b946b63b9/vbnet-ler-banco-de-dados-access?forum=vsvbasicpt

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel


    quarta-feira, 1 de abril de 2015 11:54
  • Douglas, boa tarde!

    Conforme conversado a solução correta esta abaixo!

            Try
                Dim Table_ As String = "tblContacts"
                Dim query As String = "SELECT top 1 * FROM " & Table_ & " ORDER BY ID DESC"
                Dim MDBConnString_ As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Controle de Invnetario Coocerqui\PRODUTOS.accdb;Persist Security Info=True"
                Dim ds As New DataSet
                Dim cnn As OleDbConnection = New OleDbConnection(MDBConnString_)
                cnn.Open()
                Dim cmd As New OleDbCommand(query, cnn)
                Dim da As New OleDbDataAdapter(cmd)
                da.Fill(ds, Table_)
                cnn.Close()
                Dim t1 As DataTable = ds.Tables(Table_)
                Dim row As DataRow
    
                For Each row In t1.Rows
                    txtCodigo.Text = row(0)
                Next
    
            Catch ex As Exception
                ' Show the exception's message.
                MessageBox.Show(ex.Message)
    
                ' Show the stack trace, which is a list of methods
                ' that are currently executing.
                MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace)
            End Try


    Se a resposta for útil, favor votar como útil para que ajude outros usuários com a mesma dúvida.

    Att,

    André Côrte
    Analista de Sistema
    Skype: corte.solutions
    Nosso trabalho
    Grupo de Estudo no Facebook
    Canal de Estudo no Youtube

    • Marcado como Resposta DouglasAntunes quinta-feira, 2 de abril de 2015 19:03
    quinta-feira, 2 de abril de 2015 17:20

Todas as Respostas

  • Douglas, boa noite!

     A Solução para adicionar os zeros antes do número segue abaixo!

    var valor = "100"; var numeroCom5Casas = valor.PadLeft(5, '0'); var resultado = numeroCom5Casas; // 00100

    var numeroCom6Casas = valor.PadLeft(6, '0'); var resultado6 = numeroCom6Casas; // 000100

    var numeroCom7Casas = valor.PadLeft(6, '0');

    var resultado7 = numeroCom7Casas; // 0000100

    Segue alguns exemplos:

    http://www.fernandasallai.com.br/?p=514

    http://www.dotnetperls.com/padleft-vbnet

    Para a conexão com o banco caso não saiba como fazer veja o link abaixo!

    https://www.youtube.com/watch?v=4bMbhdRFtHo

    
    

            Dim dr As OleDbDataReader = Nothing
            Dim AUTOMATICO As Integer = 0
            Using con As OleDbConnection = PConnection()
                Try
                    con.Open()
                    Dim Ds As New DataSet
                    'se o id for inteiro coverta de string para int ex.: Convert.ToInt32(txtCodigo.Text)
                    Dim sql As String = "SELECT * from inventariante  =  '" + txtCodigo.Text + "'"
                    Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
                    dr = cmd.ExecuteReader()
                    If dr.HasRows Then
                        dr.Read()
     
     
     
                        If txtCodigo.Text > 0 Then
                            AUTOMATICO = txtCodigo.Text
                        End If
                        AUTOMATICO = AUTOMATICO + 1
     
                    End If

    Att, 
    <br/> 
    <b>André Rodrigues Côrte</b> 
    <br/> Analista de Sistema <br/> 
    <b><a href="http://cortesolutions.com.br/" target="_target">Côrte Solutions</a></b> 
    <br/> <b><a href="https://www.facebook.com/groups/cursocortesolutions" target="_target">Grupo de Estudo C# Facebook</a></b> 
    <br/> <b><a href="https://www.youtube.com/channel/UClnaKcmvv0tDiYgUdwXZvCg" target="_target">Canal de Estudo Youtube</a></b>




    terça-feira, 31 de março de 2015 01:35
  • Fala André Beleza?, Boa noite.

    Muito obrigado pela sua ajuda!!

    Então eu não estou conseguindo com que apareça o código do banco de dados no textBox, 

    copiei o código que você me mandou mais não aparece, 

    você teria mais alguma dica para me dar? 

    Obrigado!


    Douglas Antunes

    terça-feira, 31 de março de 2015 21:57
  • Douglas, 

    Chama via skype que te ajudo!


    Att,
    André Rodrigues Côrte
    Analista de Sistema
    Côrte Solutions
    Grupo de Estudo C# Facebook
    Canal de Estudo Youtube

    quarta-feira, 1 de abril de 2015 02:07
  • Boa noite André,

    Manda seu e-mail, amanha te mando o convite para o Skype

    Obrigado pela força!


    Douglas Antunes

    quarta-feira, 1 de abril de 2015 03:24
  • Douglas, meu skype esta na assinatura!

    Abraço!


    Se a resposta for útil, favor votar como útil para que ajude outros usuários com a mesma dúvida.

    Att,

    André Côrte
    Analista de Sistema
    Skype: corte.solutions
    Nosso trabalho
    Grupo de Estudo no Facebook
    Canal de Estudo no Youtube

    quarta-feira, 1 de abril de 2015 04:12
  • Tente colocar o apelido para o campo MAX, veja abaixo fiz alguns ajustes:

    Dim dr As OleDb.OleDbDataReader = Nothing
            Dim dt As DataTable = Nothing
            Dim AUTOMATICO As Integer = 0
            Dim con As OleDb.OleDbConnection
    
            con.ConnectionString = "SUA STRING DE CONEXAO";
    
    
    
            Try
                con.Open()
                Dim Ds As New DataSet
                'se o id for inteiro coverta de string para int ex.: Convert.ToInt32(txtCodigo.Text)
                Dim sql As String = "SELECT MAX(codigo) as Total from inventariante  =  '" + txtCodigo.Text + "'"
                Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sql, con)
                dr = cmd.ExecuteReader()
    
                'Carrega os dados para o DataTable
                dt.Load(dr)
    
                'Se for maior é por que retornou dados
                If dt.Rows.Count > 0 Then
    
                    If Convert.ToInt32(txtCodigo.Text.Trim) > Convert.ToInt32(dt.Rows(0).ToString) Then
                        AUTOMATICO = Convert.ToInt32(txtCodigo.Text.Trim)
                    End If
                    AUTOMATICO = AUTOMATICO + 1
                End If
            Catch ex As Exception
                MessageBox.Show("Erro " & ex.Message)
            End Try
    
        End Sub

    OBS: Finaliza a outra Thread que abriu com a mesma pergunta aqui : https://social.msdn.microsoft.com/Forums/pt-BR/6a66d581-cd45-402a-9f54-a92b946b63b9/vbnet-ler-banco-de-dados-access?forum=vsvbasicpt

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel


    quarta-feira, 1 de abril de 2015 11:54
  • Boa tarde Pessoal.

    Coloquei o código que você me deu, porem da a mensagem de erro

    Erro de Sintaxe na Cláusula From, 

    como que eu coloco um apelido para o campo MAX ? 

    Desculpa a ignorância, To aprendendo agora rsrs

    Muito obrigado pessoal!!


    Douglas Antunes

    quarta-feira, 1 de abril de 2015 16:31
  • Mais ai você esqueceu de colocar a tabela e no lugar só esta o campo

    SELECT MAX(codigo) as Total from SUA_TABELA WHERE inventariante='" + txtCodigo.Text + "'"



    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 1 de abril de 2015 16:40

  • ficou assim dai

     Dim sqa As String = "SELECT MAX(codigo) AS TOTAL FROM PRODUTOS WHERE inventariante =  '" + txtCodigo.Text + "'"

    só que aparece a mensagem abaixo, sera que esqueci de mais alguma coisa?

    "Nenhum valor foi fornecido para um ou mais parâmetros necessarios"

    Obrigado!!


    Douglas Antunes

    quarta-feira, 1 de abril de 2015 16:47
  • O script correto é esse aqui:


     SELECT MAX (codigo) as Total from inventariante WHERE codigo='" + txtCodigo.Text + "'"



    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel


    • Editado Mr. GMSOFT quarta-feira, 1 de abril de 2015 17:00
    quarta-feira, 1 de abril de 2015 16:49
  • Tente deste jeito:  Dim sql As String = "SELECT Max(Codigo) from inventariante  = '" & txtCodigo.Text & "' "


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    quarta-feira, 1 de abril de 2015 21:16
  • Mano, se você quer um campo de código automático, define no banco de dados um campo como automático que o campo é incrementado de acordo com a entrada de registros.

        
    'você pode pegar a string de conexão em http://www.connectionstrings.com/access/       

    Using con As new OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=CAMINHODOBANCODEDADOS;Persist Security Info=False;")
                    con.Open()
                    Dim cmd As new OleDbCommand  ("SELECT Max(Codigo) from inventariante", con)

    'Com esse sql você pegará somente um registro no caso o maior valor do campo código da tabela inventariamente

                      Dim dr As OleDbDataReader = cmd.ExecuteReader()
                    If dr.HasRows Then
                        dr.Read()

    if dr.item(0)>0 then

    textBox.text=dr.item(0).tostring

    end if

    end if

    con.close

    quarta-feira, 1 de abril de 2015 23:37
  • Pessoal eu preciso de suas opiniões, 

    olha o que eu estava querendo fazer acho que não vai dar certo, 

    esse abaixo seria o jeito que eu estava querendo fazer,Porem Estou querendo fazer igual abaixo sem código, Mas tenho duvidas a onde salvar estas informações, pois na exportação preciso delas, o que vocês me aconselham fazer?

    Galera Muito obrigado pela força,


    Douglas Antunes

    quinta-feira, 2 de abril de 2015 00:52
  • Boa noite Douglas,

    A informação postada por todos lhe dão uma ideia de como deve proceder, copiar e colar não vai resolver seu problema você tem que adaptar a sua necessidade. 

    Com o desenho da sua estrutura creio que seja mais direta a ajuda.

    Abraços


    Matheus Leopardi Mello Canelada Campos

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 2 de abril de 2015 03:27
  • Douglas, boa tarde!

    Conforme conversado a solução correta esta abaixo!

            Try
                Dim Table_ As String = "tblContacts"
                Dim query As String = "SELECT top 1 * FROM " & Table_ & " ORDER BY ID DESC"
                Dim MDBConnString_ As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Controle de Invnetario Coocerqui\PRODUTOS.accdb;Persist Security Info=True"
                Dim ds As New DataSet
                Dim cnn As OleDbConnection = New OleDbConnection(MDBConnString_)
                cnn.Open()
                Dim cmd As New OleDbCommand(query, cnn)
                Dim da As New OleDbDataAdapter(cmd)
                da.Fill(ds, Table_)
                cnn.Close()
                Dim t1 As DataTable = ds.Tables(Table_)
                Dim row As DataRow
    
                For Each row In t1.Rows
                    txtCodigo.Text = row(0)
                Next
    
            Catch ex As Exception
                ' Show the exception's message.
                MessageBox.Show(ex.Message)
    
                ' Show the stack trace, which is a list of methods
                ' that are currently executing.
                MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace)
            End Try


    Se a resposta for útil, favor votar como útil para que ajude outros usuários com a mesma dúvida.

    Att,

    André Côrte
    Analista de Sistema
    Skype: corte.solutions
    Nosso trabalho
    Grupo de Estudo no Facebook
    Canal de Estudo no Youtube

    • Marcado como Resposta DouglasAntunes quinta-feira, 2 de abril de 2015 19:03
    quinta-feira, 2 de abril de 2015 17:20
  • André, Muito obrigado! Deu certo seu codigo.... Valeu se é foda Kara!! Valeu mesmo!!

    Douglas Antunes

    quinta-feira, 2 de abril de 2015 19:03