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!



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;



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



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.



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.



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

Daniele Souza

Responder

Posts

08/05/2014

Daniele Souza

No FControlaAcesso:

 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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar