Más temprano, el problema era con el dbxfb.dll DLL, podría resolver el problema de la mensaje de No se puede cargar falta dbxfb.dll , la instalación de este archivo dll en las carpetas
C: Windows System32
y
C: Windows SysWOW64
¿Por qué mi Windows Seven 64bits.Utimate
Ahora el problema ha cambiado, parece que no cree que la manera en que es el banco.
El código es este (incluso publicado la ruta donde está la orilla derecha allí para ver si iba a funcionar)
unit uConexao; interface uses SysUtils, SqlExpr; type (* Tipo de banco de dados *) TBancoDados = (ORACLE, FIREBIRD); (* Herça de TSQLConnection para retornar a classe já toda configurada *) TConexao = class(TSQLConnection) private { private declarations } (* variavel static para realiza o padrão singleton *) class var FTConexao: TConexao; (* O contrutor tem ser privatdo *) constructor create; (* onde são passados as configurações de conexão *) function ParametrosOracle: TConexao; function ParametrosFirebird: TConexao; protected { protected declarations } public { public declarations } (* ponto acesso da classe *) class function GetIntance(Banco: TBancoDados): TConexao; (* Metodo para retira da memória a instancia da classe *) class procedure FreeIntance; published { published declarations } end; implementation { TConexao } constructor TConexao.create; begin (* contrutor privado *) end; class procedure TConexao.FreeIntance; begin (* retira a variavel da memória *) FreeAndNil(FTConexao); end; class function TConexao.GetIntance(Banco: TBancoDados): TConexao; begin (* padrão singleton caso não acha instancia da classe ele cria *) (* se houver alguma instancia ele retorna a mesma *) if not Assigned(FTConexao) then begin case Banco of ORACLE: FTConexao := FTConexao.ParametrosOracle; //SQLSERVER: //FTConexao := FTConexao.ParametrosSqlServer; FIREBIRD: FTConexao := FTConexao.ParametrosFirebird; //MYSQL: //FTConexao := FTConexao.ParametrosMySql; end; end; Result := FTConexao; end; //Conexao Firebird function TConexao.ParametrosFirebird: TConexao; var Conn: TSQLConnection; sCaminhoDB: String; begin try Conn := TSQLConnection.create(nil); sCaminhoDB := 'localhost:C:Projeto MotoFreteBanco de Dadosmotofrete.fdb'; Conn.ConnectionName := 'FBCONNECTION'; Conn.DriverName := 'FIREBIRD'; Conn.LibraryName := 'dbxfb.dll'; Conn.VendorLib := 'fbclient.DLL'; Conn.GetDriverFunc := 'getSQLDriverINTERBASE'; (* passa o caminho do banco *) //Todo: Deixar flexivel depois Conn.Params.Add('Database='+sCaminhoDB); Conn.Params.Add('User_Name=SYSDBA'); Conn.Params.Add('Password=masterkey'); Conn.LoginPrompt := False; Conn.Open; //Linha comentada também não deu certo, o erro perciste (* with Conn do begin ConnectionName := 'FBCONNECTION'; DriverName := 'FIREBIRD'; GetDriverFunc := 'getSQLDriverINTERBASE'; LibraryName := 'dbxfb.dll'; LoginPrompt := False; Params.Add('BlobSize=-1'); Params.Add('CommitRetain=False'); Params.Add('Database=' + sCaminhoDB); Params.Add('ErrorResourceFile='); Params.Add('LocaleCode=0000'); Params.Add('Password=masterkey'); Params.Add('RoleName=RoleName'); Params.Add('ServerCharSet=UTF8'); Params.Add('SQLDialect=3'); Params.Add('Interbase TransIsolation=ReadCommited'); Params.Add('User_Name=SYSDBA'); Params.Add('WaitOnLocks=False'); VendorLib := 'fbclient.DLL'; Connected := true; end; *) (* Cast para Tconexao *) Result := (TConexao(Conn)); except raise Exception.Create('Erro ao conectar com o Banco de Dados. Possíveis causas: '+#13+ ' 1- Usuario Inválido '+#13+ ' 2- Senha Inválida '+#13+ ' 3- Caminho do Banco incorreto'); Exit; end; end; //Conexao Oracle function TConexao.ParametrosOracle: TConexao; var Conn: TSQLConnection; begin (* configuração com banco *) Conn := TSQLConnection.create(nil); Conn.DriverName := 'ORACLE'; Conn.LibraryName := 'dbxora.dll'; Conn.VendorLib := 'oci.dll'; Conn.GetDriverFunc := 'getSQLDriverORACLE'; Conn.Params.Add('Database=XE'); Conn.Params.Add('User_Name=motofrefe'); Conn.Params.Add('Password=123'); Conn.LoginPrompt := False; Conn.Open; (* Cast para Tconexao *) Result := (TConexao(Conn)); end; end.
Chamo assim a classe
procedure TfrmCadastroBase.btLocateClick(Sender: TObject); var qryLocal: TSQLDataSet; begin qryLocal := TSQLDataSet.Create(nil); try (* realiza a conexão com o banco *) dsLocal.DataSet := qryLocal; qryLocal.SQLConnection := TConexao.GetIntance(FIREBIRD); qryLocal.CommandText := 'SELECT * FROM usuarios'; qryLocal.Open; finally FreeAndNil(qryLocal); end; end;
¿No es el derecho de ... Más Aparece el siguiente error
Que procurei tratar num bloco try/except... Mais eu não sei o pq aponta para este erro, algo que não acha o caminho do banco de dados.
Debugando achei o que "parece" que o codigo esta fazendo
Não sei se é normal o que esta fazendo ai aonde aponto com a flecha.
Obrigado amigos.
Nota: Mi problema no es con el pájaro de fuego, pero con la XE nueva unidad para Delphi firebird. Lo siento si he publicado en la división equivocada del foro.