Erro ao Compilar código no Delphi 10.2 - RX
Olá membros do DevMedia. Estou tento um problema em compilar meu projeto. O começo desse projeto é em uma tela de configuração permitir que vá para a tela de menu principal somente se for colocado o caminho do Banco de Dados.
Estou utilizando o Delphi 10.2 - RX. Abaixo está o código separados por paginas criadas dentro do projeto. Acontece que está dando um erro ao compilar. Preciso da vossa ajuda, pois só posso dar continuidade no meu projeto apos essa etapa.
===== FORMULARIO PRINCIPAL ===== uPrincial (frmPrincipal)
===== DATA MODULE ===== uDmDados (dmDados)
1> FDConnection1 da palheta FireDAC
===== UNIT CRIADA A MÃO ====== uBiblioteca
===== FORMULARIO PRA CONFIGURAR O BANCO ===== uConfigBanco (frmConfigBanco)
1> Edit
1> Button
1> OpenDialog
==========================================================================
Acima esta as linhas de comando separadas por paginas
Quando clico em Shift + F9, o Delphi me da duas mensagens de erro:
[dcc32 Error] uDmDados.pas(35): E2250 There is no overloaded version of 'ExtractFieldName' that can be called with these arguments
e
[dcc32 Fatal Error] Cardigan.dpr(6): F2063 Could not compile used unit 'uDmDados.pas'
Segue imagem da tela: https://prnt.sc/mvayv4
Estou utilizando o Delphi 10.2 - RX. Abaixo está o código separados por paginas criadas dentro do projeto. Acontece que está dando um erro ao compilar. Preciso da vossa ajuda, pois só posso dar continuidade no meu projeto apos essa etapa.
===== FORMULARIO PRINCIPAL ===== uPrincial (frmPrincipal)
unit uPrincipal;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TfrmPrincipal = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmPrincipal: TfrmPrincipal;
implementation
{$R *.dfm}
end.===== DATA MODULE ===== uDmDados (dmDados)
1> FDConnection1 da palheta FireDAC
unit uDmDados;
interface
uses
System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.FB,
FireDAC.Phys.FBDef, FireDAC.VCLUI.Wait, Data.DB, FireDAC.Comp.Client,
uConfigBanco, uBiblioteca, Vcl.Forms;
type
TdmDados = class(TDataModule)
FDConnection1: TFDConnection;
procedure DataModuleCreate(Sender: TObject);
private
procedure CarregaBanco;
{ Private declarations }
public
{ Public declarations }
end;
var
dmDados: TdmDados;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
procedure TdmDados.CarregaBanco;
begin
try
FDConnection1.Params.Database := GetValorInicial(ExtractFieldName(Application.ExeName), 'CONFIGURACAO', 'LOCAL'); // erro ???
FDConnection1.Connected := True;
except
frmConfigBanco.ShowModal;
end;
end;
procedure TdmDados.DataModuleCreate(Sender: TObject);
begin
CarregaBanco;
end;
end.===== UNIT CRIADA A MÃO ====== uBiblioteca
unit uBiblioteca; interface uses IniFiles, System.SysUtils; procedure SetValorInicial(pLocal, pSessao, pSubSessao, pValor: string); function GetValorInicial (pLocal, pSessao, pSubSessao: string): string; implementation procedure SetValorInicial(pLocal, pSessao, pSubSessao, pValor: string); var vArquivo: TIniFile; begin vArquivo := TIniFile.Create(pLocal); vArquivo.WriteString(pSessao, pSubSessao, pValor); vArquivo.Free; end; function GetValorInicial (pLocal, pSessao, pSubSessao: string): string; var vArquivo : TIniFile; begin vArquivo := TIniFile.Create(pLocal); Result := vArquivo.ReadString(pSessao, pSubSessao, ''); vArquivo.Free; end; end.
===== FORMULARIO PRA CONFIGURAR O BANCO ===== uConfigBanco (frmConfigBanco)
1> Edit
1> Button
1> OpenDialog
unit uConfigBanco;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Vcl.ExtCtrls, // coloquei essa Vcl na mão
uBiblioteca;
type
TfrmConfigBanco = class(TForm)
Edit1: TEdit;
Button1: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
procedure Configura;
{ Private declarations }
public
{ Public declarations }
end;
var
frmConfigBanco: TfrmConfigBanco;
implementation
{$R *.dfm}
{ TfrmConfigBanco }
procedure TfrmConfigBanco.Button1Click(Sender: TObject);
begin
Configura;
end;
procedure TfrmConfigBanco.Configura;
var vFileName :string;
begin
//alt+f11 pra jogar a biblioteca dentro de interface
if OpenDialog1.Execute then
begin
Edit1.Text := OpenDialog1.FileName;
vFileName := ExtractFilePath(Application.ExeName) + 'config.ini';
SetValorInicial(vFileName, 'CONFIGURACAO', 'LOCAL', Edit1.Text);
end;
end;
end.==========================================================================
Acima esta as linhas de comando separadas por paginas
Quando clico em Shift + F9, o Delphi me da duas mensagens de erro:
[dcc32 Error] uDmDados.pas(35): E2250 There is no overloaded version of 'ExtractFieldName' that can be called with these arguments
e
[dcc32 Fatal Error] Cardigan.dpr(6): F2063 Could not compile used unit 'uDmDados.pas'
Segue imagem da tela: https://prnt.sc/mvayv4
Rubens Pena
Curtidas 0
Respostas
Rubens Pena
08/03/2019
Olá membros do DevMedia. Estou tento um problema em compilar meu projeto. O começo desse projeto é em uma tela de configuração permitir que vá para a tela de menu principal somente se for colocado o caminho do Banco de Dados.
Estou utilizando o Delphi 10.2 - RX. Abaixo está o código separados por paginas criadas dentro do projeto. Acontece que está dando um erro ao compilar. Preciso da vossa ajuda, pois só posso dar continuidade no meu projeto apos essa etapa.
===== FORMULARIO PRINCIPAL ===== uPrincial (frmPrincipal)
===== DATA MODULE ===== uDmDados (dmDados)
1> FDConnection1 da palheta FireDAC
===== UNIT CRIADA A MÃO ====== uBiblioteca
===== FORMULARIO PRA CONFIGURAR O BANCO ===== uConfigBanco (frmConfigBanco)
1> Edit
1> Button
1> OpenDialog
==========================================================================
Acima esta as linhas de comando separadas por paginas
Quando clico em Shift + F9, o Delphi me da duas mensagens de erro:
[dcc32 Error] uDmDados.pas(35): E2250 There is no overloaded version of ''ExtractFieldName'' that can be called with these arguments
e
[dcc32 Fatal Error] Cardigan.dpr(6): F2063 Could not compile used unit ''uDmDados.pas''
Segue imagem da tela: https://prnt.sc/mvayv4
Boa noite... Uma ajuda... Alguém. ?
Estou utilizando o Delphi 10.2 - RX. Abaixo está o código separados por paginas criadas dentro do projeto. Acontece que está dando um erro ao compilar. Preciso da vossa ajuda, pois só posso dar continuidade no meu projeto apos essa etapa.
===== FORMULARIO PRINCIPAL ===== uPrincial (frmPrincipal)
unit uPrincipal;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TfrmPrincipal = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmPrincipal: TfrmPrincipal;
implementation
{$R *.dfm}
end.===== DATA MODULE ===== uDmDados (dmDados)
1> FDConnection1 da palheta FireDAC
unit uDmDados;
interface
uses
System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.FB,
FireDAC.Phys.FBDef, FireDAC.VCLUI.Wait, Data.DB, FireDAC.Comp.Client,
uConfigBanco, uBiblioteca, Vcl.Forms;
type
TdmDados = class(TDataModule)
FDConnection1: TFDConnection;
procedure DataModuleCreate(Sender: TObject);
private
procedure CarregaBanco;
{ Private declarations }
public
{ Public declarations }
end;
var
dmDados: TdmDados;
implementation
{%CLASSGROUP ''Vcl.Controls.TControl''}
{$R *.dfm}
procedure TdmDados.CarregaBanco;
begin
try
FDConnection1.Params.Database := GetValorInicial(ExtractFieldName(Application.ExeName), ''CONFIGURACAO'', ''LOCAL''); // erro ???
FDConnection1.Connected := True;
except
frmConfigBanco.ShowModal;
end;
end;
procedure TdmDados.DataModuleCreate(Sender: TObject);
begin
CarregaBanco;
end;
end.===== UNIT CRIADA A MÃO ====== uBiblioteca
unit uBiblioteca; interface uses IniFiles, System.SysUtils; procedure SetValorInicial(pLocal, pSessao, pSubSessao, pValor: string); function GetValorInicial (pLocal, pSessao, pSubSessao: string): string; implementation procedure SetValorInicial(pLocal, pSessao, pSubSessao, pValor: string); var vArquivo: TIniFile; begin vArquivo := TIniFile.Create(pLocal); vArquivo.WriteString(pSessao, pSubSessao, pValor); vArquivo.Free; end; function GetValorInicial (pLocal, pSessao, pSubSessao: string): string; var vArquivo : TIniFile; begin vArquivo := TIniFile.Create(pLocal); Result := vArquivo.ReadString(pSessao, pSubSessao, ''''); vArquivo.Free; end; end.
===== FORMULARIO PRA CONFIGURAR O BANCO ===== uConfigBanco (frmConfigBanco)
1> Edit
1> Button
1> OpenDialog
unit uConfigBanco;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Vcl.ExtCtrls, // coloquei essa Vcl na mão
uBiblioteca;
type
TfrmConfigBanco = class(TForm)
Edit1: TEdit;
Button1: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
procedure Configura;
{ Private declarations }
public
{ Public declarations }
end;
var
frmConfigBanco: TfrmConfigBanco;
implementation
{$R *.dfm}
{ TfrmConfigBanco }
procedure TfrmConfigBanco.Button1Click(Sender: TObject);
begin
Configura;
end;
procedure TfrmConfigBanco.Configura;
var vFileName :string;
begin
//alt+f11 pra jogar a biblioteca dentro de interface
if OpenDialog1.Execute then
begin
Edit1.Text := OpenDialog1.FileName;
vFileName := ExtractFilePath(Application.ExeName) + ''config.ini'';
SetValorInicial(vFileName, ''CONFIGURACAO'', ''LOCAL'', Edit1.Text);
end;
end;
end.==========================================================================
Acima esta as linhas de comando separadas por paginas
Quando clico em Shift + F9, o Delphi me da duas mensagens de erro:
[dcc32 Error] uDmDados.pas(35): E2250 There is no overloaded version of ''ExtractFieldName'' that can be called with these arguments
e
[dcc32 Fatal Error] Cardigan.dpr(6): F2063 Could not compile used unit ''uDmDados.pas''
Segue imagem da tela: https://prnt.sc/mvayv4
GOSTEI 0
Raylan Zibel
08/03/2019
ExtractFILEName
GOSTEI 0
Hélio Devmedia
08/03/2019
Copiando a dica do nosso amigo Rylan, o problema é que você usou ExtractFieldName, mas o correto é ExtractFileName, ou se preferir utilizar a sintaxe mais moderna do delphi pode utilizar TPath.GetFileName('Application.ExeName').
GOSTEI 0
Rubens Pena
08/03/2019
Copiando a dica do nosso amigo Rylan, o problema é que você usou ExtractFieldName, mas o correto é ExtractFileName, ou se preferir utilizar a sintaxe mais moderna do delphi pode utilizar TPath.GetFileName('Application.ExeName').
Boa noite pessoal. Obrigado a vocês dois (Raylan Zibel e Hélio Devmedia). Deu certo e ao mesmo tempo não deu certo. Deu certo porque esta compilando sem erros. O que não ta dando certo é porque quando clico em F9 ele vai pra esse formulário que é o de localizar o banco de dados (segue imagem: http://prntscr.com/mx3f2x), localizo o diretório do banco e ele me traz o caminho como na imagem ( http://prntscr.com/mx3fm7 ), clico em OK e automaticamente o formulário fecha. Até ai tudo bem. Mas quando clico novamente em F9 ele não ta indo pra tela de Menu Inicial (Form Principal), ele ta voltando pra essa tela de CONFIGURAÇÃO DO BANCO novamente, e não é pra voltar já que foi feito a configuração do banco anteriormente. Fiz um debug para ver o que se passava e novamente me encontro enganchado, segue imagem das mensagens do debug ( http://prntscr.com/mx3joj).No formulário de conf do banco acrescentei duas linhas de codigo segue abaixo:
procedure TfrmConfigBanco.Configura;
var vFileName :string;
begin
//alt+f11 pra jogar a biblioteca dentro de interface
if OpenDialog1.Execute then
begin
Edit1.Text := OpenDialog1.FileName;
vFileName := ExtractFilePath(Application.ExeName) + 'config.ini';
SetValorInicial(vFileName, 'CONFIGURACAO', 'LOCAL', Edit1.Text);
ShowMessage('Banco de Dados Configurado.'); //codigo acrescentado
Self.Close; //codigo acrescentado
end;
end;E no DataModule fiz apenas uma alteração em uma das linhas de codigo
procedure TdmDados.CarregaBanco;
begin
try
FDConnection1.Params.Database := GetValorInicial(ExtractFieldName(Application.ExeName) + 'config.ini', 'CONFIGURACAO', 'LOCAL'); // codigo modificado nessa linha
FDConnection1.Connected := True;
except
frmConfigBanco.ShowModal;
end;Onde será o erro dessa vez? :)
GOSTEI 0
Hélio Devmedia
08/03/2019
O Erro está no código onde você utiliza a tecla F9!!! essa parte você não colocou o código.
GOSTEI 0
Rubens Pena
08/03/2019
O Erro está no código onde você utiliza a tecla F9!!! essa parte você não colocou o código.
A tecla F9 é o atalho no delphi pra compilar o projeto.
GOSTEI 0
Hélio Devmedia
08/03/2019
Poxa Rubens! Você acredita que eu pensei que que era uma tecla de atalho que voce tinha implementado para chamar a tela! KKK
Na verdade olhando a Imagem da sua depuração, percebi que onde está
GetValorInicial(ExtractFieldName(Application.ExeName) + 'config.ini', 'CONFIGURACAO', 'LOCAL'); // codigo modificado nessa linha
o que você deveria utilizar é ExtractFilePath(), para ele retornar o caminho do executável com uma '\\' (barra) no final sem o nome do executável, para concatenar com o nome do arquivo de configuração.
faça um teste e depois diga se funcionou.
Na verdade olhando a Imagem da sua depuração, percebi que onde está
GetValorInicial(ExtractFieldName(Application.ExeName) + 'config.ini', 'CONFIGURACAO', 'LOCAL'); // codigo modificado nessa linha
o que você deveria utilizar é ExtractFilePath(), para ele retornar o caminho do executável com uma '\\' (barra) no final sem o nome do executável, para concatenar com o nome do arquivo de configuração.
faça um teste e depois diga se funcionou.
GOSTEI 0
Rubens Pena
08/03/2019
Poxa Rubens! Você acredita que eu pensei que que era uma tecla de atalho que voce tinha implementado para chamar a tela! KKK
Na verdade olhando a Imagem da sua depuração, percebi que onde está
GetValorInicial(ExtractFieldName(Application.ExeName) + 'config.ini', 'CONFIGURACAO', 'LOCAL'); // codigo modificado nessa linha
o que você deveria utilizar é ExtractFilePath(), para ele retornar o caminho do executável com uma '\\\\' (barra) no final sem o nome do executável, para concatenar com o nome do arquivo de configuração.
faça um teste e depois diga se funcionou.
Deu certo. Agora sim ele esta reconhecendo o caminho do banco de dados e passando direto pra tela principal. Fiz o teste entrando na pasta config.ini e apaguei parte do caminho do banco pra ver se ele entrava na tela de configuracao. Deu certo. Reconheceu o caminho, passa pra principal. O codigo nessa linha ficou assim:Na verdade olhando a Imagem da sua depuração, percebi que onde está
GetValorInicial(ExtractFieldName(Application.ExeName) + 'config.ini', 'CONFIGURACAO', 'LOCAL'); // codigo modificado nessa linha
o que você deveria utilizar é ExtractFilePath(), para ele retornar o caminho do executável com uma '\\\\' (barra) no final sem o nome do executável, para concatenar com o nome do arquivo de configuração.
faça um teste e depois diga se funcionou.
FDConnection1.Params.Database := GetValorInicial(ExtractFilePath(Application.ExeName) 'config.ini', 'CONFIGURACAO', 'LOCAL');
>> entre o .ExeName) e 'config, tem um sinal de mais.
Não precisou colocar a '\\\\', ele ta gravando o caminho direitinho, que no meu caso é LOCAL=R:\\Rubens\\_MEGA DOWNLOADS\\Projeto Card em Delphi\\Dados\\DADOS.FDB
Obrigado pela atenção. Agora vou dar continuidade no meu projeto. Esse projeto é pequeno, mais de grande aprendizado para mim. Ele é para imprimir umas etiquetas.
GOSTEI 0