Jump to content

C# E Db Em Access


dare devil
 Share

Recommended Posts

Boas

Eu tenho uma aplicação feita em C# k me permite gerir uma base de dados em Access, tenho o k preciso a funcionar, agora a minha duvida era saber se é possivel fazer algo do genero de um search para que ele possa procurar algum numa consulta k eu tenha previamente feita.

Como por exemplo tenho uma consulta k mostra o tipo, o tamanho, a marca, a cor, etc dos tennis k tenho e se quisesse procura pela marca se era possivel fazer algo desse genero.

Agradecia kkl ajuda k fosse possivel.

Obrigado

Cumprimentos

Link to comment
Share on other sites

Desculpa o off-topic, mas quando li o título do tópico julguei que querias fazer música em access (C# - Dó Sustenido; Db - Ré Bemol; ambos são a "mesma" nota musical). :P

Tens alguma query definida no access, ou é tudo feito através da aplicação? Podes criar essa query na DB e usar como botão na aplicação, ou então colocar mesmo o comando em C# para fazer essa query conforme o que colocares na caixa de texto...

Link to comment
Share on other sites

Não estou a perceber bem o que queres.

Mas tipo se já tens o código feito é básico.

Basta fazeres o Query á base de dados a procurar pela "marca" e manda o resultado do Query para um Dataset ou um Datatable.

Depois é só ler o Dataset,

Depois poses usar pro exemplo o Foreach para percorreres os dados todos do Dataset e manda-los para algum lado. Tipo uma ListView.

Link to comment
Share on other sites

Não estou a perceber bem o que queres.

Mas tipo se já tens o código feito é básico.

Basta fazeres o Query á base de dados a procurar pela "marca" e manda o resultado do Query para um Dataset ou um Datatable.

Depois é só ler o Dataset,

Depois poses usar pro exemplo o Foreach para percorreres os dados todos do Dataset e manda-los para algum lado. Tipo uma ListView.

So k o meu problema é k eu n tou a conseguir fazer a query à base dados e manda-la ou para um DataSet ou DataTable e n sei como hei-de usar o Foreach, eu tenho querys k mostram so os dados e funcionam so k se fizer uma query com criterio no access, o C# n a reconhece :s

Link to comment
Share on other sites

Não estou a perceber bem o que queres.

Mas tipo se já tens o código feito é básico.

Basta fazeres o Query á base de dados a procurar pela "marca" e manda o resultado do Query para um Dataset ou um Datatable.

Depois é só ler o Dataset,

Depois poses usar pro exemplo o Foreach para percorreres os dados todos do Dataset e manda-los para algum lado. Tipo uma ListView.

So k o meu problema é k eu n tou a conseguir fazer a query à base dados e manda-la ou para um DataSet ou DataTable e n sei como hei-de usar o Foreach, eu tenho querys k mostram so os dados e funcionam so k se fizer uma query com criterio no access, o C# n a reconhece :s

Agora não tenho tempo, mas mais logo explico-te +/- isso.

Link to comment
Share on other sites

Bem se queres fazer um pequeno programa em C# que te ligue a uma BD access fazes o seguinte:

Crias uma class de conecção à BD, fica mais organizado assim.

Vou-te colocar aqui algum código de um pequeno programa que tiev de fazer á uns tempos com ligação a Access.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Data;

namespace qualquer_coisa
{
    class conectar
    {

public void db_insert_dados(string query)
        {
            OleDbConnection conn = new OleDbConnection();
            string connStr;
            connStr = "Provider=Microsoft.Jet.OLEDB.4.0;";
            connStr += @"Data Source= c:\\dados.mdb";
            conn.ConnectionString = connStr;
            conn.Open();

            OleDbCommand cmd = new OleDbCommand();

            cmd = new OleDbCommand(query, conn);
            cmd.ExecuteNonQuery();
            conn.Close();
        }


public DataTable db_select_dados(string query)
        {
            // Inicia ligação à Base de Dados Access
            OleDbConnection conn = new OleDbConnection();
            string connStr;
            connStr = "Provider=Microsoft.Jet.OLEDB.4.0;";
            connStr += @"Data Source= c:\\dados.mdb";
            conn.ConnectionString = connStr;

            OleDbDataAdapter da = new OleDbDataAdapter();


            OleDbCommand dbCommand = new OleDbCommand();
            dbCommand.CommandText = query;
            dbCommand.Connection = conn;

            DataSet ds = new DataSet();

            // Abre LIgação

            conn.Open();
            da.SelectCommand = dbCommand;

            try
            {
                // Preenche DataSet
                da.Fill(ds);

            }
            catch (Exception oBug)
            {
                conn.Close();
                MessageBox.Show(oBug.Message);
            }

            DataTable dt = ds.Tables[0];
            conn.Close();
            return dt;



        }

    }
}[/code] Como podes ver tens duas funções nesta classe. Uma para as Query Select. E outra para os outros Querys... Os Insert, Update, Delete etc. Agora na tua class principal, crias lá o Botãozinho onde vais colocar o código do que queres fazer. Tipo Isto:
[code]//Faz a leitura do Numero OF
            string query = "select [OF] from config where id = 1";
            conectar con = new conectar();
            DataTable dt = con.db_select_dados(query);
            string of = dt.Rows[0][0].ToString();
Se reparares fiz uma query à BD. E mandei os resultados para uma datatable. Depois mandei o valor que está posição [0][0] para uma string. Tão simples como isso ;) Se quiseres por exemplo mandar todos os valores da Datatable para uma listview. crias uma Listview no teu Form e depois fazes o seguinte: Por baixo do Public Partial Class defines:
private ListViewItem li;
e depois onde quiseres o seguinte:
foreach (DataRow dr in dt.Rows)
            {
                li = ListView_Marcacao.Items.Add(dr[1].ToString());
                li.SubItems.Add(dr[2].ToString());
                li.SubItems.Add(DateTime.Parse(dr[3].ToString()).ToString("dd-MM-yyyy"));
                li.SubItems.Add(dr[4].ToString());
                li.SubItems.Add(dr[5].ToString());
                li.SubItems.Add(dr[6].ToString());
                li.SubItems.Add(dr[7].ToString());
                li.SubItems.Add(dr[8].ToString());
                li.SubItems.Add(dr[9].ToString());
                li.SubItems.Add(dr[10].ToString());

            }[/code]

Como podes ver, neste caso tinha 10 colunas. Conforme o numero de colunas que tiveres diminuis ou aumentas os li.SubItems.Add

Depois podes brincar com isso de varias maneiras.

Isto é o básico. Alguma duvida depois apita ;)

Este programinha que nem era muito grande, acabou por custar cerca de 70 mil linhas de código... eheh

Link to comment
Share on other sites

Atençao a uma coisa... não partilhe ligaçoes ah bd, tem atençao a fazeres o close da tua ligaçao e sempre q fores fazer uma nova verificar se a ligaçao esta aberta ou n. toma atençao a uma outra coisa, o c# permite varios tipos d comandos dependendo do q querias "montar".

Link to comment
Share on other sites

Pelo o k percebi, Revenge, o k esse codigo vai fazer é permitir-me ver o k ta na base de dados e escreve nela. Essa parte ja consigo fazer mas tenho a mostrar numa listbox, o k me falta fazer agora é algo tipo um search. Em k eu escrevo algo numa textbox, tipo a marca de um tenis, e ao carregar num botao ele vai procurar na consulta k tou a usar e mostra os campos tds da consulta mas so os da marca pela a qual procurei.

Link to comment
Share on other sites

Pelo o k percebi, Revenge, o k esse codigo vai fazer é permitir-me ver o k ta na base de dados e escreve nela. Essa parte ja consigo fazer mas tenho a mostrar numa listbox, o k me falta fazer agora é algo tipo um search. Em k eu escrevo algo numa textbox, tipo a marca de um tenis, e ao carregar num botao ele vai procurar na consulta k tou a usar e mostra os campos tds da consulta mas so os da marca pela a qual procurei.

Isso é simples, mudas a query que fazes à BD, do estilo:

query = "select * from dados where tenis like ' + textbox.text + "'";

Carregas no botão, ele faz esse query à BD e pronto, retorna-te todos os ténis que tens.

Tens outra maneira que é capaz de ser mais lenta mas funciona na mesma.

Fazes o tal Foreach que mostrei acima. Mas metes uma condição, se aquela linha for igual a tenis, faz o add à listview, se não for igual, não faz.

E assim na listview apenas te vão aparecer os Tenis.

Link to comment
Share on other sites

Desculpa lá... Mas tb vou mandar a minha posta de pescada!

Por exemplo(em SQL, que acess nunca trabalhei):

SELECT * FROM Consulta WHERE tennis = "nike tiempo" mandas isto para um dataset e depois é só imprimir a informação.. Em sql isto não tem nada que saber, mas pode ser que em acess seja diferente, não sei!

Link to comment
Share on other sites

Desculpa lá... Mas tb vou mandar a minha posta de pescada!

Por exemplo(em SQL, que acess nunca trabalhei):

SELECT * FROM Consulta WHERE tennis = "nike tiempo" mandas isto para um dataset e depois é só imprimir a informação.. Em sql isto não tem nada que saber, mas pode ser que em acess seja diferente, não sei!

É praticamente igual, tem apenas algumas diferenças. Em access em algumas situações tens de colocar o nome do campo entre [] na query. E existe algumas funções que não suporta... Tipo inner joins ou outer joins, entre outras.

Na tua query convinha trocares ai o " por ' ehe ;)

Link to comment
Share on other sites

Desculpa lá... Mas tb vou mandar a minha posta de pescada!

Por exemplo(em SQL, que acess nunca trabalhei):

SELECT * FROM Consulta WHERE tennis = 'nike tiempo'" mandas isto para um dataset e depois é só imprimir a informação.. Em sql isto não tem nada que saber, mas pode ser que em acess seja diferente, não sei!

É praticamente igual, tem apenas algumas diferenças. Em access em algumas situações tens de colocar o nome do campo entre [] na query. E existe algumas funções que não suporta... Tipo inner joins ou outer joins, entre outras.

Na tua query convinha trocares ai o " por ' ehe ;)

Ah sim lol.... Aquilo como está não funciona como é óbvio...

Era mais ou menos tipo isto:

String connStr = "data source=\\My Documents\\bdlocal.sdf";

using(SqlCeConnection conn = new SqlCeConnection(connStr))

{

conn.Open();

//Carregar as tabelas para o DataAdapter

String dmlInfoUtilizador = "SELECT * FROM Consulta WHERE tennis = 'nike tiempo'"; //Em vez de asterisco metes as tabelas que queres

daAgenda = new SqlCeDataAdapter();

dataset = new DataSet();

//Do DataAdapter para o DataSet

daAgenda.SelectCommand = new SqlCeCommand(dmlInfoUtilizador, conn);

daAgenda.Fill(dataset,"O que quiseres");

//Fazes a parte do dataadapter para as restantes tabelas

dataset.AcceptChanges();

daAgenda.Dispose();

conn.Close();

}

Depois já tens as cenas dentro do dataset é só corre-lo.... E imprimi-lo em vez de estares a imprimir directamente do select....que tb dá, mas tem outros truques e não encontrei o cód que já fiz para isso! Para além de quantos menos acessos fizeres à BD, mais rápido é o programa!

Edited by Green Hawk
Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

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.