Jump to content

Percorrer base de dados


sr._neves

Recommended Posts

Indexa por um campo que tenha a data do compromisso; as datas anteriores ficarão como primeiros registos. Basta percorrer os registos até que a data de compromisso do registo seja posterior à data do sistema. Ou se o acesso fôr por SQL usa o campo de data do compromisso numa cláusula ORDER BY. Depois apaga os registos de compromissos expirados.

Link to comment
Share on other sites

A ideia do bsccara é percorreres o dataset para pesquisares a base de dados.

Não dá pra te dar o código completo, pois não sei exactamente como está desse lado, mas é algo do género:

for i:=0 to dsBDados.recordcount - 1 do
  begin
     dsBDados.RecNo:=i;
     if DaysBetween(StrToDate(dsBDados.FieldByName('Data').AsString),Date)<2
        then ShowMessage(dsBDados.FieldByName('Descrição').AsString + ' a concluir em ' + dsBDados.FieldByName('Data').AsString);
  end;

Algo deste genero...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Não é erro nenhum, é só mais uma maneira de "esfolar o gato"!

Eu é que gosto muito do FOR! 😄

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

A ideia do bsccara é percorreres o dataset para pesquisares a base de dados.

Não dá pra te dar o código completo, pois não sei exactamente como está desse lado, mas é algo do género:

for i:=0 to dsBDados.recordcount - 1 do
  begin
  dsBDados.RecNo:=i;
  if DaysBetween(StrToDate(dsBDados.FieldByName('Data').AsString),Date)<2
	 then ShowMessage(dsBDados.FieldByName('Descrição').AsString + ' a concluir em ' + dsBDados.FieldByName('Data').AsString);
  end;

Algo deste genero...

Estou a ver, mas fiquei aqui um bocado confuso com esta parte do codigo:

if DaysBetween(StrToDate(dsBDados.FieldByName('Data').AsString),Date)<2

podias explicar-me melhor 😁

Link to comment
Share on other sites

heheheh

DaysBetween é uma função que devolve quandos dias há de diferença entre as duas datas passadas por parametro (no exemplo, a data da base de dados e a data actual).

Assim, ele iria alertar caso faltassem menos de 2 dias para atingir aquela data.

Isto foi só um exemplo, nesse if podes usar a comparação que achares mais adequada. Se a ideia é ele avisar só se as datas forem iguais, bastava uma comparação directa ( = ), depois é claro de estarem ambos os lados convertidos num mesmo tipo de dados (Ex. if StrToDate(dsBDados.FieldByName('Data').AsString)=Date then ...)

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Estou a fazer assim :

while not ds_compromissos.DataSet.Eof do begin
  begin
	  if (ds_compromissos.DataSet.FieldByName('data')=date) and (ds_compromissos.DataSet.FieldByName('hora')=time)
			 then ShowMessage(ds_compromissos.DataSet.FieldByName('assunto').AsString);
  end;
end;

mas dá-me erro: [DCC Error] u_principal.pas(579): E2015 Operator not applicable to this operand type

Sugestões ?

Edited by sr._neves
Link to comment
Share on other sites

Refiro-me ao componente usado para a propria base de dados.

É um TTable, TDataSet ou outro?

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

O RecordCount e o RecNo são propriedades dos DataSet's e não dos DataSource's.

Por isso, é necessário uma pequena alteração ao que eu tinha falado:

ds_compromissos.DataSet.RecordCount

e

ds_compromissos.DataSet.RecNo
Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

O RecordCount e o RecNo são propriedades dos DataSet's e não dos DataSource's.

Por isso, é necessário uma pequena alteração ao que eu tinha falado:

ds_compromissos.DataSet.RecordCount

e

ds_compromissos.DataSet.RecNo

Sim , mas isso era se eu tivesse a correr a base de dados com um for certo ?

O erro está no if:


if (ds_compromissos.DataSet.FieldByName('data')=date) and (ds_compromissos.DataSet.FieldByName('hora')=time)
                then ShowMessage(ds_compromissos.DataSet.FieldByName('assunto').AsString);

Ele não me deixa é fazer este If

Link to comment
Share on other sites

Está-te a faltar o tipo de dados com que ele devolve a data...

Algo tipo:

if (ds_compromissos.DataSet.FieldByName('data').AsString=DateToStr(date)) and (ds_compromissos.DataSet.FieldByName('hora').AsString=TimeToStr(time))
                then ShowMessage(ds_compromissos.DataSet.FieldByName('assunto').AsString);

É preciso indicar o tipo de saida de dados (no caso, .AsString para o valor devolvido ser do tipo String) e também converter um dos valores para que tenham os dois o mesmo tipo. No caso, usei o DateToStr e o TimeToStr para converter a data e hora no formato String.

A proposito, convém ver se a data e hora na base de dados estão no mesmo formato da data e hora devolvidas pelo Delphi.

Se não estiverem, tem de se converter.

Exemplo:

Se A data na base de dados estiver AAAA/MM/DD e o Delphi está a devolver DD-MM-AAAA, é preciso corrigir...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

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
×
×
  • Create New...

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.