sexta-feira, maio 13, 2005

IIS com Framework .NET para sistema de Suporte ao Cliente

Hoje vou instalar uma plataforma de suporte ao cliente numa das empresas para qual trabalho, que consiste num sistema de apoio ao cliente e de base de dados de conhecimento para os técnicos. Vou começar por preparar um servidor Web para integrar na DMZ da empresa com IIS 6, plataforma .NET windows server 2000.
Poderia tentar o windows server 2003 , mas a compatibilidade da base de dados do active directory 2000/2003 não me oferece confiança. Sei do comando adprep/domainprep (Infrastructure Master) e adprep/forestprep (schema master) para actualizar e preparar os controladores de dominio, mas as coisas por vezes não são tão lineares quanto isso. O interface gráfico vou programa-lo em asp.net com base de dados MSSQLSERVER. E ver vamos como fica.

quarta-feira, maio 11, 2005

Perda de dados em tabelas de ERP

Hoje fui a um cliente apressadamente porque a aplicação de gestão, não estava a reportar-lhe os extractos bancários. Achei estranho, mas lembrei-me que na 2º feira tinham-me ligado dessa empresa a dizer que uma alteração a uma transferência bancária, tinha demorado mais do que o costume, 20 minutos mais do que o costume.
Pensei que tivesse algo a ver com updates de tabelas, pois a aplicação tinha sofrido um upgrade à pouco tempo. Cheguei lá e constatei que todos os movimentos de tesouraria, todas as linhas, tinham sido actualizadas com os dados da alteração à transferência bancária. Que fazer?? Backup???...apesar de terem sido avisados mais do que uma vez, a verdade é que o último backup que havia era de julho de 2004. Sorte a minha e do cliente, que quando fiz o upgrade, tinha efectuado uma cópia de segurança (IMPORTANTÍSSIMO!!), só que com 1 mês de atraso. Apaguei as tabelas de movimentos de tesouraria e extractos bancários e copiei as duas tabelas da cópia de segurança para a base de dados que estava a ser usada. Antes disso certifiquei-me que os triggers estavam desactivados (pois as duas tabelas tinham triggers para insert, update e delete.), fiz truncate table xxxx (Reinicia a tabela) e passei os dados para as tabelas vazias. Muito bem...Mantiveram documentos, transferências, recibos, pagamentos etc, apenas teriam de processar novamente (fazendo o desprocessamento/processamento) para que o movimento fosse novamente inserido na tabela de movimentos e extractos.
Agora é esperar e ver se não me esqueci de algo importante. Ainda para mais a base de dados está na plataforma MSDE, que como suspeitam, limitava-me muito as tarefas que tinha de realizar.Porque aconteceu e o quê??... Bem liguei para a linha de apoio a cliente do softwre em causa, e estes limitavam-se a dizer pois...acho que sim, enquanto colocava o problema, expunha a solução e ainda lhe explicava porque tinha acontecido. O que de facto tinha acontecido, foi ao gravar um registo, um campo que funciona como chave primária de regist e que se relaciona com outras tabelas, tinha ficado em branco.
Daí até ao problema, foi um clique...

domingo, maio 08, 2005

Cannot perform an aggregate function on an expression containing an aggregate or a subquery

Deparei hoje com este erro quando estava a construir um mapa de analise para um cliente. Precisava somar todos os valores decorrentes de um conjunto de condicionantes (Case when end) mas n MS Sql não é possivel somar agregações. Não envio a query toda para aqui, pois é muito grande e complicada, mas dou um exemplo daquilo que falo:

select avg(count(ip)) from pagehits where [month] = 2 group by ip daria o seguinte erro "Cannot perform an aggregate function on an expression containing an aggregate or a subquery" e a unica maneira de dar a volta é usar o que se chama "Tabelas derivadas".

select avg(ipcount) from (select count(ip) ipcount from pagehits where [month] = 2 group by ip) as sub

Devo dizer que não existe muita informação quando se trata de queries bem mais complicadas.