Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 11 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
224 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Gerador de Consultas SQL com DBExpress para Firebird/SQLServer
Publicado por ActiveDelphi : Quarta, Fevereiro 20, 2008 - 12:09 GMT-3 (2673 leituras)
Comentários 5 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador 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



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: gilsonnrodrigues (gilsonnr@hotmail.com) : Fev 21, 2008 - 06:56
(Informações sobre o membro | Enviar uma mensagem)
cara tem como vc explicar esse código
especificamente esse ELSE e esse UPPERCASE.

o q eles fazem eu sei, quero saber pra que!

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


por: Banaggia (banaggia@gmail.com) : Fev 22, 2008 - 02:30
(Informações sobre o membro | Enviar uma mensagem) http://banaggia.110mb.com
Conforme foi descoberto, pelo o Sr. Gilson, existia um erro na hora que abria o arquivo de script, caso o checkbox tivesse marcado.

Anterior:
**********************************************
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;
**********************************************

Atualização:
**********************************************
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
Begin
Memo1.Lines.LoadFromFile(UpperCase(OpenDialog1.FileName));
Memo1.Lines.Text := UpperCase(Memo1.Lines.Text);
end
Else
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
End;
end;
**********************************************

[]'s
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados