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

manuelbarreto

slql server/vb.net

Recommended Posts

manuelbarreto

Olá eu gostava de saber como posso ligar o vb.net a minha base de dados em mdf é que eu estou a utilizar data set mas está a dar-me muitos problem..

Share this post


Link to post
Share on other sites
Geninha

ola

vê se este código ajuda

Imports System.Data.SqlClient - antes do public class

Private da As SqlDataAdapter
    Private ds As DataSet

Dim myConnectionString As String = "Data Source=" - aqui fazes a ligaçã, isto é colocas aqui o caminho da tua base de dados.
        Dim connection As New SqlConnection(myConnectionString)
Dim SQL As String = - aqui podes utilizar um select ou update depende do que queres
da = New SqlDataAdapter(SQL, connection)
        ds = New DataSet
da.Fill(ds, "nome da tabela")
        Me.DataGridView1.DataSource = ds.Tables("nome da tabela")
        connection = Nothing

Share this post


Link to post
Share on other sites
manuelbarreto

ola amigos eu estou a ler de uma base de dados e queria colocar o campo nomecategorias na listbox mas nao estou a ser capaz de efectuar isso alguem me pode dar uma ajuda?

Código:

       ' 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"

        ' Selecção à  tabela "MyTable" em que o campo "username" 
        ' será passado através de parâmetros posteriormente 
        Dim SQL As String = "SELECT * FROM categorias "

        ' 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 
       ' command.Parameters.Add("@username", SqlDbType.VarChar).Value = "jpaulino"

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

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

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

            ' Executa um ciclo nas linhas existentes mostrando o campo “username” 
            While reader.Read()
                Debug.WriteLine(reader.Item("nomecategoria"))
                ListBox1.Items.Add(reader)
            End While

        End If

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

Share this post


Link to post
Share on other sites
renafi

Porque na ListBox não estás a enviar o nome da categoria, mas sim o reader. Experimenta isto:

ListBox1.Items.Add(reader.Item("nomecategoria"))

Nota: mas podes definir o DataSource da Listbox logo com o reader.


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
manuelbarreto

estive a ver melhor ali uma coisa no codigo é já deu..

obg mais uma vez por tudo amigos!!

Share this post


Link to post
Share on other sites
manuelbarreto

olá mais uma vez.

eu estou a colocar os dados numa listgridview e estou a utilizar este codigo:

While reader.Read()
                Debug.WriteLine(reader.Item("codcategoria"))
                cod = (reader.Item("codcategoria"))
                Debug.WriteLine(reader.Item("nomecategoria"))
                cat = (reader.Item("nomecategoria"))

                Dim SLVI1 As New ListViewItem.ListViewSubItem

                Dim LVI As New ListViewItem

                LVI.Text = cod
                SLVI1.Text = cat
                LVI.SubItems.Add(SLVI1)
                ver.Items.Add(LVI)
            End While

Mas ainda nao percebi o que é o LVI e o SLVI1.

Alguem me pode explicar e desculpai lá a minha ignorancai.. ehee

:wallbash:

Share this post


Link to post
Share on other sites
ribeiro55

LVI representa um item da ListView. Na prática é uma linha completa.

SLVI é abreviatura para SubListViewItem. É uma maneira controlada de adicionar subitems ao ListViewItem.

Podes encarar subitems, na vista de detalhes, como as colunas que cada linha tem.

Se tiveres por exemplo 3 colunas, LVI.SubItems(0) é a primeira coluna, LVI.SubItems(1) é a segunda, etc.

Também obténs resultado semelhante com:

LVI.SubItems.Add("texto")


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
manuelbarreto

ola amigos mais uma vez.

eu estou a inserir os dados numa tabela mas queria por a aparecer uma msgbox se já ouvesse algum fornecedor com aquele código já registado.

já tentei fazer um select mas nao sonsegui por a dar.

alguem me pode dar uma explicaçao??

eu vou postar aqui o meu cod que utilizo para registar..

obg

        ' 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"

        ' Comando que irá inserir dados na tabela "MyTable" em que os campos
        ' "username" e "date" são passados através de parâmetros
        Dim SQL As String = "INSERT INTO fornecedor([codfornecedor], [nome],[morada],[contacto]) VALUES (@cod, @nome,@morada,@contacto);"

        ' 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 que serão inseridos
        command.Parameters.Add("@cod", SqlDbType.Int).Value = cod_forne.Text
        command.Parameters.Add("@nome", SqlDbType.VarChar).Value = nome_forne.Text
        command.Parameters.Add("@morada", SqlDbType.VarChar).Value = morada_for.Text
        command.Parameters.Add("@contacto", SqlDbType.VarChar).Value = contact_forn.Text


        ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos
        connection.Open()

        Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        Else
            MessageBox.Show("Fornecedor registado com sucesso!!!")
        End If
        cod_forne.Text = ""
        nome_forne.Text = ""
        morada_for.Text = ""
        contact_forn.Text = ""

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

Share this post


Link to post
Share on other sites
ribeiro55

Faz um Select count que tenha o código de fornecedor como condição.

Se a resposta for qualquer coisa que não seja zero, significa que já existe.


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
manuelbarreto

olá eu gostava que me tirassem uma duvida.

eu estou a fazer um select á base de dados mas com base nos dados que estou a inserir numa texbox.

haver se só mais explicito.

eu por exemplo tenho duas textbox a textbox codfornecedor e a txt nomefornecedor e por exemplo sei o código do fornecedor que é 123 e ao estar a inserir os dados na textbox codfornecedor ele estar a fazer pesquisa na base de dados sem eu ter que carregar num botão e ao o código estar todo inserido aparecer o nome do fornecedor na txt nomefornecedor.

á alguma propriedade na textbox para estar sempre a fazer esta pesquisa??

obg

Share this post


Link to post
Share on other sites
ribeiro55

Evento TextChanged é disparado sempre que o texto é alterado.

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
'instrucções
    End Sub


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
manuelbarreto

olá estou com um problema aqui a fazer um select.

eu estou a fazer um select á base de dados quando carrego o formulario. com o seguinte código

 
        ' 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"

        ' Selecção à  tabela "MyTable" em que o campo "username" 
        ' será passado através de parâmetros posteriormente 
        Dim SQL As String = "SELECT * FROM fornecedor "

        ' 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 existam rows (linhas) 
        If reader.HasRows Then

            ' Executa um ciclo nas linhas existentes mostrando o campo “username” 
            While reader.Read()
                'lê os dados que estão na tabela codfornecedor
                Debug.WriteLine(reader.Item("codfornecedor"))
                'uma variavel toma o valor do que leuda tabela
                cod_forne.Text = (reader.Item("codfornecedor"))
                Debug.WriteLine(reader.Item("nome"))
                nome_forne.Text = (reader.Item("nome"))

                Debug.WriteLine(reader.Item("morada"))
                morada_for.Text = (reader.Item("morada"))
                Debug.WriteLine(reader.Item("contacto"))
                contact_forn.Text = (reader.Item("contacto"))


            End While

        End If

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

    Private Sub contact_forn_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles contact_forn.TextChanged
        If Not IsNumeric(Me.contact_forn.Text) Then

            If contact_forn.Text <> "" Then
                MsgBox("Insira apenas numeros no campo contacto.")
                contact_forn.Text = ""

            End If
        End If
    End Sub

    Private Sub nome_forne_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nome_forne.TextChanged
        If IsNumeric(Me.nome_forne.Text) Then

            If nome_forne.Text <> "" Then
                MsgBox("Insira apenas letras no campo nome.")
                nome_forne.Text = ""

            End If
        End If

mas depois no formulario queria colocar um botao para andar para o registo anterior e para o registo seguinte.

como é que posso fazer isso??

obg

Share this post


Link to post
Share on other sites
manuelbarreto

ola pessoal estou aqui com um problema grave.

eu tenho o seguinte código para percorrer os dados na base de dados na tabela fornecedor.

mas se apagar um fornecedor depois já nao consigo andar para a frente nem para trás..

vejam aqui o meu código e digam-me alguma coisa..

obrigado..

Private Sub bt_ant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_ant.Click
        Dim cod As Integer
        cod = CInt(cod_forne.Text)
        cod = cod - 1

        ' 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"

        ' 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 existam rows (linhas) 
        If reader.HasRows Then

            ' Executa um ciclo nas linhas existentes mostrando o campo “username” 
            While reader.Read()
                'lê os dados que estão na tabela codfornecedor
                Debug.WriteLine(reader.Item("codfornecedor"))
                'uma variavel toma o valor do que leuda tabela
                cod_forne.Text = (reader.Item("codfornecedor"))
                Debug.WriteLine(reader.Item("nome"))
                nome_forne.Text = (reader.Item("nome"))

                Debug.WriteLine(reader.Item("morada"))
                morada_for.Text = (reader.Item("morada"))
                Debug.WriteLine(reader.Item("contacto"))
                contact_forn.Text = (reader.Item("contacto"))


            End While

        End If

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

    End Sub

este código é do botão para andar para tras..

Share this post


Link to post
Share on other sites
inginheiiro
Public Function RecordExists(ByRef _SqlConnection As System.Data.SqlClient.SqlConnection, ByVal _SQL As String) As Boolean
    Dim _SqlDataReader As System.Data.SqlClient.SqlDataReader = Nothing
    
    Try
        ' Pass the connection to a command object
        Dim _SqlCommand As New System.Data.SqlClient.SqlCommand(_SQL, _SqlConnection)
        
        ' get query results
            
        _SqlDataReader = _SqlCommand.ExecuteReader()
    Catch _Exception As Exception
        ' Error occurred while trying to execute reader
        ' send error message to console (change below line to customize error handling)
        Console.WriteLine(_Exception.Message)
        
        Return False
    End Try
    
    If _SqlDataReader IsNot Nothing AndAlso _SqlDataReader.Read() Then
        ' close sql reader before exit
        If _SqlDataReader IsNot Nothing Then
            _SqlDataReader.Close()
            _SqlDataReader.Dispose()
        End If
        
        ' record found
        Return True
    Else
        ' close sql reader before exit
        If _SqlDataReader IsNot Nothing Then
            _SqlDataReader.Close()
            _SqlDataReader.Dispose()
        End If
        
        ' record not found
        Return False
    End If
End Function


I used to have a life ... but i bought a programmable machine in 1982 ...

Share this post


Link to post
Share on other sites
manuelbarreto

alguem me pode dar uma ajuda que eu continuo com o problema de andar para a frente e para tras por causa de faltar a linha..

obg

Share this post


Link to post
Share on other sites
ribeiro55

Não me digas que tens a connectionstring em todas as funções da aplicação! :D

Podias usar o método do inginheiiro, mas não basta só meteres algo como cod_forne.Text=cod.ToString logo a seguir a cod = cod - 1 para tornar o retrocesso efectivo?

Da maneira que tens isso feito, à luz e à hora a que estou a ver isto, parece que a forma mais fácil para voltares lá cima, caso o HasRows devolva False, ainda é um GoTo (bárbaro!), correndo o risco de empanares isso se não tomares as devidas precauções.

EDIT: Melhor, agora que reparei: no If do HasRows, mete no else cod_forne.Text=cod.ToString para tornar o retrocesso efectivo mesmo que não encontre nada.


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
ribeiro55

Se estiveres mesmo a considerar usar GoTo, eis um exemplo:

        MsgBox("Não volto mais aqui")
voltar:
        MsgBox("Mas isto vou repetir até me cansar!")
        GoTo voltar


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

×

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.