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

(Resolvido) por que esta dando erro nesse comando sql?


Greed

Pergunta

agenda:= DateToStr (Date);
  label3.Caption:= agenda;
  DM.QueryAgenda_Consulta.Close;
  DM.QueryAgenda_Consulta.SQL.Clear;
  DM.QueryAgenda_Consulta.Sql.Add ('SELECT * FROM agendaconsulta');
  DM.QueryAgenda_Consulta.Sql.Add ('WHERE Data_consulta = ' + agenda);
  DM.QueryAgenda_Consulta.Open;

O que eu estou fazendo de errado? Ele da erro ao invés de filtrar pela data de hoje, ele retorna este erro

type mismatch in expression

DM é o meu DataModule

Editado por Greed
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0
agenda:= DateToStr (Date);
  label3.Caption:= agenda;
  DM.QueryAgenda_Consulta.Close;
  DM.QueryAgenda_Consulta.SQL.Clear;
  DM.QueryAgenda_Consulta.Sql.Add ('SELECT * FROM agendaconsulta');
  DM.QueryAgenda_Consulta.Sql.Add ('WHERE Data_consulta = ' + agenda);
  DM.QueryAgenda_Consulta.Open;

O que eu estou fazendo de errado? Ele da erro ao invés de filtrar pela data de hoje, ele retorna este erro

type mismatch in expression

DM é o meu DataModule

Que banco você está usando?

Data_consulta tem o mesmo formato de agenda?

Ele não está entendendo que o conteúdo da variável "agenda" deve ser comparado a um formato data.

Link para o comentário
Compartilhar em outros sites

  • 0

talvez por causa do formato da data!!o banco espera o formato americano ('mm/dd/yyyy') e quando você tranforma em string essa data fica no formato brasileiro('dd/mm/yyyy')

tente assim:

agenda:= DateToStr (Date);
  label3.Caption:= agenda;
  DM.QueryAgenda_Consulta.Close;
  DM.QueryAgenda_Consulta.SQL.Clear;
  DM.QueryAgenda_Consulta.Sql.Add ('SELECT * FROM agendaconsulta');
  DM.QueryAgenda_Consulta.Sql.Add ('WHERE Data_consulta = :AGENDA');
  DM.QueryAgenda_Consulta.Params[0].AsDate := Date;
  DM.QueryAgenda_Consulta.Open;

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Erso!

Foi por isso perguntei qual o tipo de banco ele está usando.

existem diversos formatos de data e diversos bancos usando padrões diferentes.

Um exemplo prático é o MySQL que a data é no formato aaaa-mm-dd.

Link para o comentário
Compartilhar em outros sites

  • 0

Erso

Continua dando o mesmo erro de antes

Denis Courcy

Estou usando o banco em Paradox e usando a Query para fazer a pesquisa!

O campo agenda é uma String

Como eu conserto este erro?

Deixe-me explicar o que deve acontecer no script!

Eu preciso que ele liste todas as tarefas agendadas para o dia atual.

Não querendo abusar muito da boa vontade, mas como eu faria para programar o banco de dados para apagar os registros após um determinado tempo?

Digamos que o evento ocorre no dia 5, logo no dia 5 irá aparecer uma mensagem sobre aquele evento. Para que o banco de dados não fique sobrecarregado, como eu faria para estipular uma data X onde o banco iria apagar as informações?

exemplo

digamos que X=5, então no dia 10 todas as informações cadastradas para serem exibidas no dia 5 serão apagadas.

Obrigado pela atenção

Editado por Greed
Link para o comentário
Compartilhar em outros sites

  • 0
o banco espera o formato americano ('mm/dd/yyyy') e quando você tranforma em string essa data fica no formato brasileiro('dd/mm/yyyy')

Digamos que no caso do Paradox, isto é meio relativo, porque depende de como está a configuração no BDE. Na configuração do formato de data, o campo MODE pode indicar m/d/y (0), d/m/y (1) ou y/m/d (2).

Greed, vamos acertar as coisas.

Sendo agenda um string, é relevante o que o Denis Courcy lhe questionou e comentou: alguns bancos tratam a data em um formato diferente.

A idéia de parametrização do Erso é a mais indicada para deixá-lo livre deste problema de formatação.

Entretanto, se o exemplo que ele lhe passou não funcionou, pode ser divido ao tipo do campo Data_consulta (o qual o Denis lhe questionou o tipo e você não informou) não ser do tipo Date como assumido pelo colega Erso - esta informação é relevante.

Quanto as questões adicionadas enquanto eu escrevia este post, fica pendente de minha parte.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Greed'!

Denis Courcy

Estou usando o banco em Paradox e usando a Query para fazer a pesquisa!

O campo agenda é uma String

Como eu conserto este erro?

Se o campo data é string seu comando que está assim

DM.QueryAgenda_Consulta.Sql.Add ('WHERE Data_consulta = :AGENDA');
  DM.QueryAgenda_Consulta.Params[0].AsDate := Date;
Não deveria ser assim?
DM.QueryAgenda_Consulta.Sql.Add ('WHERE Data_consulta = :AGENDA');
  DM.QueryAgenda_Consulta.Params[0].AsString := Datetostr(Date);

Link para o comentário
Compartilhar em outros sites

  • 0

Ixi, me desculpe a falta de atenção

O campo no banco de dados é Alfanumérico de tamanho 15

ele está sendo gravado por um "DateTimePicker" de onde pega a data e salva no banco de dados.

Acho que o meu erro está sendo ai então, já que o código do erso não funcionou.

O que me sugerem? Deixa o usuário cadastrar na mao a data e remove o DateTimePicker ou o que eu posso fazer?

Grato pela atenção e fico num aguardo se você puder me ajudar Micheus

Link para o comentário
Compartilhar em outros sites

  • 0
Ixi, me desculpe a falta de atenção

O campo no banco de dados é Alfanumérico de tamanho 15

ele está sendo gravado por um "DateTimePicker" de onde pega a data e salva no banco de dados.

Acho que o meu erro está sendo ai então, já que o código do erso não funcionou.

O que me sugerem? Deixa o usuário cadastrar na mao a data e remove o DateTimePicker ou o que eu posso fazer?

Grato pela atenção e fico num aguardo se você puder me ajudar Micheus

Pode manter a data no formato string e o DateTimePicker, mas tem que mudar o código para que a leitura e a gravação não sejam impedidas.

Link para o comentário
Compartilhar em outros sites

  • 0
Pode manter a data no formato string e o DateTimePicker, mas tem que mudar o código para que a leitura e a gravação não sejam impedidas.

Mas Denis, para o que ele pretende fazer:

"Eu preciso que ele liste todas as tarefas agendadas para o dia atual.

Não querendo abusar muito da boa vontade, mas como eu faria para programar o banco de dados para apagar os registros após um determinado tempo?"

Não ficaria mais fácil se ele usasse um campo tipo Date no banco, e na hora de gravar, converteria a data texto do DateTimePicker para um Date (usando StrToDate)?

Penso que simplificaria as coisas futuramente.

Sem contar que a ordenação de uma consulta usando um campo de data - no formato string - quase sempre traz dor de cabeça, a menos que você a armazene no formato yyyy/mm/dd.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pessoal, agora está funcionando :rolleyes:

O que fiz foi utilizar este código

DM.QueryAgenda_Consulta.Sql.Add ('WHERE Data_consulta = ' + chr(39)+ agenda + chr(39));

Obrigado a todos pelas dicas, foi muito util para resolver o meu problema

Editado por Greed
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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...