Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

skybladerox

Erro Missing DriverName property

Recommended Posts

Bom dia,

 

Estou tendo problemas na hora que tento cadastrar um novo registro clicando no meu DBNavigator, aparece o seguinte erro: Exception Missing DriverName property

 

Não sei o que significa, já tentei deletar e colocar de novo o componente SQLConnection e mesmo assim o erro persiste.

 

Estou utilizando DBExpress + Firebird 2.5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode detalhar melhor como está sua aplicação? Postar seu código fonte para análise? Fica difícil descobrir o que pode ser sem ver o código ou entender o problema como um todo... você consegue se conectar ao banco normalmente? Exibir os dados? Dê mais detalhes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, conecta tudo certo no banco de dados. Único problema é esse erro mesmo do missing driver.

 

Segue o código fonte da janela de clientes:

 

unit UClientes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, DB, Grids, DBGrids, ExtCtrls, Buttons,
  ExtDlgs, FMTBcd, SqlExpr, DBClient, SimpleDS;

type
  TfrmClientes = class(TForm)
    DataSource1: TDataSource;
    Label1: TLabel;
    txtCodigo: TDBEdit;
    Label2: TLabel;
    txtNome: TDBEdit;
    Label3: TLabel;
    txtRazaoSocial: TDBEdit;
    Label4: TLabel;
    txtEndereco: TDBEdit;
    Label5: TLabel;
    txtBairro: TDBEdit;
    Label6: TLabel;
    txtMunicipio: TDBEdit;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    txtEmail: TDBEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    txtObs: TDBEdit;
    DBGrid1: TDBGrid;
    cmbUf: TDBComboBox;
    gpbPesqClientes: TGroupBox;
    btnCarregarFoto: TBitBtn;
    Panel1: TPanel;
    lblFoto: TLabel;
    txtPesqNomeCli: TEdit;
    Label17: TLabel;
    txtComp: TDBEdit;
    OpenPictureDialog1: TOpenPictureDialog;
    Image1: TImage;
    sql_aux_cliente: TSimpleDataSet;
    sql_aux_clienteCODIGO: TIntegerField;
    txtPesqCodCli: TEdit;
    lblCodigo: TLabel;
    Label18: TLabel;
    mskCep: TMaskEdit;
    mskTel: TMaskEdit;
    mskDataNasc: TMaskEdit;
    Label19: TLabel;
    mskDataCad: TMaskEdit;
    mskRg: TMaskEdit;
    mskCpf: TMaskEdit;
    mskCnpj: TMaskEdit;
    mskIe: TMaskEdit;
    DBNavigator1: TDBNavigator;
    procedure FormCreate(Sender: TObject);
    procedure btnCarregarFotoClick(Sender: TObject);
    procedure txtPesqNomeCliChange(Sender: TObject);
    procedure txtTelKeyPress(Sender: TObject; var Key: Char);
    procedure txtCepKeyPress(Sender: TObject; var Key: Char);
    procedure txtCpfKeyPress(Sender: TObject; var Key: Char);
    procedure txtRGKeyPress(Sender: TObject; var Key: Char);
    procedure txtCnpjKeyPress(Sender: TObject; var Key: Char);
    procedure txtIeKeyPress(Sender: TObject; var Key: Char);
    procedure txtDtNascKeyPress(Sender: TObject; var Key: Char);
    procedure cmbUfKeyPress(Sender: TObject; var Key: Char);
    procedure txtNomeKeyPress(Sender: TObject; var Key: Char);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure txtPesqNomeCliKeyPress(Sender: TObject; var Key: Char);
    procedure txtPesqCodCliChange(Sender: TObject);
    procedure txtPesqCodCliKeyPress(Sender: TObject; var Key: Char);
    procedure txtPesqCodCliExit(Sender: TObject);
    procedure txtPesqNomeCliExit(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmClientes: TfrmClientes;

implementation

uses UDataModule;

{$R *.dfm}

procedure TfrmClientes.cmbUfKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas letras
    if not ( Key in ['a'..'z',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas letras','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.DBGrid1CellClick(Column: TColumn);
begin
   //atualiza a foto
   Image1.Picture.LoadFromFile(DM.cds_clientesFOTO.AsString);

   //pega os valores dos maskedits
   mskCep.Text:= DM.cds_clientesCEP.AsString;
   mskTel.Text:= DM.cds_clientesTEL.AsString ;
   mskDataNasc.Text:= DM.cds_clientesDATA_NASC.AsString ;
   mskRg.Text:= DM.cds_clientesRG.AsString;
   mskCpf.Text:= DM.cds_clientesCPF.AsString ;
   mskCnpj.Text:= DM.cds_clientesCNPJ.AsString ;
   mskIe.Text:= DM.cds_clientesIE.AsString ;
end;

procedure TfrmClientes.DBNavigator1BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  //se o botão pressionado no DBNavigator for o 'delete'
  if Button = nbDelete then
    //exibe a mensagem e se for pressionado 'cancelar' aborta a operação
    if Application.MessageBox('Deseja excluir o registro selecionado?', 'Controle de Estoque v1.0', MB_ICONQUESTION + MB_OKCANCEL) = mrCancel then
      Abort;
end;

procedure TfrmClientes.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var
  ultcod: integer;
begin
    //se estiver em modo de inserção de registro
    if DM.cds_clientes.State in [dsInsert] then
    begin
      //incrementa o código automático
      sql_aux_cliente.Open;
      sql_aux_cliente.Last;
      ultcod:=sql_aux_clienteCODIGO.Value+1;
      DM.cds_clientesCODIGO.Value:=ultcod;
      sql_aux_cliente.Close;

      //coloca o foco no campo 'Nome'
      txtNome.SetFocus;

      //define a primeira opção de estado 'AC'
      cmbUf.Text := cmbUf.Items[0];

      //habilita o botão para carregar foto
      btnCarregarFoto.Enabled := True;

      //carrega a imagem padrão sem foto
      Image1.Picture.LoadFromFile('C:\Sistemas\Controle de Estoque\fotos\sem_foto.jpg');
     end
      else if DM.cds_clientes.State in [dsEdit] then
      begin
      //coloca o foco no campo 'Nome'
      txtNome.SetFocus;

      //define a primeira opção de estado 'AC'
      cmbUf.Text := cmbUf.Items[0];

      //habilita o botão para carregar foto
      btnCarregarFoto.Enabled := True;

      end
      else
      begin
        //atualiza a foto
        Image1.Picture.LoadFromFile(DM.cds_clientesFOTO.AsString);

        //pega os valores dos maskedits
        mskCep.Text:= DM.cds_clientesCEP.AsString;
        mskTel.Text:= DM.cds_clientesTEL.AsString ;
        mskDataNasc.Text:= DM.cds_clientesDATA_NASC.AsString ;
        mskRg.Text:= DM.cds_clientesRG.AsString;
        mskCpf.Text:= DM.cds_clientesCPF.AsString ;
        mskCnpj.Text:= DM.cds_clientesCNPJ.AsString ;
        mskIe.Text:= DM.cds_clientesIE.AsString ;
      end;
end;

procedure TfrmClientes.btnCarregarFotoClick(Sender: TObject);
begin
    //Abre janela para carregar a foto
    if OpenPictureDialog1.Execute then
    begin
      //Carrega a imagem selecionada
      DM.cds_clientes.Edit;
      Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
    end;
end;

procedure TfrmClientes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    //fecha o ClientDataSet para as operações
    DM.cds_clientes.Close;
end;

procedure TfrmClientes.FormCreate(Sender: TObject);
begin
    //abre o ClientDataSet para as operações
    DM.cds_clientes.Open;

    //carrega os valores do BD nos maskedits
    mskCep.Text := DM.cds_clientesCEP.AsString;
    mskTel.Text := DM.cds_clientesTEL.AsString;
    mskDataNasc.Text := DM.cds_clientesDATA_NASC.AsString;
    mskDataCad.Text := DM.cds_clientesDATA_CAD.AsString;
    mskRg.Text := DM.cds_clientesRG.AsString;
    mskCpf.Text := DM.cds_clientesCPF.AsString;
    mskCnpj.Text := DM.cds_clientesCNPJ.AsString;
    mskIe.Text := DM.cds_clientesIE.AsString;

    //Botões de Cadastro
    btnCarregarFoto.Enabled := False;

    //Carrega foto inicial
    Image1.Picture.LoadFromFile(DM.cds_clientesFOTO.AsString);
end;

procedure TfrmClientes.FormKeyPress(Sender: TObject; var Key: Char);
begin
  //se apertar a tecla 'ENTER' vai para o próximo campo
  if key = #13 then
  begin
    key:= #0;
    Perform(Wm_NextDlgCtl,0,0);
  end;
end;

procedure TfrmClientes.txtCepKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.txtCnpjKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.txtCpfKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.txtDtNascKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9','/',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.txtIeKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.txtNomeKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas letras
    if not ( Key in ['a'..'z',#13,#8,#32] ) then
    begin
      Application.MessageBox('Digite apenas letras','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.txtPesqCodCliChange(Sender: TObject);
begin
    //Pesquisa código do cliente
    DM.cds_clientes.Locate('CODIGO', txtPesqCodCli.Text, [loCaseInsensitive, loPartialKey]);

    //atualiza a foto
    Image1.Picture.LoadFromFile(DM.cds_clientesFOTO.AsString);
end;

procedure TfrmClientes.txtPesqCodCliExit(Sender: TObject);
begin
    //ao sair do campo, limpa.
    txtPesqCodCli.Text := '';
end;

procedure TfrmClientes.txtPesqCodCliKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9',#13,#8] ) then
     begin
       Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
       Key := #0;
     end;
end;

procedure TfrmClientes.txtPesqNomeCliChange(Sender: TObject);
begin
    //Pesquisa nome do cliente
    DM.cds_clientes.Locate('NOME', txtPesqNomeCli.Text, [loCaseInsensitive, loPartialKey]);

    //atualiza a foto
    Image1.Picture.LoadFromFile(DM.cds_clientesFOTO.AsString);
end;

procedure TfrmClientes.txtPesqNomeCliExit(Sender: TObject);
begin
    //ao sair do campo, limpa.
    txtPesqNomeCli.Text := '';
end;

procedure TfrmClientes.txtPesqNomeCliKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['a'..'z',#13,#8,#32] ) then
      begin
        Application.MessageBox('Digite apenas letras','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
        Key := #0;
      end;
end;

procedure TfrmClientes.txtRGKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

procedure TfrmClientes.txtTelKeyPress(Sender: TObject; var Key: Char);
begin
    //Validação de campo para aceitar apenas números
    if not ( Key in ['0'..'9',#13,#8] ) then
    begin
      Application.MessageBox('Digite apenas números','Aviso do Sistema', MB_ICONINFORMATION + mb_Ok);
      Key := #0;
    end;
end;

end.

 

O estranho é que estava funcionando antes e de repente começou a dar esse erro, sendo que não fiz modificação nenhuma especial, estava funcionando o incluir novo registro e alterar também, agora o incluir novo registro dá esse erro e o alterar não dá erro, mas também não altera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O cds_clientes é que tipo de componente? Você alterou alguma coisa neste form (inclusão de campos por exemplo) antes de começar a dar este erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

To usando Datamodule com arquitetura DBExpress (SqlConnection, SqlDataSet, DataSetProvider, ClientDataSet).

 

o cds_clientes é o ClienttDataSet nesse caso, não fiz modificação nenhuma, não sei ainda o porque desse erro, alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava vendo em alguns fóruns sobre este problema, e em quase todos vi o pessoal questionar como estava setada a propriedade loadparamsonconnect do sqlconnection, dizendo para passar ela para false. Como está esta propriedade no seu sqldataset associado ao clientdataset?

 

Outra coisa: você disse que recriou seu componente de conexão... verificou se todas as ligações no datamodule estão corretas? Se todos os providers, sqlconnection estão com as devidas configurações corretas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

a propriedade loadparasonconnect e loginprompt já estavam false. todas asconexões estão corretas sim, verifiquei e reverifiquei e continua o problema, eu vi rápido em outro lugar que dizia que limpando o registro do dbxconnections e copiando o conteúdo de novo resolvia, isso faz sentido? é válido? e se for como faço isso.

 

Pelo menos é uma idéia né, caso tenha outra avisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei como limpar este registro, mas lendo neste post http://www.delphigroups.info/2/3/781298.html , vi um trecho dele a informação abaixo:

 

 

It's a dbExpress BUG. In runtime you should manually set drivername.
1. ConnectionName := 'test'
2. DriverName := 'Interbase'
With best regards, Andrey Mogilny

 

Basicamente, está sugerindo setar em tempo de execução o drivername da conexão para o correto... não sei se resolve, mas não custa tentar (não costumo usar dbexpress então não manjo tanto dele).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei no evento FormCreate da minha tela principal (Uprincipal) o seguinte:

 

DM.SQLConnection1.ConnectionName := ''; (até pq o connecitonname já era vazio mesmo.)
DM.SQLConnection1.DriverName := 'Firebird'; (firebird pq é o driver e banco de dados que estou usando)
mesmo assim não funcionou, tentei colocando connectionname 'teste' também e nada... to sem saber como resolver, alguma idéia?
to sem conseguir cadastrar novos registros desse jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você faz a conexão ao banco de dados em runtime ou já deixa a configuração da conexão feita no próprio sqlconnection? Sugiro dar uma lida nestes links (http://docwiki.embarcadero.com/RADStudio/XE5/en/Setting_Up_TSQLConnection, http://www.activedelphi.com.br/forum/viewtopic.php?t=52682&highlight=dbexpress, http://conferences.embarcadero.com/article/32229 e http://www.swissdelphicenter.ch/en/showcode.php?id=1234), e revisar todo o seu processo de conexão... com certeza tem alguma coisa errada, mas sem poder debugar o código eu não tenho muito mais como ajudar... particularmente sempre li que há alguns bugs nos componentes do dbexpress e sempre preferi usar componentes ADO para os meus programas, então estou sem mais idéias pra lhe ajudar neste momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui descobrir era o componente auxiliar que estava utilizando para gerar código automático. tinha perdido o driver de conexão ele, deletei e voltou a funcionar.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Menos mal então... as vezes revisar os componentes é a solução (até tinha sugerido isso antes hehehehe).

 

Qualquer coisa tamos ai pra tentar ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.