Analisando algumas situações que enfrentamos no nosso dia a dia em máquinas clientes, onde muitas vezes precisamos ter que instalar um gerenciador tipo IBExpert na máquina para gerarmos uma consulta SQL, criamos um programa para atender a nossa necessidade, que pode se conectar a qualquer base de dados Firebird ou SQLServer via DBExpress.
Considerando que já tenhamos conhecimentos sobre a tecnologia DBExpress
e SQL, vamos ao projeto:
1 - Abra o Delphi, crie um Novo Projeto e altere a propriedade
name do formulário para FrSql.
No Form Principal (FrSql), coloque os seguintes componentes e renomeie-os
conforme abaixo:

Figura 1 - Componentes para conexão com o banco
1 TSqlConnection = DADOS
1 TSqlDataSet = SDS_SQL
1 TClientDataSet = CDS_SQL
1 TDataSetProvider = DSP_SQ
1 TDataSource = DS_SQL
1 TMemo
1 TButton
1 MainMenu
1 CheckBox

Figura 2 - Interface Inicial do Formulário Principal
Configuração dos Componentes:
Componente Propriedade Componente de Ligação
DSP_SQL DataSet SDS_SQL
CDS_SQL ProviderName DSP_SQL
DS_SQL DataSet CDS_SQL
Deixando o Formulário assim:

Figura 3 - Inteface Final
do Formulário Principal
1.2- No evento OnClick do Button 1, digite o seguinte comando.
if Memo1.Text <> '' then {Se o Campo Memo não estiver vazio então Executa a SQL}
begin
CDS_SQL.Close; {Fecha o Sql}
SDS_SQL.CommandText:=Memo1.Text; {atribui o comando}
Try
CDS_SQL.Open; {abrindo o DataSet senão houver nenhum erro no sql}
Except
on E: Exception do
begin
{Apresenta a msg em caso de erro no SQL digitado}
ShowMessage('Comando Errado, Tente novamente' + #13#13 + E.Message);
Memo1.SetFocus;
end;
end;
end;
1.3 - No Evento OnKeyPress do Memo1 vamos colocar um código pra que os comando
sejam já escritos em Mauisculo.
procedure TFrmSql.Memo1KeyPress(Sender: TObject; var Key: Char);
var
conv : string[1];
begin
{Se a opção de Case Insensitive não estiver marcado, coloca tudo em Maiúsculo}
if not CheckBox1.Checked Then
begin
conv := ansiuppercase(key);
key := conv[1];
end;
end;
1.4 – Configurando o Menu do Sistema.

Figura 4 - Configurando o Menu Principal
1.4.1 - Evento para Salvar os Scripts em Formato .txt ou .sql para que se
possa guardar os comandos já escritos.
procedure TFrmSql.Salvar1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
1.4.2 - Evento para Abrir os Scripts em Formato .txt ou .sql com comandos
já escritos.
procedure TFrmSql.Abrir1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
If Not CheckBox1.Checked Then {Verifica o CheckBox1, se tiver marcado faz o ELSE}
Memo1.Lines.LoadFromFile( UpperCase( OpenDialog1.FileName ) )
Else
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
1.4.3 - Evento para Fechar o sistema.
procedure TFrmSql.Fechar1Click(Sender: TObject);
begin
Application.Terminate;
end;
1.4.4 - Evento para Trocar de Servidor.
procedure TFrmSql.rocardeServidor1Click(Sender: TObject);
begin
Application.CreateForm(TFrmLogon, FrmLogon);
FrmLogon.ShowModal;
FrmLogon.Release;
end;
2 - Adicione um Novo Formulário (File, New, Form) e nele adicione os seguintes
componentes:
4 TEdits
3 TButtons
1 TGroupBox
2 TCheckBox
4 TLabels
1 OpenDialog1
Renomeie a propriedade Caption do Form para “Logon de Acesso” e
a propriedade Name para FrmLogon.
Renomeie a propriedade name dos TEdits da seguinte forma:
- EdtUsuario(Edit1);
- EdtSenha(Edit2);
- EdtServidor(Edit3);
- EdtBase(Edit4);
Renomeie a propriedade Caption das labels da seguinte forma:
- Usuário(Label1);
- Senha(Label2);
- Servidor(Label3);
- Base(Label4);
Renomeie a propriedade Caption dos Buttons da seguinte forma:
- &Entrar (Button1);
- &Terminar(Button2);
- ...(Button3);
Renomeie a propriedade Caption das CheckBoxs da seguinte forma:
- FireBird (checkbox1);
- SQLServer (Checkbox2);
Renomeie a propriedade Caption das GroupBox da seguinte forma:
- Tipo de Servidor (GroupBox1)
Salve o form com o nome de Login. Seu form deve estar conforme
a figura abaixo

Figura 5 - Interface do Formulário de
Login
2.1 Evento OnClick do CheckBox1
procedure TFrmLogon.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
begin
//Habilia o botão para localizar a Base FireBird
Button3.Enabled := True;
EdtBase.Enabled := True;
CheckBox2.Checked := False;
EdtServidor.Enabled := False;
EdtUsuario.SetFocus;
end
else
begin
Button3.Enabled := False;
EdtBase.Enabled := True;
EdtUsuario.SetFocus;
end;
end;
2.2 Evento OnClick do Button2
procedure TFrmLogon.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked then
begin
//Desabilita o Botão para localizer a Base FireBird
Button3.Enabled := False;
EdtBase.Enabled := True;
EdtServidor.Enabled := True;
CheckBox1.Checked := False;
EdtUsuario.SetFocus;
end
else
begin
EdtBase.Enabled := True;
EdtServidor.Enabled := False;
EdtUsuario.SetFocus;
end;
end;
2.3 Evento OnClick do Button1
procedure TFrmLogon.Button1Click(Sender: TObject);
begin
//Setar as Variaveis no Form Principal
FrmSql.usuario := TrimRight(Edtusuario.Text);
FrmSql.senha := TrimRight(EdtSenha.Text);
FrmSql.servidor := TrimRight(EdtServidor.Text);
FrmSql.base := TrimRight(EdtBase.Text);
//Verifica se a conexao está ativa, se tiver desconecta.
if FrmSql.DADOS.Connected then
FrmSql.DADOS.Connected := False;
// Inicio da Conexão
try
//Verifica se o servidor é FireBird e configura o SQLConnection
if CheckBox1.Checked then
begin
FrmSql.DADOS.ConnectionName := 'FireBird15';
FrmSql.DADOS.DriverName := 'UIB Firebird15';
FrmSql.DADOS.GetDriverFunc := 'getSQLDriverINTERBASE';
FrmSql.DADOS.LibraryName := 'dbexpUIBfire15.dll';
FrmSql.DADOS.VendorLib := 'fbclient.dll';
FrmSql.DADOS.Params.Clear;
FrmSql.DADOS.Params.Add('DriverName=UIB Firebird15');
FrmSql.DADOS.Params.Add('CommitRetain= False');
FrmSql.DADOS.Params.Add('DataBase=' + EdtServidor.Text + ':' + EdtBase.Text);
FrmSql.DADOS.Params.Add('User_Name=' + Edtusuario.Text);
FrmSql.DADOS.Params.Add('Password=' + EdtSenha.Text);
FrmSql.DADOS.Params.Add('BlobSize=-1');
FrmSql.DADOS.Params.Add('ErrorResourceFile=');
FrmSql.DADOS.Params.Add('LocaleCode=0000');
FrmSql.DADOS.Params.Add('Interbase TransIsolation=ReadCommited');
FrmSql.DADOS.Params.Add('OS Authentication=False');
FrmSql.DADOS.Params.Add('WaitOnLocks= True');
end;
//Verifica se o Servidor é SQLServer e Configura o SQLConnection
if CheckBox2.Checked then
begin
FrmSql.DADOS.ConnectionName := 'MSSQLConnection';
FrmSql.DADOS.DriverName := 'MSSQL';
FrmSql.DADOS.GetDriverFunc := 'getSQLDriverMSSQL';
FrmSql.DADOS.LibraryName := 'dbexpmss.dll';
FrmSql.DADOS.VendorLib := 'oledb';
FrmSql.DADOS.Params.Clear;
FrmSql.DADOS.Params.Add('DriverName=MSSQL');
FrmSql.DADOS.Params.Add('HostName=' + EdtServidor.Text);
FrmSql.DADOS.Params.Add('DataBase=' + EdtBase.Text);
FrmSql.DADOS.Params.Add('User_Name=' + EdtUsuario.Text);
FrmSql.DADOS.Params.Add('Password=' + EdtSenha.Text);
FrmSql.DADOS.Params.Add('BlobSize=-1');
FrmSql.DADOS.Params.Add('ErrorResourceFile=');
FrmSql.DADOS.Params.Add('LocaleCode=0000');
FrmSql.DADOS.Params.Add('MSSQL TransIsolation=ReadCommited');
FrmSql.DADOS.Params.Add('OS Authentication=False');
end;
//Conecta ao servidor selecionado
FrmSql.DADOS.Connected := True;
except
on E: Exception do
begin
//Se existir erro limpa os edits e pede para verificar
MessageDlg('Não foi possível conectar! Verifique!' + #13#13 + E.Message,
mtInformation, [mbOk], 0);
Edtusuario.Clear;
Edtsenha.Clear;
EdtServidor.Clear;
EdtBase.Clear;
edtusuario.SetFocus;
end;
end;
if FrmSql.DADOS.Connected then //Se conseguiu conectar
begin // Habilita o Form principal e Fecha o Form do Login
FrmSql.Visible := True;
FrmSql.Caption := 'Acessando Servidor: ' + EdtServidor.Text + ' - Base: ' + EdtBase.Text;
if CheckBox1.Checked then
Application.Title := 'Acessando Servidor do Tipo : ' + CheckBox1.Caption
else
Application.Title := 'Acessando Servidor do Tipo : ' + CheckBox2.Caption;
FrmLogon.Close;
end;
end;
2.4 Evento OnClick do Button2
procedure TFrmLogon.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;
2.5 Evento do OnClick do Button3
procedure TFrmLogon.Button3Click(Sender: TObject); begin if OpenDialog1.Execute then EdtBase.Text := OpenDialog1.FileName; EdtBase.SetFocus; end;
2.6 Evento OnExit do EdtBase (TEDIT)
procedure TFrmLogon.EdtBaseExit(Sender: TObject);
var
ConfigIni: TIniFile;
begin
//Caso esteja selecionado Servidor Firebird
if FrmLogon.CheckBox1.Checked then
begin
ConfigIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Config.ini');
ConfigIni.WriteString('FireBird', 'Servidor', EdtServidor.Text);
ConfigIni.WriteString('FireBird', 'DataBase', EdtBase.Text);
ConfigIni.Free;
end;
//Caso esteja selecionado Servidor SqlServer
if FrmLogon.CheckBox2.Checked then
begin
ConfigIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Config.ini');
ConfigIni.WriteString('SqlServer', 'Servidor', EdtServidor.Text);
ConfigIni.WriteString('SqlServer', 'DataBase', EdtBase.Text);
ConfigIni.Free;
end;
end;
Pronto. O Form (FrLogon) está pronto, agora vamos fazer a seguinte alteração.
No evento FormShow do Form Principal (FrSql) coloque a seguinte instrução:
procedure TFrmSql.FormShow(Sender: TObject);
begin
Application.CreateForm(TFrmLogon, FrmLogon);
FrmLogon.ShowModal;
FrmLogon.Free;
end;
Agora o projeto está pronto pra ser usado. Caso necessário é só adaptá-lo
à sua situação e divertir-se com seus SQL's. Estamos abertos
a sugestões
e qualquer alteração no código para melhoria será bem
vinda.
Os fontes de exemplo podem ser baixados aqui.
Abraços!
Marco Banaggia -
Analista de Sistemas, atualmente desenvolvendo pequenos projetos em Delphi
7 e 2007 com o banco de dados SqlServer.
Contato:
banaggia@gmail.com
Site:
http://banaggia.110mb.com
Emerson Martins -
Analista de Sistemas, trabalhando em sistemas pequenos com Delphi
7 e Firebird, focando seus estudos em Modelagem de Dados e no Banco de Dados
Oracle 10G XE.
Contato:
emersonmartins8@hotmail.com
|