Fórum Dúvidas para finalizar o TCC x.x #478394
08/05/2014
0
Boa Tarde Galera!!
Então, indo direto ao assunto, eu tenho meu tcc para finalizar, tenho que entregá-lo segunda (12/05 :x) e no caso ainda estou com algumas duvidas ainda!
Uso o Delphi 7 e o SQL Server 2008. Com os componentes ADOConnection, ADOQuery, DataSource e ADODataSet.
Irei postar aqui, todas elas, se alguém puder me ajudar um pouquinho de cada dúvida já irá me ajudar muito!
1º
Estou com um problema na MDIForm e fsMDIChild... Estou usando um form de login (FControlaAcesso) no qual deixo ele no FORMSTYLE: fsNormal, um Form de menu principal (FMenu), no qual deixo ele no FORMSTYLE: MDIForm e os formulários filho (FCadastros), fsMDIChild.
O erro é o seguinte, eu faço o login tudo certinho, abre o menu, mas quando vou abrir um form filho, ele dá o seguinte erro: Project tcc.exe raised exception class EInvalidOperation with message 'Cannot create form. No MDI forms are currently active'. Process stopped. Use Step or Run to continue.
[url]http://imgur.com/bigv39M[/url]
Sendo que antes de eu colocar o código para fazer com o form de login (FControlaAcesso),para conectar com um usuario criado no banco, ele não dava esse erro, os forms filho abriam normal.
Uma coisa que tentei foi fazer o tutorial desse link: http://grayhat-z.blogspot.com.br/2011/11/cannot-create-form-no-mdi-are-currently.html mas com esse link, quando termino o que ele diz para fazer ai nem abre o programa.
Alguns códigos que usei para logar com o usuario do banco de dados foram esses:
No FControlaAcesso:
Na DPR:
2º
Gostaria de colocar no meu projeto, uma quantia de tentativas de senha, por exemplo se errar a senha 3 vezes o programa fecha... Tentei colocar já mas não deu muito certo... Creio que isso seja simples (pra vocês, nao pra mim kkk), so preciso saber onde colocar e qual código colocar :s
3º
Preciso fazer um relatório que pesquisa por datas, por exemplo se eu pesquiso assim:
Data Inicial: 12/05/2014 e Data Final: 18/05/2014
Aparece apenas um registro, se eu pesquiso com 2 semanas de diferença ele aparece 2 registros e assim por diante.
4º
Tenho um FormChild de Cadastro de Exames, ai ele tem um campo Lotes, no qual eu pesquiso o Lote, do cadastro de Lotes. Criei um Form de pesquisa, onde tem um grid, que armazena os dados do cadastro de lotes e gostaria que quando a pessoa selecionasse o registro no grid e clicasse em OK, ela fosse para o campo Lote, que tem no cadastro de exame, a princípio está assim:
[url]http://imgur.com/Gtn4aTI[/url]
No Botão OK:
No Botão CANCELAR:
No FormCreate:
Só que esse do form create eu coloquei como se eu tivesse usando o IBExpert, com SQLConnection, mas uso o ADOConnection, ADOQuery e assim por diante, gostaria de transformar esse código para SQL Server usando ADO.
5º
Criptografar senhas de usuarios no banco.
6º e ultimo rs:
Estou com um problema no cadastro de lotes, fiz da mesma forma, como fiz os outros cadastros, mesmos componentes, códigos iguais (so mudando os nomes) e mesmo eu preenchendo os campos do cadastro de Lotes ele vai tudo nulo para o banco de dados (isso procede para o grid também é claro).
Conferi os códigos passo a passo, está tudo igual, mas os outros cadastros vão normal para o banco só o de lote vai tudo nulo para o banco :/
Bom é isso, espero que vocês possam me ajudar em alguma dessas dúvidas... Muito Obrigada.
Então, indo direto ao assunto, eu tenho meu tcc para finalizar, tenho que entregá-lo segunda (12/05 :x) e no caso ainda estou com algumas duvidas ainda!
Uso o Delphi 7 e o SQL Server 2008. Com os componentes ADOConnection, ADOQuery, DataSource e ADODataSet.
Irei postar aqui, todas elas, se alguém puder me ajudar um pouquinho de cada dúvida já irá me ajudar muito!
1º
Estou com um problema na MDIForm e fsMDIChild... Estou usando um form de login (FControlaAcesso) no qual deixo ele no FORMSTYLE: fsNormal, um Form de menu principal (FMenu), no qual deixo ele no FORMSTYLE: MDIForm e os formulários filho (FCadastros), fsMDIChild.
O erro é o seguinte, eu faço o login tudo certinho, abre o menu, mas quando vou abrir um form filho, ele dá o seguinte erro: Project tcc.exe raised exception class EInvalidOperation with message 'Cannot create form. No MDI forms are currently active'. Process stopped. Use Step or Run to continue.
[url]http://imgur.com/bigv39M[/url]
Sendo que antes de eu colocar o código para fazer com o form de login (FControlaAcesso),para conectar com um usuario criado no banco, ele não dava esse erro, os forms filho abriam normal.
Uma coisa que tentei foi fazer o tutorial desse link: http://grayhat-z.blogspot.com.br/2011/11/cannot-create-form-no-mdi-are-currently.html mas com esse link, quando termino o que ele diz para fazer ai nem abre o programa.
Alguns códigos que usei para logar com o usuario do banco de dados foram esses:
No FControlaAcesso:
procedure TFControlaAcesso.FormCreate(Sender: TObject); begin FControlaAcesso.Caption := 'Controla o Acesso do Usuário'; // inicializa os objetos na tela, com um conteúdo FControlaAcesso.EB_USUARIO.Text := PegaNomeUsuario; FControlaAcesso.EB_SENHA.Text := ''; end;
procedure TFControlaAcesso.bConfirmaClick(Sender: TObject); begin VerificaSenha; end;
procedure TFControlaAcesso.VerificaSenha;
begin
with ADOQuery1 do
begin
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT NOME FROM USUARIOS where NOME = '+ QuotedStr(EB_USUARIO.Text)+' and senha = '+ QuotedStr(EB_SENHA.Text));
ADOQuery1.Active := True;
if recordcount > 0 then
begin
FMenu := TFMenu.Create(Application);
FMenu.ShowModal;
FMenu.BarraStatus.Panels[1].Text := 'Usuário: '+ EB_USUARIO.Text;
FMenu.Free;
end
else
begin
Application.MessageBox('Usuário Não Cadastrado ou Inativo, Favor Verificar cadastro','Aviso',MB_OK+MB_ICONINFORMATION);
EB_USUARIO.SetFocus;
end;
end;
end;Na DPR:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFControlaAcesso, FControlaAcesso);
// Cria o formulario do menu do sistema
Application.CreateForm(TFMenu, FMenu);
//verifica o resultado escolhido pelo usuario, ou seja, ok ou cancel
if (FControlaAcesso.ShowModal = mrOk) then
begin
//destroi o formulario do menu
FMenu.Destroy;
//destroi o formulario de acesso
FControlaAcesso.Destroy;
//fecha aplicação
Application.terminate;
end;2º
Gostaria de colocar no meu projeto, uma quantia de tentativas de senha, por exemplo se errar a senha 3 vezes o programa fecha... Tentei colocar já mas não deu muito certo... Creio que isso seja simples (pra vocês, nao pra mim kkk), so preciso saber onde colocar e qual código colocar :s
3º
Preciso fazer um relatório que pesquisa por datas, por exemplo se eu pesquiso assim:
Data Inicial: 12/05/2014 e Data Final: 18/05/2014
Aparece apenas um registro, se eu pesquiso com 2 semanas de diferença ele aparece 2 registros e assim por diante.
4º
Tenho um FormChild de Cadastro de Exames, ai ele tem um campo Lotes, no qual eu pesquiso o Lote, do cadastro de Lotes. Criei um Form de pesquisa, onde tem um grid, que armazena os dados do cadastro de lotes e gostaria que quando a pessoa selecionasse o registro no grid e clicasse em OK, ela fosse para o campo Lote, que tem no cadastro de exame, a princípio está assim:
[url]http://imgur.com/Gtn4aTI[/url]
No Botão OK:
procedure TFPesquisa.BitBtn1Click(Sender: TObject); begin ModalResult := mrOk; end;
No Botão CANCELAR:
procedure TFPesquisa.BitBtn2Click(Sender: TObject); begin ModalResult := mrCancel; end;
No FormCreate:
procedure TFPesquisa.FormCreate(Sender: TObject);
begin
// DataSourceP.DataSet.Locate('NOME',.Text,[loPartialKey, loCaseInsensitive]);}
end;Só que esse do form create eu coloquei como se eu tivesse usando o IBExpert, com SQLConnection, mas uso o ADOConnection, ADOQuery e assim por diante, gostaria de transformar esse código para SQL Server usando ADO.
5º
Criptografar senhas de usuarios no banco.
6º e ultimo rs:
Estou com um problema no cadastro de lotes, fiz da mesma forma, como fiz os outros cadastros, mesmos componentes, códigos iguais (so mudando os nomes) e mesmo eu preenchendo os campos do cadastro de Lotes ele vai tudo nulo para o banco de dados (isso procede para o grid também é claro).
Conferi os códigos passo a passo, está tudo igual, mas os outros cadastros vão normal para o banco só o de lote vai tudo nulo para o banco :/
Bom é isso, espero que vocês possam me ajudar em alguma dessas dúvidas... Muito Obrigada.
Daniele Souza
Curtir tópico
+ 0
Responder
Posts
08/05/2014
Daniele Souza
No FControlaAcesso:
aí vem o código do form create, que está, no post a cima
ai botão confirma, que está no post a cima, é foi isso que faltou :x
private function PegaNomeusuario: String;
procedure TFControlaAcesso.FormActivate(Sender: TObject); begin // inicializa os objetos na tela, com um conteúdo FControlaAcesso.EB_USUARIO.Text := PegaNomeUsuario; FControlaAcesso.EB_SENHA.Text := ''; end;
aí vem o código do form create, que está, no post a cima
function TFControlaAcesso.PegaNomeusuario : String; var NetUserNameLength : DWord; begin NetUserNameLength:= 50; SetLength(Result, NetUserNameLength); GetUserName(pChar(Result), NetUserNameLength); SetLength(Result, StrLen(pChar(Result))); end;
ai botão confirma, que está no post a cima, é foi isso que faltou :x
Responder
Gostei + 0
09/05/2014
Wilton Júnior
Respondendo sua 2 pergunta:
procedure TFrmJessiBasilio.finalizar;
begin
cont := cont + 1;
if cont > 3 then
begin
Application.MessageBox('Número de Tentativas Excedidas!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
Application.MessageBox('Software será Finalizado!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
Application.Terminate;
end;
end;
Essa procedure controla o numero de tentativa
if ((key = vk_return) or (key = vk_tab)) then
begin
with tabaux do
begin
close;
sql.Clear;
sql.add('select id, usuario, senha, status from tablogin where id = :wid');
if txtId.Text = '' then
parambyname('wid').asinteger := 0
else
parambyname('wid').AsString := TxtID.Text;
open;
end;
if tabaux.isempty then
begin
Finalizar;
Application.MessageBox('Usuário Não Cadastrado!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
TxtID.SetFocus;
exit;
end;
if tabaux.FieldByName('status').AsInteger = 1 then
begin
finalizar;
Application.MessageBox('Usuário Desabilitado! Entre em contato com seu suporte.','ATENÇÃO', MB_ICONWARNING + MB_Ok);
txtid.SetFocus;
exit;
end;
txtusuario.Text := tabaux.FieldByName('usuario').AsString;
wsenha := tabaux.FieldByName('senha').AsString;
id := tabaux.FieldByName('id').AsInteger;
TxtSenha.Enabled := true;
txtSenha.SetFocus;
exit;
end;
Essa procedure checa se usuário ta corrto ou não
if ((key = vk_return) or (key = vk_Tab)) then
begin
if wsenha <> TxtSenha.Text then
begin
Finalizar;
Application.MessageBox('Senha Incorreta para esse Usuário!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
Txtsenha.SetFocus;
exit;
end;
BtnConfirmar.Enabled := true;
BtnConfirmar.SetFocus;
Exit;
end;
aqui checa a senha.
Reposnde a terceira pergunta : select * from tabela where campo_data between datainicial and datafinal
http://www.w3schools.com/sql/sql_between.asp
procedure TFrmJessiBasilio.finalizar;
begin
cont := cont + 1;
if cont > 3 then
begin
Application.MessageBox('Número de Tentativas Excedidas!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
Application.MessageBox('Software será Finalizado!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
Application.Terminate;
end;
end;
Essa procedure controla o numero de tentativa
if ((key = vk_return) or (key = vk_tab)) then
begin
with tabaux do
begin
close;
sql.Clear;
sql.add('select id, usuario, senha, status from tablogin where id = :wid');
if txtId.Text = '' then
parambyname('wid').asinteger := 0
else
parambyname('wid').AsString := TxtID.Text;
open;
end;
if tabaux.isempty then
begin
Finalizar;
Application.MessageBox('Usuário Não Cadastrado!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
TxtID.SetFocus;
exit;
end;
if tabaux.FieldByName('status').AsInteger = 1 then
begin
finalizar;
Application.MessageBox('Usuário Desabilitado! Entre em contato com seu suporte.','ATENÇÃO', MB_ICONWARNING + MB_Ok);
txtid.SetFocus;
exit;
end;
txtusuario.Text := tabaux.FieldByName('usuario').AsString;
wsenha := tabaux.FieldByName('senha').AsString;
id := tabaux.FieldByName('id').AsInteger;
TxtSenha.Enabled := true;
txtSenha.SetFocus;
exit;
end;
Essa procedure checa se usuário ta corrto ou não
if ((key = vk_return) or (key = vk_Tab)) then
begin
if wsenha <> TxtSenha.Text then
begin
Finalizar;
Application.MessageBox('Senha Incorreta para esse Usuário!','ATENÇÃO', MB_ICONWARNING + MB_Ok);
Txtsenha.SetFocus;
exit;
end;
BtnConfirmar.Enabled := true;
BtnConfirmar.SetFocus;
Exit;
end;
aqui checa a senha.
Reposnde a terceira pergunta : select * from tabela where campo_data between datainicial and datafinal
http://www.w3schools.com/sql/sql_between.asp
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)