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

(Resolvido) DBGrid [erro - soma]


TicoO

Pergunta

Olá galera =)

estou com um problema na soma do DBGrid, mas, ante deixa eu postar o code:

procedure TFlancamentos.Button5Click(Sender: TObject);
    begin
        with Qpesq do
            begin
              Close;
              SQL.Clear;
              SQL.Text := 'Select SUM(Valor) from "Tblancamento" where Data between ' + '28/01/2008' + ' and ' + '29/01/2008';
              DisableControls;
              Open;
            end;
    end;

ele está considerando que a tabela Tblancamentos (que está em um DataModule) é um banco de dados ou em outras palavras, está enxergando desta forma: Tblancamento.DB e aparece a mensagem ao tentar executar meu comando: "table does not exist" ,mas, ela existe sim lol

se alguém puder me ajudar, agradeço ;)

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
ele está considerando que a tabela Tblancamentos (que está em um DataModule) é um banco de dados ou em outras palavras, está enxergando desta forma: Tblancamento.DB e aparece a mensagem ao tentar executar meu comando: "table does not exist" ,mas, ela existe sim lol
TicoO, é um problema de interpretação seu. Ele está correto!

Qualquer comando SQL só pode ser realizado sobre as tabelas do banco. Eles não sabem nada sobre componentes externos.

Se você quer somar o que aparece em Tblancamento, então você tem que colocar o nome da tabela a que este componente se refere. Caso você faça algum tipo de filtro nele, você terá que filtrar também a sua consulta SQL utilizando a cláusula WHERE.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
eu coloquei o nome da tabela, é o Tblancamento. Mas acontece o que eu lhe disse ali em cima.

O DatabaseName da Query está certinho.

Então eu não consigo entender o que você disse no poste anterior :unsure:

ele está considerando que a tabela Tblancamentos (que está em um DataModule) é um banco de dados ou em outras palavras, está enxergando desta forma: Tblancamento.DB e aparece a mensagem ao tentar executar meu comando: "table does not exist" ,mas, ela existe sim lol

Na pior das hipóteses, retire as àspas duplas. Elas podem estar confundindo o drive que tenta encontra apenas Tblancamento, quando deveria procurar por Tblancamento.db (é provável que seja isto.

Se quiser manter as àspas (e não são necessárias), então inclua a extensão do arquivo. Mas não é uma boa abordagem, porque em muitos bancos você vai usar apenas o nome da tabela no banco - não existe extensão. ;)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
eu coloquei o nome da tabela, é o Tblancamento. Mas acontece o que eu lhe disse ali em cima.

O DatabaseName da Query está certinho.

Então eu não consigo entender o que você disse no poste anterior :unsure:

ele está considerando que a tabela Tblancamentos (que está em um DataModule) é um banco de dados ou em outras palavras, está enxergando desta forma: Tblancamento.DB e aparece a mensagem ao tentar executar meu comando: "table does not exist" ,mas, ela existe sim lol

Na pior das hipóteses, retire as àspas duplas. Elas podem estar confundindo o drive que tenta encontra apenas Tblancamento, quando deveria procurar por Tblancamento.db (é provável que seja isto.

Se quiser manter as àspas (e não são necessárias), então inclua a extensão do arquivo. Mas não é uma boa abordagem, porque em muitos bancos você vai usar apenas o nome da tabela no banco - não existe extensão. ;)

Abraços

Mas, então O.O

Tblancamento é o nome da tabela e não do banco de dados.

Só se existir extenção na table, eu nunca ouvi falar!

Vou postar uma imagem para facilitar hehe

erro_3.jpg

veja, ele está tratanto a minha TABELA como sendo um BD. Esse é o problema.

Link para o comentário
Compartilhar em outros sites

  • 0
Tblancamento é o nome da tabela e não do banco de dados.
É eu sei disso. Não era a isso que me referia. Talvez não tenha me expressado bem, já que a grande maioria dos que trabalham com PARADOX o tratam como um Banco de Dados.

Mas, supondo que você realmente esteja trabalhando com tabelas PARADOX, o que fica ainda mais claro vendo a mensagem de erro (onde dá para notar que a propriedade DriveName seu TDataBase deve estar configurado para STANDARD, ou que o ALIAS em uso na propriedade DataBasename está assim configurado), sugiro que você tente fazer a alteração que propus:

Na pior das hipóteses, retire as àspas duplas. Elas podem estar confundindo o drive que tenta encontra apenas Tblancamento, quando deveria procurar por Tblancamento.db (é provável que seja isto.

Só se existir extenção na table, eu nunca ouvi falar!
Bem vindo ao PARADOX (*.DB), DBASE e CLIPPER (*.DBF), ...

veja, ele está tratanto a minha TABELA como sendo um BD. Esse é o problema.
então, faça o que eu disse antes: retire as aspas ou acrescente a extensão. Para não ficar dúvida:

- Select SUM(Valor) from Tblancamento where Data between ...

- ou, Select SUM(Valor) from "Tblancamento.db" where Data between ...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Micheus!

Tanto o paradox como o DBF tratam o diretório onde estão as tabelas como banco de dados (é o mesmo que acontece com o MySQL usando o engine MyISAM). As tabelas devem ser mencionadas sem a extensão. E, você está certo quanto ao uso indevido das aspas duplas.

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui!

O code ficou assim:

procedure TFlancamentos.Button5Click(Sender: TObject);
begin
with Query1 do
    begin
      Close;
      SQL.Text := 'Select SUM(Valor) as total from DBValores where Data between :dataini and :datafim';
      ParamByName('dataini').DataType:= ftDateTime;
      ParamByName('dataini').AsDateTime:= StrToDate('28/01/2008');

      ParamByName('datafim').DataType:= ftDateTime;
      ParamByName('datafim').AsDateTime:= StrToDate('29/01/2008');

      Open;
    end;

    begin
        Ltotalperiodo.Caption := Query1.FieldByName('TOTAL').AsString;
        Gb2.Visible := true;
    end;
    
end;

obrigado a todos =D

Valeu!

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

  • 0

TicoO, esta parte:

ParamByName('dataini').DataType:= ftDateTime;

ParamByName('datafim').DataType:= ftDateTime;

é desnecessária quando você utiliza a passagem do parâmetro com AsDateTime:

ParamByName('dataini').AsDateTime := rToDate('28/01/2008');

DBValores... :wacko:

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
TicoO, esta parte:

ParamByName('dataini').DataType:= ftDateTime;

ParamByName('datafim').DataType:= ftDateTime;

é desnecessária quando você utiliza a passagem do parâmetro com AsDateTime:

ParamByName('dataini').AsDateTime := rToDate('28/01/2008');

DBValores... :wacko:

Abraços

IOHAEhioea interessante.

Mas, obrigado pelo toque!

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --felipee --

em seu caso, coloque apenas .asdate e não asdatetime. como você não quer trabalhar com horas não há necessidade do time...

utilize sempre parambyname()... é o correto. não utilize diretamente na contrucao da sql.

espero ajudar.

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...