Fórum DELPHI - Access Violation e erro com FireDAC.Client #613364
28/11/2020
0
Pessoal, estou com um problema ao fazer o cadastro de aluno na minha aplicação. Quando o botão de cadastro é pressionado, dá um erro em FireDAC.client. Segue abaixo as units DAO do aluno, o formulario de cadastro, e a uDm.
unit uDM;
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.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, FireDAC.VCLUI.Wait, FireDAC.VCLUI.Login, FireDAC.Comp.UI,
Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.IBBase,
FireDAC.Phys.PG, FireDAC.Phys.PGDef, FireDAC.ConsoleUI.Wait;
type
TDM = class(TDataModule)
Conn: TFDConnection;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
{%CLASSGROUP 'System.Classes.TPersistent'}
{$R *.dfm}
end.
uses uAluno, uBaseDAO, System.SysUtils, System.Generics.Collections,
FireDAC.Comp.Client, FireDAC.Dapt, uDM, Data.DB;
type
TAlunoDAO = class(TBaseDAO)
private
FListarAluno: TObjectList<TAluno>;
procedure ListaAluno(Ds: TFDQuery);
public
constructor Create;
destructor Destroy;
function InserirAluno(pAluno: TAluno): Boolean;
function AlterarAluno(pAluno: TAluno): Boolean;
function ExcluirAluno(pAluno: TAluno): Boolean;
function VerificarLogin(Nome, Senha: string): Boolean;
function RecuperaNome(user: string): String;
function BuscaAluno: TObjectList <TAluno>;
end;
implementation
{ TAlunoDAO }
function TAlunoDAO.AlterarAluno(pAluno: TAluno): Boolean;
var
SQL: string;
Aluno: TAluno;
begin
SQL := 'UPDATE Aluno set Nome_Completo = '
+ QuotedStr(pAluno.NomeCompleto) + ', ' +
'data_nascimento = ' +
QuotedStr(FormatDateTime('yyyy-mm-dd,', paluno.DataNasc)) + ', '
+ 'senha = ' +
QuotedStr(pAluno.senha) +
'WHERE id_Aluno = ' + IntToStr(Aluno.Id_Aluno);
Result := ExecutarComando(SQL) > 0;
end;
function TAlunoDAO.BuscaAluno: TObjectList<TAluno>;
var
SQL: String;
begin
SQL := 'SELECT * FROM Aluno';
FQuery := RetornarDataSet(SQL);
if not(FQuery.isEmpty) then
begin
ListaAluno(FQuery);
Result := FListarAluno;
end;
end;
constructor TAlunoDAO.Create;
begin
FListarAluno := TObjectList<TAluno>.Create;
end;
destructor TAlunoDAO.Destroy;
begin
try
inherited;
if Assigned(FListarAluno) then
FreeAndNil(FListarAluno);
except
on e: exception do
raise exception.Create(e.Message);
end;
end;
function TAlunoDAO.ExcluirAluno(pAluno: TAluno): Boolean;
var
SQL: string;
Aluno: TAluno;
begin
SQL := 'DELETE FROM Aluno WHERE Nome_Aluno = ' +
IntToStr (Aluno.Id_Aluno);
Result := ExecutarComando(SQL) > 0;
end;
function TAlunoDAO.InserirAluno(pAluno: TAluno): Boolean;
var
SQL: string;
begin
SQL := 'INSERT INTO Aluno VALUES ( Default, '
+ QuotedStr(pAluno.nomeCompleto) +
', ' + QuotedStr(FormatDateTime('yyyy-mm-dd', pAluno.DataNasc)) + ', ' +
QuotedStr(pAluno.senha) + ')';
Result := ExecutarComando(SQL) > 0;
end;
procedure TAlunoDAO.ListaAluno(Ds: TFDQuery);
var
i: integer;
begin
i := 0;
FListarAluno.Clear;
while not Ds.Eof do
begin
FListarAluno.Add(TAluno.Create);
FListarAluno[i].Id_Aluno:= Ds.FieldByName('id_Aluno').AsInteger;
FListarAluno[i].nomeCompleto:= Ds.FieldByName('nome_completo').AsString;
FListarAluno[i].DataNasc:= Ds.FieldByName('data_nascimento').AsDateTime;
FListarAluno[i].Responsavel:= Ds.FieldByName('nome_Responsavel').AsString;
FListarAluno[i].Turma:= Ds.FieldByName('Serie').AsString;
FListarAluno[i].Turno:= Ds.FieldByName('Turno').AsString;
FListarAluno[i].senha := Ds.FieldByName('senha').AsString;
Ds.Next;
i := i + 1;
end;
end;
function TAlunoDAO.RecuperaNome(user: string): String;
var
SQL: String;
Retorno: TFDQuery;
begin
SQL := 'SELECT * FROM Aluno WHERE Nome_Completo = ' + QuotedStr(user);
if HaRegistro(SQL) > 0 then
Retorno := RetornarDataSet(SQL);
Result := Retorno.FieldByName('id_Aluno').AsString;
end;
function TAlunoDAO.VerificarLogin(nome, senha: string): Boolean;
var
SQL: string;
begin
SQL := 'SELECT * from Aluno WHERE Nome_Completo = ' + QuotedStr(Nome) +
' and senha = ' + QuotedStr(Senha);
Result := HaRegistro(SQL) > 0;
end;
end.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Menus,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
Vcl.Imaging.pngimage, Vcl.ExtCtrls, uAluno, uProfessor,
uPgInicialProf, uAlunoDAO, uProfessorDAO, System.UITypes,
System.Generics.Collections, Data.DB;
type
TFrmCadastroAluno = class(TForm)
Image1: TImage;
EdtNomeAluno: TEdit;
EdtNomeResponsavel: TEdit;
EdtSenha: TEdit;
EdtConfirmaSenha: TEdit;
DateAluno: TDateTimePicker;
CBSerie: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
BtCadastroAluno: TButton;
Label7: TLabel;
CBTurno: TComboBox;
Procedure CapturarEdit;
Procedure LimparEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PreencherListView(pListaAluno: TList <TAluno>);
procedure CarregarColecao;
procedure BtCadastroAlunoClick(Sender: TObject);
private
public
{ Public declarations }
end;
var
FrmCadastroAluno: TFrmCadastroAluno;
Aluno: TAluno;
AlunoDAO: TAlunoDAO;
LVListaAluno: TListView;
implementation
{$R *.dfm}
{ TFrmCadastroAluno }
procedure TFrmCadastroAluno.BtCadastroAlunoClick(Sender: TObject);
begin
CapturarEdit;
if AlunoDAO.InserirAluno(Aluno) = true then
MessageDlg('Aluno Cadastrado com Sucesso!', mtConfirmation, [mbOK], 1);
LimparEdit;
//PListarAluno.Show; Não tá funcionando
FrmCadastroAluno.Hide;
CarregarColecao;
end;
procedure TFrmCadastroAluno.CapturarEdit;
begin
Aluno.nomeCompleto:= edtNomeAluno.Text;
Aluno.DataNasc := DateAluno.DateTime;
Aluno.Responsavel := EdtNomeResponsavel.Text;
Aluno.Senha := edtSenha.Text;
Aluno.Senha := edtConfirmaSenha.Text;
Aluno.Turma := CBSerie.Text;
Aluno.Turno := CBTurno.Text;
end;
procedure TFrmCadastroAluno.CarregarColecao;
begin
try
PreencherListView(AlunoDAO.BuscaAluno);
except
on e: exception do
raise exception.Create(e.Message);
end;
end;
procedure TFrmCadastroAluno.FormCreate(Sender: TObject);
begin
DateAluno.DateTime := Now;
AlunoDAO := TAlunoDAO.Create;
Aluno := TAluno.Create;
end;
procedure TFrmCadastroAluno.FormDestroy(Sender: TObject);
begin
try
if Assigned(Aluno) then
FreeAndNil(Aluno);
if Assigned(AlunoDAO) then
FreeAndNil(AlunoDAO);
except
on e: exception do
raise exception.Create(e.Message);
End;
end;
procedure TFrmCadastroAluno.LimparEdit;
begin
edtNomeAluno.clear;
edtNomeResponsavel.clear;
CBTurno.clear;
CBSerie.clear;
end;
procedure TFrmCadastroAluno.PreencherListView(pListaAluno: TList <TAluno>);
var
I: integer;
tempItems: TListItem;
begin
if Assigned(pListaAluno) then
begin
LVListaAluno.clear;
for I := 0 to pListaAluno.Count - 1 do
begin
tempItems := LVListaAluno.Items.Add;
tempItems.Caption := (TAluno(pListaAluno[I]).nomeCompleto);
tempItems.Data := TAluno(pListaAluno[I]);
tempItems.SubItems.Add(TAluno(pListaAluno[I]).Responsavel);
tempItems.SubItems.Add(TAluno(pListaAluno[I]).Turma);
tempItems.SubItems.Add(TAluno(pListaAluno[I]).Turno);
end
end
else
ShowMessage('Nada Encontrado')
end;
end.
unit uDM;
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.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, FireDAC.VCLUI.Wait, FireDAC.VCLUI.Login, FireDAC.Comp.UI,
Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.IBBase,
FireDAC.Phys.PG, FireDAC.Phys.PGDef, FireDAC.ConsoleUI.Wait;
type
TDM = class(TDataModule)
Conn: TFDConnection;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
{%CLASSGROUP 'System.Classes.TPersistent'}
{$R *.dfm}
end.
Geovanna Biscaia
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)