Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Como Fazer Select


José Luiz

Pergunta

Preciso fazer um select, com três possibilidades:

( Arquivo Paradox com Delphi 7 )

1 ) Somente Cheques ainda não depositados ( Campo DEP_EM em branco ).

2 ) Somente cheques já depositados ( Campo DEP_EM em branco ).

3 ) Todos os Cheques.

Em todos os casos, o select deve permitir selecionar um intervalo de datas.

No 2º e no 3º casos o select funcionou, mas no 1º retorna em branco.

a seguir as formas que estou utilizando.

Query1.Close;

Query1.SQL.Clear;

Query1.SQL.Add ( 'Select * from REC_CHEQUES' );

if RadioButton1.Checked = True then begin

Query1.SQL.Add ( 'where DEP_EM = :@mQUAIS ) and ( DATA >= :@mDATA_INI ) and ( DATA <= :@mDATA_FIN )' );

Query1.ParamByName ( '@mQUAIS' ).value := '';

Query1.ParamByName ( '@mDATA_INI').value := StrToDate ( Edit1.Text );

Query1.ParamByName ( '@mDATA_FIN').value := StrToDate ( Edit2.Text );

end;

if RadioButton2.Checked = True then begin

Query1.SQL.Add ( 'where DEP_EM > :@mQUAIS ) and ( DATA >= :@mDATA_INI ) and ( DATA <= :@mDATA_FIN )' );

Query1.ParamByName ( '@mQUAIS' ).value := StrToDate ( '01/01/2000' );

Query1.ParamByName ( '@mDATA_INI').value := StrToDate ( Edit1.Text );

Query1.ParamByName ( '@mDATA_FIN').value := StrToDate ( Edit2.Text );

end;

if RadioButton3.Checked = True then begin

Query1.SQL.Add ( 'where ( DATA >= :@mDATA_INI ) and ( DATA <= :@mDATA_FIN )' );

Query1.ParamByName ( '@mDATA_INI').value := StrToDate ( Edit1.Text );

Query1.ParamByName ( '@mDATA_FIN').value := StrToDate ( Edit2.Text );

end;

Query1.SQL.Add ( 'order by DATA' );

Query1.Prepare;

Query1.Open;

IMPRIME.QuickRep1.Preview;

No primeiro caso já tentei outras formas de verificação, como por exemplo se a data é anterior a 01/01/2000, mas nehuma das formas testadas funcionou.

No segundo caso, se houver um erro de digitação e for colocada uma data anterior a 01/01/2000, o registro será considerado como pendente, e portanto será impresso. Neste caso a forma correta seria verificar se o campo não está vazio, o que também não consegui fazer.

Agradeço antecipadamente.

José Luiz.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

o problema é na passagem do parametro... deixe um espaço entre as aspas

if RadioButton1.Checked = True then begin

Query1.SQL.Add ( 'where DEP_EM = :@mQUAIS ) and ( DATA >= :@mDATA_INI ) and ( DATA <= :@mDATA_FIN )' );

Query1.ParamByName ( '@mQUAIS' ).value := ' ';

Query1.ParamByName ( '@mDATA_INI').value := StrToDate ( Edit1.Text );

Query1.ParamByName ( '@mDATA_FIN').value := StrToDate ( Edit2.Text );

end;

se tiver data em branco voce pode tentar

isnull(@dtInicial)

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, obrigado por sua pronta resposta, como sempre.

O campo DEP_EM é um campo data, portanto quando utilizo a expressão

Query1.ParamByName ( '@mQUAIS' ).value := ' ' ; ( com espaço )

recebo a mensagem de erro : Type mismatch in expression.

Quanto a sua sugestão de utilizar isnull, não entendi como colocá-lo na expressão.

Um abraço,

José Luiz

Link para o comentário
Compartilhar em outros sites

  • 0
Query1.ParamByName ( '@mQUAIS' ).value := ' ' ; ( com espaço )

recebo a mensagem de erro : Type mismatch in expression.

Tipo incompativel ... se o campo é data então voce pode usar

Query1.ParamByName ( '@mQUAIS' ).value := strtodate(' / / '); //....=>( '--/--/----'); veja os espaços

Quanto a sua sugestão de utilizar isnull, não entendi como colocá-lo na expressão.

veja

http://forum.imasters.com.br/index.php?/to...-eis-a-questao/

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Jhonas.

Quando utilizei a expressão ( que eu já tinha tentado anteriormente )

Query1.SQL.Add ( 'where ( DEP_EM = :@mQUAIS ) and ( DATA >= :@mDATA_INI ) and ( DATA <= :@mDATA_FIN )' );

Query1.ParamByName ( '@mQUAIS' ).value := strtodate ( ' / / ' ); //....=>( '--/--/----'); veja os espaços

retorna : AGENDA.EXE raised exception class EConvertError with message " / / " is not a valid date ( mesmo deixando os espaços correspondentes)

Tentei então a segunda opção, ou seja

Query1.SQL.Add ( 'where ( DEP_EM is null ) and ( DATA >= :@mDATA_INI ) and ( DATA <= :@mDATA_FIN )' );

Query1.ParamByName ( '@mDATA_INI').value := StrToDate ( Edit1.Text ) ;

Query1.ParamByName ( '@mDATA_FIN').value := StrToDate ( Edit2.Text ) ;

e funcionou perfeitamente.

Mais uma vez obrigado,

José Luiz.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...