Socorro Preciso de Ajuda! - Principiante

Delphi

01/02/2003

Gente tenho algumas dúvidas e queria que me ajudassem...

1°: Tenho um sql assim :

query1.sql.clear;
query1.sql.add(´select * from controle where pago = Sim and Data =´ + edit2.Text);
query1.execSql;

Só que dá este erro:

General SQL error: Parâmetros insuficientes. Eram esperados 2.

2°: Fiz um relatório em Quickreport que pega a hora de uma determinada tabela em access, mas ao invés de aparecer só a hora, como cadastrado no banco, aparece a hora e uma data estranha..assim..

Hora
30/12/99 16:22:30
30/12/99 09:56:15

Se puderem me ajudar....Agradeço desde já... :lol:


Elecrim

Elecrim

Curtidas 0

Respostas

Ildefonso

Ildefonso

01/02/2003

Olá, Elecrim.

Quando trabalhamos com datas, antes de mais nada, devemos lembrar que o padrão dos bancos de dados é reconhecer o formato americano: #MM/DD/YYYY HH:NN .

Além disso, como foi mostrado, você deve incluir um delimitador, que no caso é o símbolo grade ( ).

Para garantir uma data coerente, o correto é fazer a consistência do campo que recebe o valor do usuário...
...
procedure TfrmPesquisa.btAbreSQLClick(Sender: TObject);
var
  dt: TTimeDate;
begin
  try
    dt := StrToDateTime(edData.Text);
  except
    Application.MessageBox(´Formato errado para data´, ´Atenção´, MB_ICONWARNING);
    Exit;
  end;

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add( ´SELECT * FROM Controle WHERE (Pago = Yes) And ´ +
                  ´(DataLancmto = ´ + FormatDateTime(´mm/dd/yyyy´, dt) + ´);´ );
  Query1.Open;
end;

Note três coisas importantes:[list:fe3ae15725][*:fe3ae15725]O controle de erro ao verificar a data. Dentro do Delphi, se houver erro e conforme a configuração de mensagens, você pode receber um alerta: clique em continuar para o programa se recuperar... mas quando o programa está rodando sozinho, nada acontecerá de anormal a não ser o aparecimento da mensagem programada.
[*:fe3ae15725]Se [Pago] é um campo lógico, você deve colocar o valor YES ou TRUE, e não em português como vemos quando criamos interativamente uma consulta no Access.
[*:fe3ae15725]Os bancos de dados podem acreditar, em especial o Access e MS-SQL Server, que o nome ´Data´ é uma [b:fe3ae15725]propriedade[/b:fe3ae15725] e não um identificador de usuário... evite este nome completanto com algo significativo: DataLancmto, DataPagto, DataOrigem, DataZero, etc.[/list:u:fe3ae15725]

Finalmente, para mostrar a data no valor correto, você deve formatar o o display da hora, pois o seu modo de armazenamento inclui, sempre, a data. Quando você atribui Now() ou Agora() ou Time(), você receberá também, além da hora, a data corrente ou uma data padrão de início, que é 30/12/1899.

Para fazer o que deseja, use um componente que tenha a propriedade [b:fe3ae15725]DisplayFormat[/b:fe3ae15725] ou [b:fe3ae15725]MaskEdit[/b:fe3ae15725], para mostrar apenas os dados que precisa.

Bom trabalho. 8)


GOSTEI 0
Dor_poa

Dor_poa

01/02/2003




GOSTEI 0
POSTAR