GARANTIR DESCONTO

Fórum Como realizar select count com componetes dbexpress #268442

14/02/2005

0

Gostaria da ajuda de vocês pois estou querendo fazer uma consulta com select count para impedir que determinado grupo de acesso (EX: Suporte,Administrador Etc) seja excluido se tiver um relacionamento com algum funcionário.

Estou fazendo assim mas não está dando certo:

Dm.SQLDataSet.CommandText:=´SELECT COUNT (*) AS TOTAL FROM (A TABELA DE FUNCIONARIO) WHERE (A CHAVE DA TABELA DO GRUPO DE ACESSO) =: (AO REGISTRO DA TABELA DO GRUPO DE ACESSO)´;
Dm.SQLDataSet.ParamByName(AO REGISTRO DA TABELA DO GRUPO DE ACESSO).AsInteger:=
Dm.SQLDataSet.ParamByName(AO REGISTRO DA TABELA DO GRUPO DE ACESSO).AsInteger;
Dm.SQLDataSet.Active:=True;

If Dm.SQLDataSet.FieldbyName(´TOTAL).AsInteger 0 Then
Begin
Dm.SQLDataSet.Active:=False;
Showmessage(´O Registro não pode ser excluido´);
Exit
End;


Desde Já Agradeço a Atenção


Lnunes

Lnunes

Responder

Posts

14/02/2005

Vinicius2k

Colega,

O mais provável é que seja um problema na passagem dos parametros, mas o que exatamente ocorre? Você já verificou qual valor está sendo retornado pelo count?
No código postado vc está passando para o valor do parametro ele próprio... isto foi apenas um erro na postagem?

Por favor, cole o código exato que vc está utlizando na aplicação para que possamos verificá-lo em detalhes.

T+


Responder

Gostei + 0

14/02/2005

Lnunes

Obrigado pela a atenção,

Vinicius2K acredito que não vale apena postar o código exato, pois está totalmente errado, o que está acontecendo e que estou tendo dificultades, de converter a minha aplicação de IBExpress para Dbexpress devido aos parametros.

O que eu gostaria, e que alguém desse um exemplo de como emitir um alerta ao usuário, informado que determinado registro não pode ser excluido, pois existe relacionamentos com aquele registro.

Obs: utilizando o dbexpress de forma bidirecional.

Dúvidas:

Gostaria de saber se vale apena converter um sistema que cadastra aproximadamente 3.000 Pessoas desenvolvido em Ibexpress para Dbexpress afim de obter mais agilidade.

Quais as vantagens do dbExpress sobre o Ibexpress.


Desde já Agradeço a Atenção de Todos.


Responder

Gostei + 0

14/02/2005

Vinicius2k

acredito que não vale apena postar o código exato, pois está totalmente errado, o que está acontecendo e que estou tendo dificultades, de converter a minha aplicação de IBExpress para Dbexpress devido aos parametros.

Sempre vale a pena. Estamos aqui para ajudar (se for possível) :wink:

O que eu gostaria, e que alguém desse um exemplo de como emitir um alerta ao usuário, informado que determinado registro não pode ser excluido, pois existe relacionamentos com aquele registro.

Creio que sua lógica está correta. Na minha opinião, o erro é de código, apenas.
Vc não estaria indo pelo caminho mais difícil ? Imagine em uma aplicação de grande porte vc ´amarrar´ todas as chaves estrangeiras :roll:
Eu fazia este tipo de tratamento (forçadamente) em meus anos de Clipper e Delphi com BDs desktop... Hoje, com SGDBs, não vejo necessidade disto já que afinal, mesmo que o usuário queira, não vai conseguir excluir a FK... o que eu faço é tratar a mensagem de erro vinda do banco de dados e isto vc poderá fazer facilmente...
Por exemplo, se vc estiver utilizando um ClientDataSet, o erro virá após o ApplyUpdates, então, utilize o evento OnReconcileError do ClientDataSet com uma rotina simples de tratamento, parecida com esta :
...
var Msg: String;
begin
  Action:= raCancel;
  Msg:= ´Descrição de erro não disponível.´;

  if (Pos(´violation of PRIMARY or UNIQUE KEY´, E.Message) > 0) or
     (Pos(´attempt to store duplicate value´, E.Message) > 0) then
    Msg:= ´A inserção/edição iria resultar em duplicidade de registros.´;

  if Pos(´violation of FOREIGN KEY´, E.Message) > 0 then
    Msg:= ´A atualização iria causar falhas de relacionamento.´;

  ShowMessage(´Não foi possível efetivar as atualizações.´ + #13 +
              ´Descrição do Erro : ´ + Msg´ + 13 +
              ´Mensagem Original : ´ + E.Message);
end;


Gostaria de saber se vale apena converter um sistema que cadastra aproximadamente 3.000 Pessoas desenvolvido em Ibexpress para Dbexpress afim de obter mais agilidade. Quais as vantagens do dbExpress sobre o Ibexpress.

Apenas por performance? Se sim definitivamente não vale a pena. Até porque a performance do IBX é superior ao dbExpress com IB/FB. Se vc está pensando em futura compatibilidade, suporte a outros SGBDs, então, sim vale a pena.

Tenha em mente as opções :

1. Utilizar o IBX com Firebird (sem garantias de por quanto tempo) ou ´para sempre´ com o IB Free ou pago. Se a incompatibilidade vier, migrar a camada de acesso, não dar upgrade no SGBD ou mudar para o IB pago.

2. Migrar para o dbExpress e ficar UM POUCO mais tranquilo quanto a incompatibilidade, já que vc pode utilizar um outro driver específico para o Firebird. Eu digo ´um pouco´, pq isto é relativo... poderá não existir um driver específico para o FB, totalmente estável e free (como até hoje não existe -- infelizmente, o UIB ainda é instável)... é possível que vc fique preso à drivers pagos no futuro.

3. Utilizar ADO com ODBC (ou ADO.NET com Data Provider), que é *quase* uma garantia de ter sempre compatibilidade, já que estes drivers são continuados pelo próprio time do FB (tenho pensado seriamente nesta possibilidade, mas por enquanto é só estudo.)

O que vai ser bom para vc utilizar o dbExpress é o uso, quase forçado, da Midas... esta sim é uma tecnologia que vale muito a pena aprender e se habituar, já que, para ela, não importa a camada de acesso utilizada... se vc basear as operações com seu BD no DataSetProviders e ClientDataSets, fica muito fácil migrar a camada... em muitos será só retirar um SQLDataSet e substituir por um ADODataSet, por exemplo.

T+


Responder

Gostei + 0

14/02/2005

Lnunes

Vinicius2K mais uma vez muito obrigado por esclarecer as minha dúvidas
e sobre o Ibexpress X Dbexpress apesar de achar o desenvolvimento em Ibexpress mais tranquilo acho que vou apostar no dbexpress devido a questões de compatibilidade e aprendizado.

Agradeço a atenção .


Responder

Gostei + 0

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

Aceitar