1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB.NET (2005) e Access

Discussão em 'Programação' iniciada por Py_, 3 de Março de 2008. (Respostas: 11; Visualizações: 2238)

  1. Py_

    Py_ Power Member

    Estou a criar um programa de gestão de doentes em vb.net com a base de dados em access... Já tenho todo o visual criado e as caixas de inserção dos dados mas essas mesmas caixas de texto que servem para a inserção deveriam servir para inserir ou actaulizar os dados pelo que gostaria de criar um recordset (visto que os datareaders só é possível ver do primeiros para o último) para que pode-se navegar nos pacientes conforme o paciente que deseja-se utilizar... o problema é que não consigo criá-lo...

    Estou a usar a seguinte linha de código para tentar criar o recordset.

    O vb não reconhece esta parte "ADOBD.recordset" o erro é que o tipo não foi definido.... alguém que já utilizou puderá ajudar-me??

    Cumps,
    Py_
     
  2. mOrSa

    mOrSa Power Member

    Não sei como estás a fazer mas se queres inserir os dados via sql eu pensava em qq coisa deste género:

    Código:
       Private Sub InsereBD()
          Dim cmd As New OleDb.OleDbCommand
          ' a string com a query
          cmd.CommandText = "INSERT INTO Tabela( campo1, campo2) Values (@campo1, @campo2)"
          ' adicionar os parametros - NOTA IMPORTANTE - em access tens que os especificar pela ordem em que aparecem 
          cmd.Parameters.AddWithValue("@campo1", "valor do campo1")
          cmd.Parameters.AddWithValue("@campo2", "valor do campo2")
    
          Try
             cmd.Connection = New OleDbConnection("string de ligacao")
             cmd.Connection.Open()
             cmd.ExecuteNonQuery()
          Catch ex As Exception
             MsgBox("Ocorreram Erros: " & ex.Message)
          Finally
             If cmd.Connection.State = ConnectionState.Open Then
                cmd.Connection.Close()
             End If
          End Try
       End Sub
    
    Espero ter ajudado!
    1Abraço!
     
  3. kzip

    kzip Power Member

    ADOBD? ou ADODB?
     
  4. Py_

    Py_ Power Member

    Sim, eu faço dessa maneira para enviar os dados para a base de dados... mas ao ler eu queria ler os registos individualmente como se fazia com os recordset utilizados em vb6... alguém sabe??
     
  5. mOrSa

    mOrSa Power Member

    Obtens os valores da base de dados, na totalidade, e coloca-os numa datatable ou num dataset. Depois é só incrementares o indice da linha (datarow) e obtens cada uma das linhas, é como incrementares o teu "recordset". Penso que sirva para o que pretendes.
    No caso de quereres usar um Cursor, na essência da palavra, não faço ideia. Nunca precisei disso e no que diz respeito à ligação é mais provável de "estoirar" a aplicação uma vez que tens sempre a ligação à BD aberta (penso eu de que...)

    1abraço!
     
  6. Py_

    Py_ Power Member

    Será que podes ajudar a fazer isso??
     
  7. mOrSa

    mOrSa Power Member

    Sim, claro! No topo do teu formulário declaras:
    Código:
    Private Dados As New Datatable
    E no corpo do programa (podes optar inclusivamente através de um dos eventos como form.Load ou um button.Click
    e chamas o código para obteres os dados
    Código:
       Private Sub ObtemDados()
          Dim cmd As New OleDb.OleDbCommand
          Dim da As New OleDb.OleDbDataAdapter
          ' a string com a query
          cmd.CommandText = "SELECT * FROM Tabela "
    
          Try
             cmd.Connection = New OleDb.OleDbConnection("string de ligacao")
             da.SelectCommand = cmd
             ' limpar a tabela
             dados.Clear()
             da.Fill(dados)       
          Catch ex As Exception
             MsgBox("Ocorreram Erros: " & ex.Message)
          Finally
             If cmd.Connection.State = ConnectionState.Open Then
                cmd.Connection.Close()
             End If
          End Try
       End Sub
    Posteriormente podes aceder a qualquer uma das linhas através de
    Código:
    dados.Rows(numero_linha).Item("nome_da_coluna_da_base_de_dados")
    As linhas começam no zero e vou supor que estás a consultar um registo de cada vez.
    Código:
    Private indice_actual As Integer = 0
    
    Private Sub ProximoRegisto(...) Handles Button1.Click
        ' codigo dentro do botão
        indice_actual +=1
        'aplicar os dados actuais, por exemplo um aluno
        TextBox1.Text = dados.Rows(indice_actual).Item("Nome_Aluno").ToString
        TextBox2.Text = dados.Rows(indice_actual).Item("Morada_Aluno").ToString 
    End Sub
    
    Espero que seja perceptível.
    1 Abraço

    PS - Três resalvas:
    - pode ser feito com outro tipo de recursos para não "saturar" a aplicação com dados e/ou obter dados mais recentes e por questões de limites de memória
    - um Select * From Tabela pode ser "demasiado" grande e o tempo de TimeOut da ligação verificar-se curto.
    - podes sempre recorrer à mesma função incluindo, na query, o id do último utilizador: "Select Top 1 * From Tabela Where id_aluno > " & dados.Rows(indice_actual).Item("id_alunol").ToString " para o seguinte, usando <, para o anterior, respectivamente.
     
  8. Py_

    Py_ Power Member

    Boas, obrigadissimo resolvi a questão bindingnavigator mas obrigado pela dica na mesma...

    Cumprimentos,
    Py_
     
  9. mOrSa

    mOrSa Power Member

    Pá... essa treta do binding... :| não comento! Já me lixei à conta disso e no dia que estoirou... tive que me responsabilizar por causa disso... saiu-me caro :|
    Good luck! :) Abraço!
     
  10. Py_

    Py_ Power Member

    pois mas não consegui fazer doutra forma.. té agora só tinha usado vb.net com o asp e é bem diferente... mas obrigado na mesma...
     
  11. soaked

    soaked Power Member

    Só para complementar. Tens um objecto que é um datareader que itera pelos objectos do Command que faz acesso à BD.

    Basicamente o reader serve para fazeres o select e em vez de tares a por os dados num dataset e num datatable, iteras pela collection de registos e colocas na List da tua Classe


    Se ainda estiveres interessado pesquisa sobre isso.
     
  12. SFSS

    SFSS Power Member

    Para ler os registos 1 a 1, podes fazer assim....

    Dim SQL_Connection as New SQL_Connection("ConnectionString")

    Dim SQL_Command as New SQL_Command("SELECT * FROM XPTO ORDER BY cod",SQL_Connection)

    SQL_Connection.Open
    Dim SQL_Reader as SQL_DataReader = SQL_Command.ExecuteReader
    While SQL_Reader.Read

    campo1.text = SQL_Reader.Item("campo1db").tostring
    campo2.text = SQL_Reader.Item("campo2db").tostring
    campo3.text = SQL_Reader.Item("campo3db").tostring

    End While
    SQL_Connection.Close

    Ve lá se isto de ajuda....
    Abraços
     
    Última edição: 12 de Março de 2008

Partilhar esta Página