As suas aplicações Delphi, levadas para a web
Nos anos 90 e 2000 o Delphi era uma escolha comum para software de gestão, e muitos desses programas continuam em uso todos os dias, muitas vezes com tabelas Paradox ou dBase lidas através do BDE. Migramo-los para aplicações web sobre uma base de dados SQL, com os mesmos dados e as mesmas regras, para que deixe de precisar de PC configurados ao pormenor para os pôr a funcionar.
Porquê agora
A Embarcadero, que hoje desenvolve o Delphi, declarou obsoleto o Borland Database Engine. A sua documentação afirma que o BDE não vai ser melhorado, nunca suportará Unicode e não deve ser usado em novos desenvolvimentos, e sugere a passagem para o FireDAC. Ainda assim, a maioria dos programas Delphi antigos continua a ler e a escrever as suas tabelas Paradox ou dBase através dele.
O BDE foi concebido para o Windows de 32 bits e para a partilha de ficheiros numa rede local. As tabelas Paradox numa unidade partilhada dependem de ficheiros de bloqueio e de configurações do BDE que têm de ser idênticas em todos os PC, e quando uma máquina as tem mal, tabelas e índices podem danificar-se. Cada PC novo, e cada passagem para uma nova versão do Windows, é mais uma instalação a configurar à mão.
- Windows 10Fim do suporte da Microsoft
O que migramos
O programa e os ficheiros de dados de que depende, seja qual for o estado em que se encontrem.
Formulários e controlos ligados aos dados
Formulários dos ficheiros .dfm com
TDBGrid,TDBEdit,TDBLookupComboBoxe estruturas principal e detalhe. Passam a páginas web com os mesmos campos e a mesma sequência de trabalho.Dados Paradox, dBase e InterBase
Tabelas lidas através do BDE, ou bases de dados como InterBase, Firebird, SQL Server e Oracle. Passamos os dados para SQL Server ou MySQL mantendo chaves, índices e relações.
Data modules e lógica de negócio
Código nas units
TDataModule, nos eventos dos datasets comoBeforePosteOnCalcFieldse nos campos calculados e de pesquisa. Reunimos estas regras em serviços do lado do servidor.Relatórios
Layouts QuickReport, ReportBuilder, Rave Reports ou FastReport, incluindo os que têm código nos seus eventos. Passam a documentos PDF com o mesmo conteúdo.
Componentes de terceiros
Grelhas, editores e utilitários de pacotes como DevExpress, TMS, InfoPower ou RxLib, muitas vezes ligados a uma única versão do Delphi. Verificamos que funções o programa usa de facto.
Importações, exportações e tarefas agendadas
Trocas de ficheiros de texto e CSV com outros sistemas, exportações para o contabilista e programas lançados pelo Agendador de Tarefas do Windows. Passam a tarefas agendadas no servidor.
Como fica a versão web
- Painel
- Artigos1284
- Movimentos
- Fornecedores
- Relatórios
| Cabo H07V-K 1,5 mm², azulEL-10215 · A-03-2 | 1850 m | |
| Disjuntor C16 1P+NEL-20431 · B-01-4 | 46 un. | Abaixo mín. |
| Caixa de derivação 100×100EL-30112 · B-02-1 | 312 un. | |
| Painel LED 60×60, 36 WEL-40877 · C-05-3 | 18 un. | Abaixo mín. |
| Diferencial 40 A 30 mAEL-20455 · B-01-5 | 27 un. | |
| Tubo 20 mm, cinzentoEL-50310 · A-07-1 | 940 m | |
| Tomada 16 AEL-60204 · B-03-2 | 9 un. | Abaixo mín. |
| Código | Descrição | Localização | Em stock | Mín. | Unid. |
|---|---|---|---|---|---|
| EL-10215 | Cabo H07V-K 1,5 mm², azul | A-03-2 | 1850 | 500 | m |
| EL-20431 | Disjuntor C16 1P+N | B-01-4 | 46 | 60 | un. |
| EL-30112 | Caixa de derivação 100×100 | B-02-1 | 312 | 100 | un. |
| EL-40877 | Painel LED 60×60, 36 W | C-05-3 | 18 | 24 | un. |
| EL-20455 | Diferencial 40 A 30 mA | B-01-5 | 27 | 20 | un. |
| EL-50310 | Tubo 20 mm, cinzento | A-07-1 | 940 | 300 | m |
| EL-60204 | Tomada 16 A | B-03-2 | 9 | 40 | un. |
Um programa de armazém como poderia aparecer em Delphi no Windows XP, e os mesmos dados numa aplicação web.
Arraste o manípulo ou use as setas do teclado.
Para onde vai cada parte
- No Delphi: Formulários (.dfm) e units (.pas)
- Na aplicação web: Páginas web, com a lógica no servidor
- No Delphi: Tabelas Paradox ou dBase através do BDE
- Na aplicação web: SQL Server ou MySQL, com chaves e relações
- No Delphi: Campos calculados e de pesquisa
- Na aplicação web: Cálculos e junções na base de dados ou nos serviços
- No Delphi: Aliases e configurações do BDE em cada PC
- Na aplicação web: Uma única ligação, configurada no servidor
- No Delphi: Layouts QuickReport ou FastReport
- Na aplicação web: Documentos PDF gerados pelo servidor
- No Delphi: Uma unidade de rede partilhada por todos
- Na aplicação web: Acessos em simultâneo geridos pela base de dados
Como decorre a migração
Análise em 48 horas
Envia-nos o programa com a respetiva pasta de dados (ficheiros Paradox ou dBase, ou uma cópia de segurança da base de dados), e o código-fonte (.dpr, .pas, .dfm), se o tiver. Em 48 horas respondemos com um relatório escrito: o que o programa faz hoje, onde estão os riscos, como se organizaria a versão web, um preço fixo para um módulo-piloto e uma estimativa para o resto. É gratuito e não o compromete a nada.
Módulo-piloto
Construímos uma parte da aplicação sobre uma cópia dos seus dados reais, normalmente a parte mais usada. Os seus colaboradores trabalham com ela no dia a dia antes de decidir o resto.
Os mesmos dados, os mesmos resultados
Passamos os mesmos registos pelo programa Delphi e pela nova aplicação e comparamos stocks, totais e documentos impressos. Cada regra de negócio que encontramos passa também a um teste automático, repetido antes de cada nova versão. Recebe um relatório com o resultado de cada verificação.
30 dias em paralelo
Quando a aplicação completa estiver pronta, o programa Delphi continua em uso ao lado dela durante 30 dias. Qualquer diferença aparece enquanto o programa antigo ainda lá está, e corrigimo-la dentro do preço acordado.
Armadilhas típicas, e como as tratamos
Como se comportam o BDE e o Paradox
As tabelas Paradox dependem de ficheiros de bloqueio, de um ficheiro de controlo de rede partilhado (
PDOXUSRS.NET) e de configurações do BDE comoLOCAL SHARE, que têm de ser iguais em todos os PC. Índices danificados e erros «Table is busy» são frequentes. Antes da migração reparamos o que pode ser reparado e comunicamos-lhe os registos que não se conseguem ler.Codificação dos caracteres
O BDE guarda o texto numa página de código definida pelo language driver da tabela, enquanto o Delphi 2009 e as versões seguintes usam strings Unicode. Letras acentuadas e símbolos são onde uma migração mais costuma falhar, por isso verificamos a codificação de cada tabela e comparamos consigo amostras do texto convertido.
Lógica escondida nos eventos dos datasets
As regras em
BeforePost,OnValidateouOnCalcFieldssão executadas em silêncio sempre que um registo é guardado ou mostrado, e passam facilmente despercebidas a quem só olha para os formulários. Procuramos no código cada handler de evento e listamos as regras que aplica.Campos calculados e de pesquisa
Campos que só existem no programa, não nas tabelas, aparecem no ecrã e nos relatórios como se fossem dados guardados. Reproduzimo-los como valores calculados e comparamo-los com os originais.
Componentes sem código-fonte
Alguns pacotes de terceiros foram comprados como units compiladas para uma única versão do Delphi. Se o programa usa algum deles para um cálculo, e não só para a apresentação, reconstruímos o comportamento a partir dos resultados e confirmamo-lo pondo os dois programas a trabalhar com os mesmos dados.
Formatos de datas e números
Os campos de data do Paradox e do dBase, os anos com dois dígitos introduzidos há muito tempo e os separadores decimais que dependem das definições regionais do Windows exigem um tratamento explícito quando os dados passam para uma base de dados SQL. Listamos as anomalias encontradas durante a importação e resolvemo-las consigo.
Preço e pagamento
Análise
Gratuita
por escrito, em 48 horas
Módulo-piloto
1000–1500 €
normalmente; 50% no início, 50% na aceitação
Condições de pagamento
Pedimos 50% no arranque e 50% na aceitação. A segunda metade é paga antes da entrada em produção e da entrega do código-fonte. Nos projetos maiores, os pagamentos acompanham as fases acordadas.
A análise é gratuita. Se decidir não avançar, fica com o relatório e não deve nada.
Os preços são fixos e acordados por escrito antes de começarmos. Se o trabalho mudar, enviamos um novo orçamento escrito e só avançamos com a sua aprovação.
Numa migração completa, o nosso objetivo é ficar 40 a 60% abaixo do orçamento habitual de uma agência. É possível porque somos um estúdio pequeno, sem escritórios para pagar nem equipa comercial.
Preços sem IVA.
Uma migração real, verificada por testes
A Northwind é a base de dados de exemplo que a Microsoft distribuía com o Access, não um cliente nosso. Migrámos uma cópia pública para SQLite e PostgreSQL, comparámos cada tabela e cada consulta com o original através de testes automáticos e construímos sobre o resultado uma aplicação web funcional. O caso de estudo apresenta os números, e o relatório de equivalência enumera cada verificação.
A Northwind é uma base de dados Access, mas para Delphi seguimos o mesmo método: migrar, comparar os resultados com os do original sobre os mesmos dados e manter os dois programas em paralelo.
Relatório de equivalência (em inglês) · Pré-visualização clicável e análise de exemplo (demonstração)

Perguntas frequentes
O nosso programa Delphi usa tabelas Paradox numa unidade de rede. Conseguem migrar os dados?
Sim. Lemos diretamente os ficheiros Paradox ou dBase, convertemo-los para SQL Server ou MySQL e comparamos o número de registos e os totais antes e depois. Os registos danificados são-lhe comunicados, não descartados em silêncio.
Não poderíamos simplesmente passar para uma versão mais recente do Delphi?
É uma opção, e para alguns programas é a mais sensata: a aplicação continua a ser um programa Windows, o FireDAC substitui o BDE e o código é atualizado. Se precisa de acesso a partir de qualquer navegador, sem instalar nada nos PC, uma aplicação web é a melhor escolha. Quando ambas fazem sentido, a análise compara-as.
Não temos o código-fonte. É um problema?
Não necessariamente. Podemos trabalhar a partir do programa em uso, dos seus ficheiros de dados e de gravações da forma como as pessoas o usam. Com o código-fonte a análise é mais precisa, e quando falta informação dizemo-lo.
Com que versões do Delphi trabalham?
Com programas escritos em qualquer versão, das primeiras da Borland nos anos 90 às atuais da Embarcadero. A versão conta sobretudo para o tratamento das strings e para os componentes disponíveis, e indicamo-la na análise.
A aplicação web pode continuar a usar a nossa base de dados Firebird ou InterBase?
Sim, se outros programas ainda dependerem dela. Nesse caso a aplicação web liga-se à mesma base de dados, e a mudança de base de dados pode acontecer mais tarde, ou nunca.
O que acontece nos 30 dias de funcionamento em paralelo?
A sua equipa mantém o programa Delphi à mão enquanto trabalha na nova aplicação, para poder comparar os resultados no trabalho real. Qualquer diferença que encontremos nesse período é corrigida dentro do preço acordado.
Outros serviços
Todos os serviços- Modernização de software antigoAccess, Excel VBA, VB6, Delphi e .NET antigo, reconstruídos para a web
- De Microsoft Access para aplicação webTabelas, consultas, formulários, relatórios e VBA passados para uma aplicação web sobre SQL Server ou MySQL.
- Excel VBA para aplicação webLivros com macros, UserForms e folhas ligadas transformados numa aplicação web multiutilizador.
- Migração de aplicações VB6Programas em Visual Basic 6 migrados para C# e para a web, com ou sem o código-fonte.
- Modernização de .NET antigoAplicações WinForms e ASP.NET Web Forms migradas para ASP.NET Core, mantendo o que ainda funciona.
Contacto
Escolha o canal que mais lhe convier. Respondemos por e‑mail, em português, no prazo de um dia útil.
Por e‑mail
riccardo@Envie-nos o programa e a respetiva pasta de dados, se preferir com dados de teste, ou uma breve descrição do que faz. Respondemos no prazo de um dia útil.
Envie-nos o seu ficheiro
Se o programa for em Access, Excel, VB6, Delphi ou numa versão antiga de .NET, recebe uma análise escrita gratuita no prazo de 48 horas após o envio do ficheiro.
- Faça uma cópia do ficheiro, se preferir com dados de teste.
- Anexe-a ao formulário ou a um e‑mail, de preferência num arquivo protegido por palavra-passe, enviando a palavra-passe à parte. Se o pedir, assinamos antes um acordo de confidencialidade.
- Em 48 horas: a análise e um preço fixo para um módulo piloto.
Trabalhamos a partir de Itália.