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

joven

Filtro

Recommended Posts

joven

Boa tarde,

Estou a experimentar fazer um filtro pra uma db em access.

a DB tem só uma tabela com os campos valor e data.

Ao inserir na data escreve a data e hora.

gostava de saber se dá pra fazer um filtro em que devolvia os obj daquele dia. é possivel?

leitura da BD:

valores - data

29 - 12-05-2010 14:42:14

24 - 12-05-2010 14:42:21

16 - 12-05-2010 16:51:40

string que testei para fazer a procura:

strSQL = "SELECT * FROM Table1 WHERE data=" + str2[0];

estou a experimentar em C#

Obrigado

Share this post


Link to post
Share on other sites
M6

Sim é.

Usas o operador between e incluis a data com a hora de 00:00:00 até 23:59:59.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
joven

boas

consegui fazer doutra maneira

strSQL = "SELECT * FROM Table1 WHERE data LIKE '" + str2[0] + "%'";

agora tenho outra duvida

será possivel que ele devolver dados que verifico dois campos?

Obrigado

Share this post


Link to post
Share on other sites
M6

Não percebi a pergunta.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
joven

a intenção é devolver uma linha da tabela, aonde peço para verificar dois valores que insiro no comando.

tipo "SELECT * FROM Table1 WHERE data = '" + var1 + "' AND var = '" + var2 + "'"

mas n funciona  :wallbash:

Share this post


Link to post
Share on other sites
M6

A resposta à tua pergunta anterior é sim, é possível. Podes colocar quantos filtros entenderes.

Se não funciona lê a mensagem de erro e corrige de acordo com a mesma.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
joven

boas já consegui por a funcionar, era a culpa das ', mas agora estou outra vez com problemas.

estou a utilizar a seguinte string

string strSQL = "SELECT id FROM TabGota WHERE Km = " 
+ dataGridView1[1, dataGridView1.CurrentRow.Index].Value.ToString() +
" AND LGasoleo = " + dataGridView1[2, dataGridView1.CurrentRow.Index].Value.ToString();

e está-me a dar o seguinte erro.

errogb.jpg

Km é um inteiro e Lgasoleo é Decimal.

Alguem tem alguma ideia?

Obrigado

Share this post


Link to post
Share on other sites
M6

Os valores decimais nas bases de dados usam sempre . como separador decimal e tu tens uma vírgula.

Se leres a mensagem de erro mostra-te que tens um erro de sintaxe precisamente devido a uma virgula.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
joven

boas

agora estou com outro erro ainda não cosegui resolver.

erro:

errorlf.jpg

esta é a string que estou a utilizar

strSQL = "UPDATE TabGota SET Data='" + DatePick.Value.ToShortDateString() + "', Km='" + txtKm.Text + "',
LGasoleo='" + txtLitros.Text + "', PGasoleo='" + txtPago.Text + "', PLitro='" + txtPLitro.Text + "', Desc='" + 
txtDesconto.Text + "', Dist='" + txtDistr.Text + "', Local='" + txtLocal.Text + "' WHERE id=" + id;

O que acham?

Obrigado

Share this post


Link to post
Share on other sites
M6

A mensagem de erro é bem explicita: tens um erro de sintaxe no teu update.

Faz popup do comando que estás a tentar enviar e vê qual é o erro, é muito mais simples do que detectá-lo no meio do código.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
joven

boas

já estou a ficar doido porque não consigo encontrar o erro  :wallbash:

private void btOk_Click(object sender, EventArgs e)
        {
            OleDbCommand command;
            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0; DATA Source=" + db);

            string strSQL = string.Empty;

            strSQL = "UPDATE TabGota SET Data='" + DatePick.Value.ToShortDateString() + "', Km='" + txtKm.Text + "', LGasoleo='" + txtLitros.Text + "', PGasoleo='" + txtPago.Text + "', PLitro='" + txtPLitro.Text + "', Desc='" + txtDesconto.Text + "', Dist='" + txtDistr.Text + "', Local='" + txtLocal.Text + "' WHERE id=" + id;
            MessageBox.Show(strSQL, "", MessageBoxButtons.OK);

            if (strSQL != "UPDATE TabGota SET WHERE id=" + id)
            {
                try
                {
                    command = new OleDbCommand(strSQL, conn);
                    conn.Open();
                    command.ExecuteNonQuery();
                }
                catch (Exception erro)
                {
                    MessageBox.Show("Erro: \n" + erro.ToString(), "Erro!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    conn.Close();
                    MessageBox.Show("Os dados foram alterados!!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
            }
            else
            {
                MessageBox.Show("Os dados não foram alterados!!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

O que é mais estranho é que se tirar o "Desc" e "Local" já funciona  :wallbash:.

na messagebox dá a string certa ;)

msgbox.jpg

Se o problema fosse da "," dava outro tipo de erro.

Deixo a imagem da tabela:

gota2.jpg

Alguma opnião?

Obrigado

Share this post


Link to post
Share on other sites
M6

Os  Number e Currency não necessitam de ', mas o SQL Server é bastante permissivo quanto a isso.

Já não é permissivo quanto ao separador decimal.

Nos Number e Currency estás a enviar , como separador e deves usar ..


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

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.