Fórum Consulta com Data #381750

19/07/2010

0

Estou tentando fazer uma consulta com firebird utilizando data, mas está dando erro.     Quando faça a pesquisa pelo Edit vai   Eu digito no Edit '01/01/2010' ae funciona.   Se eu digitar: 01/01/2010 não vai   ds.atestado.sql.add('select atestado.idempresa, atestado.idatestado from atestado');   ds.atestado.sql.add('where atestado.idempresa =' + edit1.text     **********************************************************************   Se eu utilizar:   ds.atestado.sql.add('select atestado.idempresa, atestado.idatestado from atestado');   ds.atestado.sql.add('where atestado.idempresa =' + DataPick.Date   Ele não funciona!   e só aceita o formato de data mm/dd/yyyy
Paulo Andrade

Paulo Andrade

Responder

Posts

19/07/2010

Emerson Nascimento

recomendo a não concatenar a data. passe-a como parâmetro.

ds.atestado.sql.add('select atestado.idempresa, atestado.idatestado from atestado');
ds.atestado.sql.add('where atestado.idempresa = :empresa and atestado.data = :data')
atestado.params.parambyname(':empresa').asinteger := numerodaempresa;
atestado.params.parambyname(':data').asdate := datadesejada;
atestado.open;

Responder

Gostei + 0

29/07/2010

Paulo Andrade

sqlAtestados.SQL.Clear; sqlAtestados.SQL.Add('select ATESTADO.IDEMPRESA, ATESTADO.IDATESTADO, ATESTADO.DATAEXAME'); sqlAtestados.SQL.Add('from ATESTADO'); sqlAtestados.SQL.Add('where ATESTADO.DATAEXAME = :dataexame'); sqlAtestados.SQL.Add('and ATESTADO.IDEMPRESA = :idempresa'); sqlAtestados.Open; sqlAtestados.ParamByName(':idempresa').AsInteger := StrToInt(DBEditIdEmpresa.Text); sqlAtestados.ParamByName(':dataexame').AsDate := DTPicInicial.Date; 'sqlAtestados: Parameter ':idempresa' not found' Diz q n existe os parâmentros, não encontrado!
Responder

Gostei + 0

30/07/2010

Emerson Nascimento

sqlAtestados.SQL.Clear;
sqlAtestados.SQL.Add('select ATESTADO.IDEMPRESA, ATESTADO.IDATESTADO, ATESTADO.DATAEXAME');
sqlAtestados.SQL.Add('from ATESTADO');
sqlAtestados.SQL.Add('where ATESTADO.DATAEXAME = :dataexame');
sqlAtestados.SQL.Add('and ATESTADO.IDEMPRESA = :idempresa');
sqlAtestados.Open;  <---- abrindo ANTES de preencher os parâmetros. errado!
sqlAtestados.ParamByName(':idempresa').AsInteger := StrToInt(DBEditIdEmpresa.Text); sqlAtestados.ParamByName(':dataexame').AsDate := DTPicInicial.Date;

'sqlAtestados: Parameter ':idempresa' not found' Diz q n existe os parâmentros, não encontrado!


vamos prestar atenção nos exemplos passados... você está abrindo a query ANTES de preencher os parâmetros. no exemplo passado a query deve ser aberta DEPOIS de preencher os parâmetros.

sqlAtestados.Close;
sqlAtestados.SQL.Clear;
sqlAtestados.SQL.Add('select ATESTADO.IDEMPRESA, ATESTADO.IDATESTADO, ATESTADO.DATAEXAME');
sqlAtestados.SQL.Add('from ATESTADO');
sqlAtestados.SQL.Add('where ATESTADO.DATAEXAME = :dataexame');
sqlAtestados.SQL.Add('and ATESTADO.IDEMPRESA = :idempresa');
sqlAtestados.ParamByName('idempresa').AsInteger := StrToInt(DBEditIdEmpresa.Text); sqlAtestados.ParamByName('dataexame').AsDate := DTPicInicial.Date;
sqlAtestados.Open;  <--- abrindo após preencher os parâmetros. correto.

uma outra coisa: ao criar o parâmetro você usa os dois pontos (:), mas no momento de usar o parâmetro ele não deve ser colocado.


Responder

Gostei + 0

15/08/2010

Carlos Mazzi

ou seja com aspas funciona e sem nao é isso mesmo?
Responder

Gostei + 0

17/08/2010

Edinei Colli

  Utilize o método QuotedStr. Com isso se no edit você informar 01/01/2010 o método vai retornar '01/01/2010'.   Errado:  
ds.atestado.sql.add('where atestado.idempresa =' + Edit1.text)
  Correto:
 
ds.atestado.sql.add('where atestado.idempresa =' + QuotedStr(Edit1.text))
  Espero ter ajudado.
Responder

Gostei + 0

18/08/2010

Emerson Nascimento

  Utilize o método QuotedStr. Com isso se no edit você informar 01/01/2010 o método vai retornar '01/01/2010'.   Errado:  
ds.atestado.sql.add('where atestado.idempresa =' + Edit1.text)
  Correto:
 
ds.atestado.sql.add('where atestado.idempresa =' + QuotedStr(Edit1.text))
  Espero ter ajudado.


DESCULPE, mas está tudo errado. um ID é geralmente um inteiro e, nesse caso, não se deve usar o QuotedStr().

quanto a data:
imagine que eu informei no edit: 08/01/2010
quando eu passar pro banco de dados esse valor '08/01/2010', o banco vai entender o que? oito de janeiro de 2010 ou primeiro de agosto de 2010?

por isso não se deve passar uma data concatenada ao comando, e sim por parâmetro, porque o mecanismo de acesso ao banco de dados faz a conversão da informação do parâmetro para formato correto.





Responder

Gostei + 0

19/08/2010

Edinei Colli

  Utilize o método QuotedStr. Com isso se no edit você informar 01/01/2010 o método vai retornar '01/01/2010'.   Errado:  
ds.atestado.sql.add('where atestado.idempresa =' + Edit1.text)
  Correto:
 
ds.atestado.sql.add('where atestado.idempresa =' + QuotedStr(Edit1.text))
  Espero ter ajudado.


DESCULPE, mas está tudo errado. um ID é geralmente um inteiro e, nesse caso, não se deve usar o QuotedStr().

quanto a data:
imagine que eu informei no edit: 08/01/2010
quando eu passar pro banco de dados esse valor '08/01/2010', o banco vai entender o que? oito de janeiro de 2010 ou primeiro de agosto de 2010?

por isso não se deve passar uma data concatenada ao comando, e sim por parâmetro, porque o mecanismo de acesso ao banco de dados faz a conversão da informação do parâmetro para formato correto.
  Realmene Emerson não li com atenção, somente me ative as aspas, por isso indiquei o método ao Paulo. O que realmente ficou dificil de entender foi o exemplo passado pelo Paulo, onde o idempresa é campo data.   Paulo siga o exemplo do Emerson que irá funcionar corretamente, passando como parâmetro e utilizando o StrToDate.
Responder

Gostei + 0

21/08/2010

Paulo Andrade

»»» Código ««« sqlAtestados.Close;
sqlAtestados.SQL.Clear;
sqlAtestados.SQL.Add('select ATESTADO.IDATESTADO, ATESTADO.IDEMPRESA, ATESTADO.IDPASCIENTE, ATESTADO.DATAEXAME, ATESTADO.STATUS, ATESTADO.CIDADE ');
sqlAtestados.SQL.Add('from ATESTADO');
sqlAtestados.SQL.Add('where ATESTADO.DATAEXAME =' + QuotedStr(Edit1.Text));
sqlAtestados.SQL.Add('and ATESTADO.IDEMPRESA =' + QuotedStr(DBEditIdEmpresa.Text));
sqlAtestados.Open;   »»» Fim «««   Pessoal, seguindo as dicas acima, conseguí chegar a este código.   Se eu digitar a data 05/26/2010 (formato: mm/dd/yyy), funciona. Se eu digitar 26/05/2010 (formato: dd/mm/yyyy) aparece o seguinte erro:   conversion error from string "26/05/2010".     Obrigado pela colaboração...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar