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

O Que Eu Estou Fazendo De Errado (pra Variar)?


hencker

Pergunta

Estou usando o seguinte código:

procedure TfrmPrincipal.TBGeralClick(Sender: TObject);
begin
        lblQuantTotal.Caption := IntToStr(DMRelatos.TGeral.RecordCount);

        with DMRelatos.QGeral_01 do begin
                Close;
                SQL.Clear;
                SQL.Add('SELECT * FROM PROTOCOLO WHERE TITULONATUREZAABR = DMI');
                Open;
        end;

        lblQuantDMI.Caption := IntToStr(DMRelatos.QGeral_01.RecordCount);
end;

Porém quando eu compilo dá o segunte erro:

Project Relato.exe raised exception class EZSQLException with message 'SQL Erros: Dynamic SQL Error SQL error code = -206 Column unknouwn DMI At line 1, column 51.. Error code: -206 Column does not belong to referenced table The SQL : SELECT * FROM PROTOCOLO WHERE TITULONATUREZAABR = DMI;'. Process stopped. Use Step or Run to continue.

O que deu para entender é que ele pensa que DMI é uma coluna da tabela mas na verdade DMI é apenas um dado que eu quero que seja filtrado por ele...

Alguém têm alguma idéia?

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
Nesse caso usa-se duas aspa símples em vez de uma aspa dupla:

Eu pensei em sugerir isso mas lembrava que em SQL as strings eram entre aspas duplas. E lembrando também que duas aspas simples numa constante string é igual a uma aspas simples. Igual a ->

'SELECT * FROM PROTOCOLO WHERE (TITULONATUREZAABR = '+#39+'DMI'+#39+')'

Link para o comentário
Compartilhar em outros sites

  • 0
Nesse caso usa-se duas aspa símples em vez de uma aspa dupla:

Eu pensei em sugerir isso mas lembrava que em SQL as strings eram entre aspas duplas. E lembrando também que duas aspas simples numa constante string é igual a uma aspas simples. Igual a ->

'SELECT * FROM PROTOCOLO WHERE (TITULONATUREZAABR = '+#39+'DMI'+#39+')'

Há banco que aceita numa select aspa duplas, no entanto, tem banco que não aceita, na verdade a maioria não aceita.

ABs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0
Há banco que aceita numa select aspa duplas, no entanto, tem banco que não aceita, na verdade a maioria não aceita.
É por essas e outras que sempre inssisto no uso de parâmetros e não concatenação (de qualque tipo).

Se fosse escrito deste modo, não seria necessário preocupar-se com que tipo de aspas o banco utiliza (simples ou dupla), o mesmo vale para datas (uns utilizam aspas, outros sustenidos...):

with DMRelatos.QGeral_01 do
begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM PROTOCOLO WHERE TITULONATUREZAABR = :NATUREZA');
  ParamByName('NATUREZA').AsString := 'DMI';
  Open;
end;

[]s

Link para o comentário
Compartilhar em outros sites

  • 0
Há banco que aceita numa select aspa duplas, no entanto, tem banco que não aceita, na verdade a maioria não aceita.
É por essas e outras que sempre inssisto no uso de parâmetros e não concatenação (de qualque tipo).

Se fosse escrito deste modo, não seria necessário preocupar-se com que tipo de aspas o banco utiliza (simples ou dupla), o mesmo vale para datas (uns utilizam aspas, outros sustenidos...):

with DMRelatos.QGeral_01 do
begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM PROTOCOLO WHERE TITULONATUREZAABR = :NATUREZA');
  ParamByName('NATUREZA').AsString := 'DMI';
  Open;
end;

[]s

Olá Micheus,

Na verdade se formos olhar os pros e contras, seria muito relativo, na minha programação eu faço o uso tanto de parametros como tambem o uso das aspas, depedendo da situação.

Com relação os parametros, por exemplo com ADO, ele não aceita ParamByName e talvez tenha outros que tambem não aceita, e cada um tipo de componente trabalha de uma forma diferente com relação os parametros, por exemplo, eu num sei firmemente como funciona o IB, o ZEUS, eu só trabalho com o BDE, então por isso, quando vou da alguma dica faço mais o uso dessas aspas, que na verdade aspa dupla até agora eu só vi em ACCESS mesmo, e ele aceita tanto aspa simples como dupla, tanto faz.

P.S. Mas será que resolveu o problema do hencker? :)

Abs. Progr'amador.

B)

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Micheus,

Na verdade se formos olhar os pros e contras, seria muito relativo, na minha programação eu faço o uso tanto de parametros como tambem o uso das aspas, depedendo da situação.

Com relação os parametros, por exemplo com ADO, ele não aceita ParamByName e talvez tenha outros que tambem não aceita, e cada um tipo de componente trabalha de uma forma diferente com relação os parametros, por exemplo, eu num sei firmemente como funciona o IB, o ZEUS, eu só trabalho com o BDE, então por isso, quando vou da alguma dica faço mais o uso dessas aspas, que na verdade aspa dupla até agora eu só vi em ACCESS mesmo, e ele aceita tanto aspa simples como dupla, tanto faz.

Progr'amador, vou continuar "vendendo o meu peixe"...

Em muitos casos vê-se códigos confusos só pelo uso da concatenação. Quando há parametrização a leitura também fica mais agradável e compreensível. É o que, também, vejo de vantagem no uso de parâmetros.

No caso do ADO, eu diria, apenas, que o caminho é apenas mais "comprido", mas também existe: ADOQuery1.Parameters.ParamByName('NOME_CAMPO').Value

Com a exceção de que não há o AsString, AsInteger, ..., apenas Value (variant)

Já o Access é mesmo um caso aparte. Só nele vi o delimitador de datas ser um #.

Valeu.

Link para o comentário
Compartilhar em outros sites

  • 0

No caso do ADO, eu diria, apenas, que o caminho é apenas mais "comprido", mas também existe: ADOQuery1.Parameters.ParamByName('NOME_CAMPO').Value

Com a exceção de que não há o AsString, AsInteger, ..., apenas Value (variant)

Pow essa do ADO eu não sabia, valeu!

Eu concordo com você sobre o questionamento, só que eu defendo a opnião de que nem sempre o uso da concatenação seja algo complicado (confuso) e sim algo mais prático em devidos momentos, e quando o caso venha a se complicar aí usa-se parametros.

Abs. Progr'amador.

B)

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,3k
×
×
  • Criar Novo...