Consulta com Data
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
Curtidas 0
Respostas
Emerson Nascimento
19/07/2010
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;
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;
GOSTEI 0
Paulo Andrade
19/07/2010
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!
GOSTEI 0
Emerson Nascimento
19/07/2010
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.
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.
GOSTEI 0
Carlos Mazzi
19/07/2010
ou seja com aspas funciona e sem nao é isso mesmo?
GOSTEI 0
Edinei Colli
19/07/2010
Utilize o método QuotedStr.
Com isso se no edit você informar 01/01/2010 o método vai retornar '01/01/2010'.
Errado:
Correto:
Espero ter ajudado.
ds.atestado.sql.add('where atestado.idempresa =' + Edit1.text)
ds.atestado.sql.add('where atestado.idempresa =' + QuotedStr(Edit1.text))
GOSTEI 0
Emerson Nascimento
19/07/2010
Utilize o método QuotedStr.
Com isso se no edit você informar 01/01/2010 o método vai retornar '01/01/2010'.
Errado:
Correto:
Espero ter ajudado.
ds.atestado.sql.add('where atestado.idempresa =' + Edit1.text)
ds.atestado.sql.add('where atestado.idempresa =' + QuotedStr(Edit1.text))
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.
GOSTEI 0
Edinei Colli
19/07/2010
Utilize o método QuotedStr.
Com isso se no edit você informar 01/01/2010 o método vai retornar '01/01/2010'.
Errado:
Correto:
Espero ter ajudado.
ds.atestado.sql.add('where atestado.idempresa =' + Edit1.text)
ds.atestado.sql.add('where atestado.idempresa =' + QuotedStr(Edit1.text))
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.
GOSTEI 0
Paulo Andrade
19/07/2010
»»» 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...
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...
GOSTEI 0