Programando em CGI no Sistema Windows Seven, e não podendo escolher o IIS (o Express e o Cassini não executam CGI), fizemos a opção pelo Tomcat. Tendo que usar o Microsoft Access devido aos custos com exportação de dados e conversão de tipos para o Mysql em aplicações legadas, optamos pelo servidor Tomcat 7. O Tomcat é mais compatível com a arquitetura CGI e ainda roda servlets JSP.
Diante de todos estes fatores, o acesso aos dados por ODBC tornou-se o mais viável. Mas ao tentar este acesso, o browser informou que não era possível acessar o ODBC via MIcrosoft Access Driver devido ao erro de sistema 126.
Em sistemas Microsoft isto é muito comum, pois cada atualização joga DLLs sobre as já existentes, provocando conflitos entre número de parâmetros e seus tipos de dados. E isto ocorre com o pacote de objetos que contém o ODBC. Com isto, a biblioteca odbcjt32.dll pode se tornar incompatível com o sistema da máquina (pasmem).
Resolvendo o problema no Windows XP e Seven
Vamos resolver o problema de forma que possa ser aplicado ao Windows XP e Seven.
Como o Seven não vai deixar (em alguns casos) você copiar a biblioteca odbcjt32.dll para o C:\Windows\System32, crie um diretório C:\Meusystem com os arquivos:
msjter40.dll
odbcjt32.dll
odbcji32.dll
Tire as bibliotecas odbcji32.dll e msjter40.dll do C:\Windows\System32.
No registro do Windows, na chave ODBCINST.INI, altere os parâmetros Driver e Setup do Microsoft Access Driver para este PATH (C:\Meusystem ):
Programação com Scripts para Web
Blog da Rede Blogazine
Conteúdos com Pesquisa e Revisão
domingo, 19 de fevereiro de 2012
segunda-feira, 13 de fevereiro de 2012
Lazarus Object Pascal - Programando em CGI
CGI é uma antiga forma de programar não proprietária em sua infra-estrutura, como é o ISAPI da Microsoft.
Vamos a algumas particularidades da programação em CGI que o tornam mais conveniente que o ISAPI em determinadas situações.
O ISAPI precisa ser preparado a base de objetos, forma de concepção de programação que exige planejamento anterior. Após o planejamento de métodos e propriedades que o objeto vai ter, é preciso utilizar ferramentas Microsoft de construção e dominar terminologias de construção que mudam de ano para ano e que provocam o advento de ferramentas cada vez mais complexas.
Se você desejar fazer uma aplicação simples de banco de dados e desejar ler um banco de dados em um arquivo TXT com uma certa estrutura, ou um XML, vai ter que dominar os aborrecidíssimos e instáveis objetos Microsoft, e que são portas para invasão, devido à não checagem de invasão de áreas de memória.
O Lazarus Pascal
O Lazarus Pascal, clone quase idêntico 100 % ao Delphi, possui componentes e capacidades já bem construídos em função das numerosas inconsistências do seu semelhante. Instale os dois pacotes do diretório:
<Diretório de Instalação>\Lazarus\Components\fpweb
Os pacotes a serem instalados são (nesta ordem):
weblaz.lpk
lazwebextra.lpk
Utilize a opção do menu:
Package => Open Package file (lpk)
Compile e Instale ambos, NA ORDEM QUE RECOMENDAMOS.
Se tudo correr bem, o Lazarus vai reiniciar.
Primeira versão - Utilizando o objeto TCustomCGIApplication
Inicie um novo projeto do tipo console.
program project1;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, httpDefs, custcgi, custweb
{ you can add units after this };
Type
TMyCGIApp = Class(TCustomCGIApplication)
Protected
function InitializeWebHandler: TWebHandler; override;
end;
TMyCGIHandler = class(TCGIHandler)
public
procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
end;
{$R *.res}
Procedure TMyCGIHandler.HandleRequest(ARequest : Trequest; AResponse : TResponse);
begin
AResponse.Content := '<H1>Hello</H1>';
end;
function TMyCGIApp.InitializeWebHandler: TWebHandler;
begin
Result := TMyCGIHandler.Create(self);
end;
begin
With TMyCGIApp.Create(Nil) do
try
Initialize;
Run;
finally
Free;
end;
end.
Segunda versão - Usando fpweb e o WebModule
Utilize a opção de novo projeto do tipo CGI Application.
A unit gerada nem precisará ser mexida:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, HTTPDefs, websession, fpHTTP, fpWeb, fphtml;
type
{ TFPWebModule1 }
TFPWebModule1 = class(TFPWebModule)
HTMLProducer1: THTMLEntityProducer;
private
{ private declarations }
public
{ public declarations }
end;
var
FPWebModule1: TFPWebModule1;
implementation
{$R *.lfm}
initialization
RegisterHTTPModule('TFPWebModule1', TFPWebModule1);
end.
A única alteração virá como resultado da colocação de um componente THTMLEntityProducer da paleta fpweb.
Selecione o WebModule, e clique em sua propriedade Actions (que inicia com o valor 0 items). Aparece uma caixa de diálogo, onde você deverá pressionar o botão Add. Clicando na nova ação (action) aparecem as suas propriedades no Object Inspector. Clique então em Contents e coloque um trecho de HTML como abaixo:
<H1>HTMLEntityProducer</H1>
<P>Action 1</P>
Coloque o valor True na propriedade Default.
Compile e coloque o executável em um diretório com autorização de execução de cgis em um servidor web. Se você executar este programa pelo Lazarus, ele mostrará a mensagem:
Project <nome do projeto> raised Exception Class 'Exception' with message:
No REQUEST_METHOD passed from server.
Os fóruns de discussão da Internet não foram capazes de esclarecer os usuários do Lazarus de forma correta a respeito deste erro e nem do uso correto dos componentes fpweb. Foi preciso um enorme esforço para descobrir estas informações, sem documentação. Por isso estamos colocando esta ajuda para os "abandonados pelos técnicos".
Vamos a algumas particularidades da programação em CGI que o tornam mais conveniente que o ISAPI em determinadas situações.
O ISAPI precisa ser preparado a base de objetos, forma de concepção de programação que exige planejamento anterior. Após o planejamento de métodos e propriedades que o objeto vai ter, é preciso utilizar ferramentas Microsoft de construção e dominar terminologias de construção que mudam de ano para ano e que provocam o advento de ferramentas cada vez mais complexas.
Se você desejar fazer uma aplicação simples de banco de dados e desejar ler um banco de dados em um arquivo TXT com uma certa estrutura, ou um XML, vai ter que dominar os aborrecidíssimos e instáveis objetos Microsoft, e que são portas para invasão, devido à não checagem de invasão de áreas de memória.
O Lazarus Pascal
O Lazarus Pascal, clone quase idêntico 100 % ao Delphi, possui componentes e capacidades já bem construídos em função das numerosas inconsistências do seu semelhante. Instale os dois pacotes do diretório:
<Diretório de Instalação>\Lazarus\Components\fpweb
Os pacotes a serem instalados são (nesta ordem):
weblaz.lpk
lazwebextra.lpk
Utilize a opção do menu:
Package => Open Package file (lpk)
Compile e Instale ambos, NA ORDEM QUE RECOMENDAMOS.
Se tudo correr bem, o Lazarus vai reiniciar.
Primeira versão - Utilizando o objeto TCustomCGIApplication
Inicie um novo projeto do tipo console.
program project1;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, httpDefs, custcgi, custweb
{ you can add units after this };
Type
TMyCGIApp = Class(TCustomCGIApplication)
Protected
function InitializeWebHandler: TWebHandler; override;
end;
TMyCGIHandler = class(TCGIHandler)
public
procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
end;
{$R *.res}
Procedure TMyCGIHandler.HandleRequest(ARequest : Trequest; AResponse : TResponse);
begin
AResponse.Content := '<H1>Hello</H1>';
end;
function TMyCGIApp.InitializeWebHandler: TWebHandler;
begin
Result := TMyCGIHandler.Create(self);
end;
begin
With TMyCGIApp.Create(Nil) do
try
Initialize;
Run;
finally
Free;
end;
end.
Segunda versão - Usando fpweb e o WebModule
Utilize a opção de novo projeto do tipo CGI Application.
A unit gerada nem precisará ser mexida:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, HTTPDefs, websession, fpHTTP, fpWeb, fphtml;
type
{ TFPWebModule1 }
TFPWebModule1 = class(TFPWebModule)
HTMLProducer1: THTMLEntityProducer;
private
{ private declarations }
public
{ public declarations }
end;
var
FPWebModule1: TFPWebModule1;
implementation
{$R *.lfm}
initialization
RegisterHTTPModule('TFPWebModule1', TFPWebModule1);
end.
A única alteração virá como resultado da colocação de um componente THTMLEntityProducer da paleta fpweb.
Selecione o WebModule, e clique em sua propriedade Actions (que inicia com o valor 0 items). Aparece uma caixa de diálogo, onde você deverá pressionar o botão Add. Clicando na nova ação (action) aparecem as suas propriedades no Object Inspector. Clique então em Contents e coloque um trecho de HTML como abaixo:
<H1>HTMLEntityProducer</H1>
<P>Action 1</P>
Coloque o valor True na propriedade Default.
Compile e coloque o executável em um diretório com autorização de execução de cgis em um servidor web. Se você executar este programa pelo Lazarus, ele mostrará a mensagem:
Project <nome do projeto> raised Exception Class 'Exception' with message:
No REQUEST_METHOD passed from server.
Os fóruns de discussão da Internet não foram capazes de esclarecer os usuários do Lazarus de forma correta a respeito deste erro e nem do uso correto dos componentes fpweb. Foi preciso um enorme esforço para descobrir estas informações, sem documentação. Por isso estamos colocando esta ajuda para os "abandonados pelos técnicos".
Assinar:
Postagens (Atom)