Erro ao Compilar código no Delphi 10.2 - RX
08/03/2019
0
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
Posts
10/03/2019
Rubens Pena
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
11/03/2019
Hélio Devmedia
13/03/2019
Rubens Pena
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? :)
13/03/2019
Hélio Devmedia
13/03/2019
Rubens Pena
13/03/2019
Hélio Devmedia
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.
13/03/2019
Rubens Pena
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.
Clique aqui para fazer login e interagir na Comunidade :)