none
PESQUISA A BANCO DE DADOS DO ACESS RRS feed

  • Pergunta

  • Senhores,


    por favor, se puderem me ajudem.

    Criei um projeto de cadastro de funcionários com a tabela "ESCALAS" no Acess 2003. Preciso de um sistema de busca em que os resultados sejam expostos em uma listbox e que uma label realize a contagem dos serviços de um funcionário.

    Explicando melhor:

    BANCO DE DADOS: Acess 2003
    TABELA "ESCALA": fonte de dados
    COLUNA "NOME": coluna que deverá ser usada como parametro

    BOTAO "BUSCA": quando clicado filtra os dados da textbox e expoe na listbox
    TEXTBOX "TEXTBUSCA": serve como filtro para busca
    LISTBOX "LISTA": expoe os registros do filtro, ou seja, as datas que o funcionario trabalhou


    Eu sei fazer tal coisa com o SQL, porém nao consegui utilizando o Banco do Acess.


    Por favor, eu agradeço.


    Paulo

    sábado, 28 de novembro de 2009 14:39

Respostas

  • Opa

    Não entendi direito tua dúvida. Se tu consegue fazer em sql, fica relativamente tranquilo fazer em access. Claro, existem algumas diferenças, e a principal deles é q tu não pode usar a classe SqlClient, e sim a classe OleDb para efetuar a comunicação com teu banco. E nos comandos do acces tbm há algumas diferenças, tipo o like não é com '%' e sim com '*', join somente encadeados, e não empilhado como no sql... enfim, nada q tu não consiga, com uma ajudinha do Google. E a medida q as dúvidas forem surgindo, posta aih.

    Dá uma olhada neste site: http://sqlserver2000.databases.aspfaq.com/what-are-the-main-differences-between-access-and-sql-server.html.

    Espero ter ajudado

    Abraço
    • Marcado como Resposta jacobsamuel quinta-feira, 3 de dezembro de 2009 12:52
    terça-feira, 1 de dezembro de 2009 18:02
  • Olá Jacob

    Eu não costumo utilizar o assistente. Admito q é bem intuitivo, mas recomendo utilizar as classes do ADO no braço. Quando se conhece um pouco estas classes fica bem fácil, e e bem tranquilo de dar manutenção no código, se um dia for necessário. Basicamente tu vai ter q usar estas classes:

    - OledbConnection
    - OledebCommand
    - OleDbDataAdapter(ou OleDbDataReader)
    - DataSet

    Não esqueça de referenciar o namespace System.Data.OleDb (Imports System.Data.OleDb no começo do teu arquivo). Dá uma pesquisada no google como faz para usar estas classes. Te garanto q não é dificil.

    Dá uma olhada neste artigo: http://www.macoratti.net/vbn_acoa.htm. É sobre uma aplicação que acessa dados de um banco access.

    Abraço
    • Marcado como Resposta jacobsamuel quinta-feira, 3 de dezembro de 2009 12:52
    quarta-feira, 2 de dezembro de 2009 10:34
  • Jacob,

    Dá uma olhada neste fórum: http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/f1955c20-1207-4199-9ce6-7cad29f1edcf?prof=required

    Acho q ele tem a mesma dúvida q vc. Lá tm um link para um artigo q conecta com banco de dados SQL. No teu caso, só precisa mudar as classes, conforme tá explicado no fórum.

    Abraço.
    • Marcado como Resposta jacobsamuel quinta-feira, 3 de dezembro de 2009 12:52
    quarta-feira, 2 de dezembro de 2009 17:25

Todas as Respostas

  • Opa

    Não entendi direito tua dúvida. Se tu consegue fazer em sql, fica relativamente tranquilo fazer em access. Claro, existem algumas diferenças, e a principal deles é q tu não pode usar a classe SqlClient, e sim a classe OleDb para efetuar a comunicação com teu banco. E nos comandos do acces tbm há algumas diferenças, tipo o like não é com '%' e sim com '*', join somente encadeados, e não empilhado como no sql... enfim, nada q tu não consiga, com uma ajudinha do Google. E a medida q as dúvidas forem surgindo, posta aih.

    Dá uma olhada neste site: http://sqlserver2000.databases.aspfaq.com/what-are-the-main-differences-between-access-and-sql-server.html.

    Espero ter ajudado

    Abraço
    • Marcado como Resposta jacobsamuel quinta-feira, 3 de dezembro de 2009 12:52
    terça-feira, 1 de dezembro de 2009 18:02
  • Caro Gabriel,

    Obrigado por me responder.
    Pois é, meus conhecimentos em VB ainda são muito precarios, pois sou totalmente auto-didata.

    Tenho tentado fazer a busca como se faz no sql, sigo os passos com o assistente, quando tento criar o "query"para buscar por nome, nao consigo.

    Será que você poderia me dizer como faço o "query" e o código depois para a busca?

    Obrigado.

    Paulo

    quarta-feira, 2 de dezembro de 2009 07:33
  • Olá Jacob

    Eu não costumo utilizar o assistente. Admito q é bem intuitivo, mas recomendo utilizar as classes do ADO no braço. Quando se conhece um pouco estas classes fica bem fácil, e e bem tranquilo de dar manutenção no código, se um dia for necessário. Basicamente tu vai ter q usar estas classes:

    - OledbConnection
    - OledebCommand
    - OleDbDataAdapter(ou OleDbDataReader)
    - DataSet

    Não esqueça de referenciar o namespace System.Data.OleDb (Imports System.Data.OleDb no começo do teu arquivo). Dá uma pesquisada no google como faz para usar estas classes. Te garanto q não é dificil.

    Dá uma olhada neste artigo: http://www.macoratti.net/vbn_acoa.htm. É sobre uma aplicação que acessa dados de um banco access.

    Abraço
    • Marcado como Resposta jacobsamuel quinta-feira, 3 de dezembro de 2009 12:52
    quarta-feira, 2 de dezembro de 2009 10:34
  • Jacob,

    Dá uma olhada neste fórum: http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/f1955c20-1207-4199-9ce6-7cad29f1edcf?prof=required

    Acho q ele tem a mesma dúvida q vc. Lá tm um link para um artigo q conecta com banco de dados SQL. No teu caso, só precisa mudar as classes, conforme tá explicado no fórum.

    Abraço.
    • Marcado como Resposta jacobsamuel quinta-feira, 3 de dezembro de 2009 12:52
    quarta-feira, 2 de dezembro de 2009 17:25
  • Gabriel,


    obrigado mesmo pela ajuda. Estou tentando, mas "velho" tá dificil pra mim.
    Estou precisando tambem de uma ajuda para gerar relatorios. Tipo, tenho um banco de dados de cadastro de funcionários (com foto), preciso gerar um relatório com os dados de determinado funcionário e imprimi-lo. Eu uso VB 2005 express. Dá pra dar uma dica?


    Obrigado.


    Paulo
    quinta-feira, 3 de dezembro de 2009 12:55
  • Paulo,

    Para gerar relatórios, tu pode usar Crystal Reports. Já montei alguns relatórios em Crystal, mas já tm bastante tempo, e não tenho muit conhecimento nesta ferramenta. Mas dá uma pesquisada no google. Certamante tu vai encontrar coisas bacanas.

    Mas em relação à consulta no banco de dados access, tu consegue conectar no banco? Tu consegue fazer uma consulta tipo "selecet * from TABELA"? Em q parte mais ou menos tu travou?


    quinta-feira, 3 de dezembro de 2009 15:03
  • Gabriel,

    eu consigo gerar a conexao, mas ainda nao consigo gerar a consulta. Vou continuar estudando para especificar mais as dúvidas.
    Valeu.

    Obrigado.

    Paulo
    quinta-feira, 3 de dezembro de 2009 15:37
  • Certo Paulo

    Tu disse q se fosse em sql tu conseguiria fazer a consulta, não é? De repente posta aqui como tu faria a consulta se fosse em sql, e eu vejo se consigo t dizer como tem q ficar para o Access...
    sexta-feira, 4 de dezembro de 2009 13:31
  • Beleza Gabriel, vamos lá:

    Eu criei um botao (btnBusca) que ao ser clicado, busca os registros dos nomes tendo como parametro o texto digitado num textbox:

    Private

     

    Sub btnBusca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBusca.Click

     

    If textbusca.Text.Trim.Length > 1 Then

     

    ErrorProvider1.SetError(textbusca,

    "")

     

     

    Dim da As CSA.BDDataSetTableAdapters.DADOSTableAdapter = New CSA.BDDataSetTableAdapters.DADOSTableAdapter

     

    LISTA.DataSource = da.GetDataByNOME(

    "%" & textbusca.Text & "%")

    LISTA.DisplayMember =

    "nome"

    LISTA.ValueMember =

    "ID"

    LISTA.Refresh()

     

     

    Else

    ErrorProvider1.SetError(textbusca,

    "Informe o NOME com no mínimo 2 caracteres...")

     

    End If

     

     

    Dim quant As Integer = LISTA.Items.Count

    msg.Text = (

    "REGISTROS ENCONTRADOS: " & quant & "")

     

    End Sub



    Como você pôde ver, em sql eu consigo gerar um Query para que seja executado na busca, mas nao consigo fazer o mesmo no Banco do Acess.

    Obrigado.


    Paulo

    sexta-feira, 4 de dezembro de 2009 13:48
  • Paulo,

    A tua função GetDataByNOME faz uma busca tipo like com os parametros? Se sim, troca  ( "%" & textbusca.Text & "%" ) por ( "*" & textbusca.Text & "*") pois nas pesquisa com like no access não se deve usar o sinal % e sim o *.
    sexta-feira, 4 de dezembro de 2009 16:08
  • Gabriel,

    Sim, quando eu crio a NewQuery no Sql Fica "Select ID,Nome From Dados where (Nome Like @Param).

    Porém, quando faço o mesmo procedimento com banco acess não aceitam "@", pelo que eu entendi.
    Por isso não consigo criar o query. Como você pode ver no codigo acima, o "da" no  da.getbynome  corresponde ao query criado, nao consigo fazer o mesmo no acess.

    obrigado.

    Paulo.
    domingo, 6 de dezembro de 2009 08:38
  • Bom, neste caso faz a consulta sem parametros mesmo... ficaria algo como:

    Command.SelectComand = "Select * from <tabela> where <campo> like '*" & textbusca.Text & "*' "
    Command.|Connection = Connection
    Connection.Open()
    DataAdatpter.SelectCommand = Command
    DataAdatpter.Fill(DataSet)
    segunda-feira, 7 de dezembro de 2009 10:12
  • Gabriel,

    como vc tem se demonstrado um amigo fiel em me ajudar,

    vou tentar criar um projeto sem utilizar o assistente, escrevendo todo o código. Vc poderia me ajudar?

    Se puder, vou dizer o que quero.


    O programa deverá ter as seguintes caracteríticas:


    1. Banco de dados ACESS que armazene dados pessoais com foto
    2. realize busca por NOME, com os resultados expostos em uma listbox
    3. gere relatorios em e word e excel com os dados do registro
    4. imprima os relatorios
    5. realize a contagem dos valores iguais, tipo, o nome "paulo" existe em 10 registros.

    Por favor me diga o primeiro passo a se fazer.

    obrigado.

    Paulo
    segunda-feira, 7 de dezembro de 2009 18:20
  • Blz Paulo,
    Vamos por partes. Primeiro vamos fazer a parte mais fácil. Deixe a parte do campo com foto e do relatório para o final. Primeiro monta uma aplicação q consulta dados simples no banco. Dá uma olhada nestes dois artigos:
    http://www.startvbdotnet.com/ado/msaccess.aspx
    http://www.homeandlearn.co.uk/NET/nets12p4.html

    terça-feira, 8 de dezembro de 2009 15:01
  • Gabriel,

    desculpa, fiquei sem net por uns dias,

    cara, estou precisando urgentemente saber como relacionar tabelas, se nao, nao saio do começo de um programinha aqui, já li tudo quando foi artigo, se bem que nao tem muita coisa boa sobre o assunto. gostaria, se pudesse que voce me passasse, passo a passo.

    Faco o diagrama, porem quando vou relacionar (sql 2005) os relacionamentos nao me dao opcao de relacionar o clienteID da tabela pessoal com o clienteID da tabela Pedidos..

    OBrigado, desde já



    paulo.
    segunda-feira, 21 de dezembro de 2009 21:38
  • Paulo,
    Não entendi direito tua pergunta. Tu qr saber como criar chave estrangeira ou como fazer uma consulta sql com joins?
    terça-feira, 22 de dezembro de 2009 13:58
  • Gabriel,

    obrigado mais uma vez.

    É o seguinte, veja os passos que sigo e onde travo:

    1. crio a conexao Sql,
    2. crio o banco de dados "DADOS"
    3. crio as tabelas "PESSOAL" E "PRODUTIVIDADE"
    4. Defino as chaves primarias: "codfuncionario" e "codprodutividade", ambas como "int" e "identy = yes"
    5. crio o diagrama "RELACIONAMENTO"


    A partir daqui, quando vou criar o relacionamento, nao consigo. Tentei clicar no "codfuncionario" e arrastar para "nomeID", dai surge uma janela para escolher os relacionamentos, porém náo há a opcao de relacionar "PESSSOAL- codfuncionario" com "PRODUTIVIDADE-nomeID", para a tabela "produtividade"só há a opcao do campo "codprodutividade".

    Após isso, tambem preciso saber se ao clicar no botao salvar, automaticamente os dados sao salvos nas duas tabelas.

    Estou tentanto fazer tudo na unha, sem usar assistente.

    OBrigado


    Paulo.
    terça-feira, 22 de dezembro de 2009 15:12
  • Gabriel,


    outra duvida.

    Tenho:

    1. txtbusca.text
    2. btnbusca
    3. LISTA.listbox

    Preciso ao clicar no btnbusca, a LISTA.listbox seja preenchida com os resultados que possuem o parametro do txtbusca.text.

    Eu consigo carregar o LISTA.listbox com os dados da tabela, mas sem parametro do txtbusca.text. Veja ate onde caminhei:


    'quando clico no botao btnnome ele carrega a lista com todos os nomes da base de dados, preciso sabe como incluir um parametro no codigo

    Private

     

    Sub btnNome_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNome.Click

    carregaLista(LISTA,

    "select Nome from militares")

     

    End Sub


    obrigado

    terça-feira, 22 de dezembro de 2009 15:18
  • Bom dia Paulo

    Se entendi bem, tu tá tentando montar uma view (quando tu diz q tá criando o relacionamento), certo? Escreve ela na mão mesmo, como faz no SQL: Select <campos> from <tabela1>, <tabela2>, <tabelaN> where <condicoes de relacionamento> (no access é possivel fazer inner join, mas desta forma, com cross join, no acces é mais fácil)

    Quanto a segunda pergunta, tu quer montar uma consulta baseaad no q o usuário digitou na txtbusca, certo? Eu faria assim:

    carregaLista(LISTA,"select Nome from militares where Nome like '*" & txtbusca & "*'" )

    Falou


    quarta-feira, 23 de dezembro de 2009 12:07
  • Gabriel, bom dia.

    Amigo, obrigado pela ajuda, consegui realizar a busca, dei uma cochilada e nao consegui pensar no like.

    Bom, o problema é que se nao digitar o nome como está no banco de dados a pesquisa nao é feita por semelhanca. Como fazer que mesmo que o usuario digite duas letras, seja possível retornar os valores que as possuirem.

    Quanto a pergunta dos relacionamentos, o que quero é criar um relacionamento um-para-muitos. Tipo um militar realiza várias açoes em dias diferentes, por isso, preciso que para um militar da tabela PESSOAL, eu tenha vários registros de açoes na tabela PRODUTIVIDADE. Você disse do comando Select, mas eu quero é o Insert.

    Dá pra fazer tipo:

    INSERT INTO militares (campos) values (txtbox.text)
    INSERT INTO PRODUTIVIDADE (campos) values (txtbox.text)

    Mas como fazer o relacionamento?

    Dá uma dica ae.

    Grato,

    Paulo.
    quarta-feira, 23 de dezembro de 2009 18:39
  • Gabriel,

    bom dia.

    o que eu preciso é adaptar a rotina abaixo para uma rotina que utilize o acess


    Private Sub exibeDadosCliente(ByVal nome As String, ByVal sobrenome As String)
     
            ' abre a conexao
            connClientes.Open()
    
            ' cria um command para esta conexao
            Dim cmd As New OleDb.OleDbCommand("SELECT * FROM Clientes WHERE Nome=? AND Sobrenome=?", connClientes)     
    
            ' Cria uma consulta paremetrizada
            cmd.Parameters.Add(New OleDb.OleDbParameter("Nome", nome))
            cmd.Parameters.Add(New OleDb.OleDbParameter("Sobrenome", sobrenome))
    
            ' executa a consulta.
            Dim dr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.SingleRow)
    
            ' exibe o resultado nas caixas de texto
            If dr.HasRows Then
                dr.Read()
                txtNome.Text = dr.Item("Nome").ToString
                txtSobrenome.Text = dr.Item("Sobrenome").ToString
                txtEndereco.Text = dr.Item("Endereco").ToString
                txtCidade.Text = dr.Item("Cidade").ToString
                txtEstado.Text = dr.Item("Estado").ToString
                txtCep.Text = dr.Item("Cep").ToString
            Else
                'limpa as caixas de texto
                For Each ctl As Control In Me.Controls
                    If TypeOf ctl Is TextBox Then ctl.Text = ""
                Next ctl
            End If
    
            ' fecha a conexao
            connClientes.Close()
        End Sub


    dá uma força..

    Grato
    Paulo
    quinta-feira, 24 de dezembro de 2009 02:47
  • Bah,
    Tu usa parametros. Nunca usei parametros em uma consulta access, então não sei se é igual  ao SQL. E tu tá usando "Where nome =". Acho q o q tu precisa é "where nome LIKE '*" & <parametro> & "*'".
    Mas, como falei, nunca usei parametros para access, então eu faria assim:

    ' cria um command para esta conexao
    
    
    
    Dim cmd As New OleDb.OleDbCommand("SELECT * FROM Clientes WHERE Nome like '*" & txtNome.text & "*'
    AND Sobrenome like '*" & txtSobrenome & "*'", connClientes) 
    
    
    
     

    Neste caso não precisa das linhas q setam os parametros. E o resto continua igual.
    quinta-feira, 24 de dezembro de 2009 11:41
  • Ae Gabriel,
    valew.

    Cara é incrivel como algumas coisas passam despercebidas pela gente. É mais incrivel como algumas são tão simples, tão simples que nao conseguimos ver.
    Depois de muito lutar e ler...ler....ler...ler....ler e ler...
    Eu descobri, no caso do acesso em vez de usar * deve-se usar % para que todo texto que se enquadre no texto digitado seja validado.

    Cara, tô numa luta que só. Desde ontem estou pesquisando o seguinte:

    1. quero que ao selecionar um item em uma listbox, os campos do form Nome, endereco, fone etc. sejam preenchidos com os dados do item selecionado. Sei que tenho de recuperar ID do item, mas nao estou conseguindo no acess. Tentei o code:

    textID.text = lista.selectvalue

    Porém não dá nada, nem erro.

    Engraçado que fiz o mesmo esses dias em um projeto, só que numa tabela SQL e usando os assistentes e deu certo.

    Se puder, me dá uma força ae.

    Grato

    Paulo.
    quinta-feira, 24 de dezembro de 2009 13:37
  • Gabriel,

    eu consegui resolver em parte meu problema, pois usei o datasource para preencher e navegar nos registros, com a ajuda de uma combox.

    Bem, estou tentando ir tudo na unha, pra aprender mesmo, mas tá osso.

    Agora surgiu outro problema. Consegui realizar o comando INSERT, porém o DELETE e o UPDATE, nao tô conseguindo.

    Por favor, se puder, me ajude a estabelecer o parametro nos codes:

    cmd.CommandText =

    "UPDATE militares SET (NOME, ENDERECO, TELEFONE, FOTO)values( '" & txtNome.Text & "', '" & txtEnd.Text & "', '" & Txtfone.Text & "', '" & picfoto.Text & "' )"

    cmd.CommandText = "DELETE  FROM militares (NOME, ENDERECO, TELEFONE, FOTO)values( '" & txtNome.Text & "', '" & txtEnd.Text & "', '" & Txtfone.Text & "', '" & picfoto.Text & "' )"


    Só está faltando o parametro WHERE. Queria que o parametro fosse tipo WHERE NOME = txtnome.text

    GRATO

    PAULO

    quinta-feira, 24 de dezembro de 2009 17:30
  • quem tem a mesma dúvida, dá uma olhada em:

     

    www.jacobsamuel.no.comunidades.net 

     

     

    domingo, 2 de maio de 2010 22:29