Fórum Como realizar select count com componetes dbexpress #268442
14/02/2005
0
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
Curtir tópico
+ 0Posts
14/02/2005
Vinicius2k
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+
Gostei + 0
14/02/2005
Lnunes
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.
Gostei + 0
14/02/2005
Vinicius2k
Sempre vale a pena. Estamos aqui para ajudar (se for possível) :wink:
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;
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+
Gostei + 0
14/02/2005
Lnunes
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 .
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)