Ajuda - Busca - Membros - Calendário
Versão Completa: Inicialização Do Windows
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Valdecir Peres
Alguém pode me ajudar com este artigo, pois não consegui copilar o programa

Bom, nesse artigo, vou mostrar com fazer seu programa iniciar juntamente com o Windows.



Adiciona na Uses da Unit 'Registry'

e depois:

Procedure CriaStartup(NomeDoPrograma, LocalDoPrograma: String);

var

Reg : TRegistry;

Begin

Reg := TRegistry.Create;

Reg.RootKey := HKEY_CURRENT_USER;

// foi adicionado na RootKey o valor HKEY_CURRENT_USER para ser iniciado o programa apenas se for iniciado o usuário atual. Para ser iniciado com todos usuarios, troque o HKEY_CURRENT_USER por HKEY_LOCAL_MACHINE

Reg.RootKey('SOFTWAREMicrosoftWindowsCurrentVersionRun', False);

Reg.WriteString(NomeDoPrograma, LocalDoPrograma);

Reg.CloseKey;

Reg.Free;

End;


Demais artigos incluidos por Jeferson Jose dos Santos Junior

Thales Pontes Martins
QUOTE
Reg.RootKey('SOFTWAREMicrosoftWindowsCurrentVersionRun', False);
Acho que você tá cometendo alguns errinhos aí, tente ->

CODE
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False);
Valdecir Peres
Cara beleza por este passou, só que estou recebendo o seguintes erros ainda no código

Procedure TFRacesso.CriaStartup(ControleFinanceiro, C:\Documents and Settings\Administrador\Meus documentos\Valdecir\VdlSistemasfontes\VDL Sistemas - PHT: String);
var Reg : TRegistry;
Begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
Reg.WriteString(ControleFinanceiro, C:\Documents and Settings\Administrador\Meus documentos\Valdecir\VdlSistemasfontes\VDL Sistemas - PHT);
Reg.CloseKey;
Reg.Free;
End;

Recebi este erros

[Error] vdlacesso.pas(31): Illegal character in input file: '\' ($5C)
[Error] vdlacesso.pas(31): ';', ')' or '=' expected but 'AND' found
[Error] vdlacesso.pas(31): Illegal character in input file: '\' ($5C)
[Error] vdlacesso.pas(31): Missing parameter type
[Error] vdlacesso.pas(47): Illegal character in input file: '\' ($5C)
[Error] vdlacesso.pas(47): ';', ')' or '=' expected but 'AND' found
[Error] vdlacesso.pas(47): Illegal character in input file: '\' ($5C)
[Error] vdlacesso.pas(47): Missing parameter type
[Error] vdlacesso.pas(54): ')' expected but ':' found
[Error] vdlacesso.pas(54): Illegal character in input file: '\' ($5C)
[Error] vdlacesso.pas(54): Operator not applicable to this operand type
[Fatal Error] vdlincluirfornecdesp.pas(78): Could not compile used unit 'vdlacesso.pas'

Agora cara como isso vai inicializar com o Windows, você sabe me explicar, tenho que fazer mais alguma coisa

Abraços


Thales Pontes Martins
você tá doidão cara, tá fazendo umas coisas muito erradas. Por que você colocou o caminho do seu programa como identificador de parametro do seu procedimento? Tenta assim->
CODE
Procedure TFRacesso.CriaStartup(ControleFinanceiro : String);
var Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
  Reg.WriteString(ControleFinanceiro, ParamStr(0));
  Reg.CloseKey;
  Reg.Free;
End;
Valdecir Peres
Cara beleza, deu certo só que na matéria que vi nas colunas do site, diz que o sistema iniciaria junto com o Windows, e isto não está acontecendo, tá certo isto tem lógica este procedimento.

Tem como de um sistema ao clicar em um botão eu abrir outro sistema desenvolvido em delphi.

Outra coisa Cara Doidão não, estou aprendendo.

Obrigado pela força

Abraços

Valdecir
Thales Pontes Martins
QUOTE
Cara beleza, deu certo só que na matéria que vi nas colunas do site, diz que o sistema iniciaria junto com o Windows, e isto não está acontecendo, tá certo isto tem lógica este procedimento.
O procedimaneto tem sentido sim. O que você está passando como parametro pro procedimento? Passe por exemplo CriaStartup('Controle');.

De qualquer maneira de uma olhada no seu regedit pra ver se a chave está lá mesmo.


QUOTE
Tem como de um sistema ao clicar em um botão eu abrir outro sistema desenvolvido em delphi.
Tem. Com o WinExec você pode abrir qualquer programa -> Winexec('c:\programa.exe', SW_SHOWNORMAL);
Valdecir Peres
Thales valeu, mas o que voce quiz dizer com isso

" O que você está passando como parametro pro procedimento? Passe por exemplo CriaStartup('Controle');."

Não entendi......

Abraços

Valdecir
Thales Pontes Martins
Funcionou????????????????????????


QUOTE
Thales valeu, mas o que voce quiz dizer com isso

" O que você está passando como parametro pro procedimento? Passe por exemplo CriaStartup('Controle');."

Não entendi......
Você tem que passar o nome do campo como parametro tipo 'ControleFinanceiro' e não o caminho do arquivo tipo 'C:\arquivos de programas\controle.exe'. O caminho do programa já é retornado por ParamStr(0).
Valdecir Peres
Thales obrigado por sua atenção, mas não funcionou, eu coloquei a procedure como você posto.

Procedure TFRacesso.CriaStartup(ControleFinanceiro : String);
var Reg : TRegistry;
Begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
Reg.WriteString(ControleFinanceiro, ParamStr(0));
Reg.CloseKey;
Reg.Free;
End;

Na realidade eu estou precisando de algo que faça o sistema inicializar junto com o Windows, e procurando achei este código na internet, mas não consegui fazer funcionar.
Por isso comecei mondar um projeto com um único form. A idéia é a seguinte: Colocar este projeto na pasta de inicializar do Menu Iniciar do Windwos e deste form chamar o outro sistema só que já estou me deparando com alguns problemas, espero que você possa me ajudar.

O que eu preciso é o seguinte:
Que o programa filtre os documentos vencidos, e só abra este form se houver documentos vencidos. (Coloquei no form um dbgrid apontado para tabela documentos)

Coloquei no evento Show do form o seguinte procedimento.

procedure TFRlembrdoc.FormShow(Sender: TObject);
begin
If (not IBTransaction1.InTransaction)then
IBTransaction1.StartTransaction;
TBcaddoc.Open;
TBcaddoc.IndexFieldNames := 'DTAVVCTO';
If TBcaddoc.Fieldbyname('DTAVVCTO').Value<Date then
FRlembrdoc.Show
else
Application.Terminate;

Só que mesmo quando a data de aviso é menor que a data atual o form não abre,
Tem como resolver isto, tem como fazer isto............???????????

Thales me ajuda.

Abraços

Valdecir
Progr'amador
Olá Valdecir,

nessa linha:
QUOTE
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
você está usando FALSE, e na verdade seria TRUE

QUOTE
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',True);
acho que o Thales não observou isso

em todo caso se não funcionar no Planeta Delphi tem um componente que faz isso.
só que você tem se registrar, e vai na opção Pesquisa e digite exatamente: Iniciar sua aplicacao ao logon do windows,
que vai te trazer o componente.

Abs. Progr'amador.
Valdecir Peres
Pessoal não funcionou, será que vocês não podem me ajudar com a segunda idéia, pra mim vai ser mais viável.

Abraços

Valdecir

huh.gif unsure.gif
Progr'amador
QUOTE(Valdecir Peres @ Nov 8 2006, 04:50 PM) *

Pessoal não funcionou, será que vocês não podem me ajudar com a segunda idéia, pra mim vai ser mais viável.

Abraços

Valdecir

huh.gif unsure.gif


Não, não, não colega!!!, você é brasileiro e "brasileiro não desiste nunca" biggrin.gif

tente assim:

CODE
Procedure TFRacesso.CriaStartup(ControleFinanceiro : String);
var Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
  Reg.WriteString(ControleFinanceiro, '"' + ParamStr(0) + '"');
  Reg.CloseKey;
  Reg.Free;
End;



Abs. Progr'amador.


Thales Pontes Martins
QUOTE
você está usando FALSE, e na verdade seria TRUE


QUOTE

Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',True);
acho que o Thales não observou isso


Acho que não deveria ser TRUE já que a chave é suposta a já existir. E esse parametro TRUE cria a chave caso não exista. O mais provável é que o colega esteja fazendo alguma coisa errada.
s3c
Experimente trocar:
CODE
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
Por
CODE
Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
Progr'amador
QUOTE(s3c @ Nov 9 2006, 10:02 AM) *

Experimente trocar:
CODE
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
Por
CODE
Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);


Olá s3c,
Acredito que não seja isso, eu fiz aqui e deu certo, acho que o erro é no código do cara mesmo.

---------

Valdecir,
Posta sua unit inteira pra que possamos da uma olhada, ok?

ABs. Progr'amador.
s3c
Olá Progr'amador, comigo se colocar Software sem "\" ele falha no Reg.OpenKey.
Valdecir Peres
Cara, não vou precisar mandar a unit “ FUNCIONOU “.
Com esta procedure.

Procedure TFRacesso.CriaStartup(ControleFinanceiro : String);
var Reg : TRegistry;
Begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
Reg.WriteString(ControleFinanceiro, '"' + ParamStr(0) + '"');
Reg.CloseKey;
Reg.Free;
End;

Agora posso abusar, tem como por uma condição pra abrir só se tiver algum documento vencido, e filtrar estes documentos num grid.

Cara se tiver vai fica muito bom..... tem que dá.

Abraços

Valdecir
Progr'amador
QUOTE(Valdecir Peres @ Nov 9 2006, 04:47 PM) *

Agora posso abusar, tem como por uma condição pra abrir só se tiver algum documento vencido, e filtrar estes documentos num grid.

Cara se tiver vai fica muito bom..... tem que dá.

Abraços

Valdecir

Da pra fazer o seguinte:

Ao abrir ele verifica se tem registro, se tiver fica aberto se não tiver fecha, entendeu!?

Abs. Progr'amador.
Thales Pontes Martins
QUOTE(s3c @ Nov 9 2006, 10:02 AM) *

Experimente trocar:
CODE
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
Por
CODE
Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);


Exatamente. Realmente na documentação do Delphi está escrito que é necessário essa contra barra antes.


Abraço.
Valdecir Peres
QUOTE
Da pra fazer o seguinte:

Ao abrir ele verifica se tem registro, se tiver fica aberto se não tiver fecha, entendeu!?

Abs. Progr'amador.

Cara fiz isso,

procedure TFRlembrdoc.FormShow(Sender: TObject);
begin
If (not IBTransaction1.InTransaction)then
IBTransaction1.StartTransaction;
TBcaddoc.Open;
TBcaddoc.IndexFieldNames := 'DTAVVCTO';
If TBcaddoc.Fieldbyname('DTAVVCTO').Value<Date then
FRlembrdoc.Show
else
FRlembrdoc.Close;

Só que mesmo quando a data de aviso é menor que a data atual o form não abre,
Tem como resolver isto............???????????

Abraços

Valdecir
Progr'amador
Olá Valdecir,

Eu nunca usei esse componente IB*
Mas seria tipo assim:

Usando IBQuery
CODE
IBQuery1.Close;
IBQuery1.SQL.Add('Select * From Tabela Where DTAVVCTO <:nData');
IBQuery1.Params[0].Value := Date;
IBQuery1.Open;

If not (IBQuery1.RecordCount > 0) then
   Application.Terminate;


Abs. Progr'amador.
Valdecir Peres
Pessoal deu pau, o sistema está iniciando junto com o Windows, só que ele inicia antes do Interbase, e recebo a seguinte mensagem “ UNAVAILABLE DATABASE “.
Caramba, consegui fazer todos os acertos, o form só abrir se tiver documentos vencidos e agora esse pau.
Tem como resolver isso, alguém sabe, tem idéia de como fazer este ajuste.

Abraços

Valdecir
Progr'amador
QUOTE(Valdecir Peres @ Nov 13 2006, 11:30 AM) *

Pessoal deu pau, o sistema está iniciando junto com o Windows, só que ele inicia antes do Interbase, e recebo a seguinte mensagem “ UNAVAILABLE DATABASE “.
Caramba, consegui fazer todos os acertos, o form só abrir se tiver documentos vencidos e agora esse pau.
Tem como resolver isso, alguém sabe, tem idéia de como fazer este ajuste.

Abraços

Valdecir

Cara,
Por que você não coloca no inicializar do Windows???
Inciar --> Programas --> Inicializar

Abs. Progr'amador.

wink.gif
Valdecir Peres
Cara já fiz isto, deu na mesma.

Será que não tem solução ???????


Abraços

Valdecir
Progr'amador
QUOTE(Valdecir Peres @ Nov 13 2006, 04:04 PM) *

Cara já fiz isto, deu na mesma.

Será que não tem solução ???????


Abraços

Valdecir

Certo, mas você apagou o que está no registro??? pra ficar somente com o do Inicilalizar

Abs. Progr'amador.

wink.gif
Valdecir Peres
Apaguei cara.

Você vê alguma solução............???????

Abraços

Valdecir



Progr'amador
Estranho!

Certifique-se que realmente não esta lá, abre o msconfig (no execultar digite msconfig), na guia Inicializar

Porque, eu entendo que esse Inicializar do menu Programa inicia depois do iniciar do registro e o Interbase está no registro, ou não?

P.S. Valdecir, que tal você se Registrar aqui no SB.

Abs. Progr'amador.

wink.gif
VDLR
QUOTE
Certifique-se que realmente não esta lá, abre o msconfig (no execultar digite msconfig), na guia Inicializar


Cara o que esta no inicializar do msconfig e o executável que está na pasta de inicializar, porque o registro que o sistema criou eu apaguei através do regedit.

QUOTE
Porque, eu entendo que esse Inicializar do menu Programa inicia depois do iniciar do registro e o Interbase está no registro, ou não?


Cara a inicialização do Interbase eu não sei quando acontece.

Registrei-me no SB, obrigado pela dica.

Abraços

Valdecir
Progr'amador
QUOTE
Cara o que esta no inicializar do msconfig e o executável que está na pasta de inicializar

Pow, foi mal, vacilei

Cara aí eu já num sei o que fazer huh.gif

Mas fica o apelo aos grandes... S, M, T smile.gif cool.gif

Abs. Progr'amador.

wink.gif
Thales Pontes Martins
QUOTE
Pessoal deu pau, o sistema está iniciando junto com o Windows, só que ele inicia antes do Interbase, e recebo a seguinte mensagem “ UNAVAILABLE DATABASE “.
Opa, esse erro é exceção? porque se for dá pra resolver, é só ficar tentando fazer a primeira operação que o programa faz com o banco com um try, até que não ocorra mais exceção.
VDLR
[quote Opa, esse erro é exceção? porque se for dá pra resolver, é só ficar tentando fazer a primeira operação que o programa faz com o banco com um try, até que não ocorra mais exceção]

Cara e como fazer isto, a Unit completa é esta, tem como você me ajudar

CODE
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BTcancelarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure BTiniciarsmsClick(Sender: TObject);
    Procedure CriaStartup(LembreteDoc : String);
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FRlembrdoc: TFRlembrdoc;

implementation

{$R *.dfm}

Procedure TFRlembrdoc.CriaStartup(LembreteDoc : String);
var Reg : TRegistry;
Begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
  Reg.WriteString(LembreteDoc, '"' + ParamStr(0) + '"');
  Reg.CloseKey;
  Reg.Free;
End;

procedure TFRlembrdoc.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   TBcaddoc.Close;
   TBcadequip.Close;
   TBcadextintor.Close;
   IBContrSMS.Connected:=False;
   Action := caFree;
   FRlembrdoc := NIL;
end;

procedure TFRlembrdoc.BTcancelarClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TFRlembrdoc.FormShow(Sender: TObject);
begin
  IBContrSMS.Connected:=True;
  If (not IBTransaction1.InTransaction)then
  IBTransaction1.StartTransaction;
//  CriaStartup('LembreteSMS');
  Edit1.Text := DateToStr(Date);

  TBcaddoc.Open;
  TBcaddoc.IndexFieldNames := 'DTAVVCTO';
  TBcaddoc.Filtered:=False;
  TBcaddoc.Filter:= 'DTAVVCTO <'+QuotedStr(FormatDateTime('MM/dd/yyyy', StrToDate(Edit1.Text)));
  TBcaddoc.Filtered:=True;

  TBcadequip.Open;
  TBcadequip.IndexFieldNames := 'DTAVCALIBR';
  TBcadequip.Filtered:=False;
  TBcadequip.Filter:= 'DTAVCALIBR <'+QuotedStr(FormatDateTime('MM/dd/yyyy', StrToDate(Edit1.Text)));
  TBcadequip.Filtered:=True;

  TBcadextintor.Open;
  TBcadextintor.IndexFieldNames := 'DTAVRECARGA';
  TBcadextintor.Filtered:=False;
  TBcadextintor.Filter:= 'DTAVRECARGA <'+QuotedStr(FormatDateTime('MM/dd/yyyy', StrToDate(Edit1.Text)));
  TBcadextintor.Filtered:=True;

  If (TBcaddocDTAVVCTO.Text = '') And (TBcadequipDTAVCALIBR.Text = '') And (TBcadextintorDTAVRECARGA.Text = '') then
  Application.Terminate;
end;

procedure TFRlembrdoc.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   If TBcaddoc.Fieldbyname('DTAVVCTO').Value<Date then
   Begin
   DBGrid1.Canvas.Font.Color := clRed;
   DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, state);
   end;
end;

procedure TFRlembrdoc.BTiniciarsmsClick(Sender: TObject);
begin
  WinExec('C:\Documents and Settings\Administrador\Meus documentos\Valdecir\VdlSistemasfontes\VDL - Controle SMS\ControleSMS.exe', SW_SHOWNORMAL);
  FRlembrdoc.Close;
end;

procedure TFRlembrdoc.DBGrid2DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   If TBcadequip.Fieldbyname('DTAVCALIBR').Value<Date then
   Begin
   DBGrid2.Canvas.Font.Color := clRed;
   DBGrid2.DefaultDrawDataCell(Rect, DBGrid2.columns[datacol].field, state);
   end;
end;

procedure TFRlembrdoc.DBGrid3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
if ((TBcadextintor.Fieldbyname('DTAVRECARGA').Value<Date) or (TBcadextintor.Fieldbyname('DTAVTESTEHIDR').Value<Date)) then
   Begin
   DBGrid3.Canvas.Font.Color := clRed;
   DBGrid3.DefaultDrawDataCell(Rect, DBGrid3.columns[datacol].field, state);
   end;
end;

end.]

Abraços

Valdecir
Thales Pontes Martins
Valdecir, poste código sempre dentro de caixa de código. Edite o seu post, selecione o código e clique no botão # em cima da caixa de texto que você está escrevendo.

QUOTE
Cara e como fazer isto, a Unit completa é esta, tem como você me ajudar.

Eu não entendo nada de banco de dados, mas perguntei se o erro que aparece tem alguma coisa do tipo "...raised exception...". Se for isso tem como resolver. Se não for também tem mas não me ocorre nada no momento.


Abraço.
VDLR
Cara o erro que dá e esse " UNAVAILABLE DATABASE "

Tem alguma idéia

Abraços

Valdecir
Progr'amador
Valdecir,

você consegue abrir normal depois que o windows é iniciado???


Abs. Progr'amador.

wink.gif
VDLR
Cara depois que dá este erro, eu dou ok e abre o form com o grid vazio, fechando o sistema e abrindo novamente funciona normal.

É mole cara

huh.gif

Abraços

Valdecir
s3c
Acho que o Interbase deve estar entrando como um serviço. Se for isso, vá no Interbase Manager, dê Stop no Banco, desflegue a caixa: Run Interbase as a service, clique em Startup Mode [Automatic], dê Start no Banco.
Vá no autorun do regedit e deverá parecer: Interbase Guardian.
Coloque seu programa abaixo dele.
Thales Pontes Martins
Caso não funcione a dica do mestre s3c, você tira uma fotografia desse erro e manda pro meu e-mail -> thalespo@terra.com.br. Porque você não tá sabendo muito bem explicar que tipo de erro é esse.


Abraço.
s3c
Este erro: Unavailable Database ocorre comigo também quando o Banco não está no ar e o programa tenta a conexão. Se o Banco entra como serviço e o programa está no autorun, parece que o programa entra antes que o serviço.
Aproveitando, alguém saberia a sequência de execuções na inicialização do Windows ?
Seria: Run no regedit, Startup, Services ?
Thales Pontes Martins
QUOTE(s3c)
Este erro: Unavailable Database ocorre comigo também quando o Banco não está no ar e o programa tenta a conexão. Se o Banco entra como serviço e o programa está no autorun, parece que o programa entra antes que o serviço.
Mas por favor responda a minha pergunta: Esse erro é exceção?
s3c
QUOTE
Mas por favor responda a minha pergunta: Esse erro é exceção?
Sim você pode pegá-lo no try/except.
Thales Pontes Martins
Então deveria ser assim->
O primeiro comando que é executado no banco é o do OnFormShow ->

CODE
var
  BaseDown : boolean;
begin
  baseDown:=True;
  repeat
  try
    IBContrSMS.Connected:=True;
    BaseDown:=false;
  except BaseDown:=true;
  end;
  Sleep(400);
  until not(BaseDown);
  .
  .
  .
end;

Ou estou errado?
s3c
Sim, dessa forma o programa esperaria o Banco entrar no ar e as exceções não seriam lançadas.
Ps: Seria bom colocar um contador no caso do Banco não iniciar.
CODE
var iVezes:Byte;
begin
  iVezes := 0;
  While not IBContrSMS.Connected and (iVezes < 25) do
  begin
    try
      IBContrSMS.Open;
    except
      Inc(iVezes);
      Sleep(400);
    end;
  end;
  if not IBContrSMS.Connected then
    IBContrSMS.Open; // Força a exceção para ver o erro
end;
Thales Pontes Martins
Bom, no caso da primeira exceção ele retorna do procedimento não é isso? Porque no caso eu pensei em colocar um exit depois da primeira exceção já que não há nada a fazer depois, mas acho que não deve ser necessário, né?

Outra dúvida, quando ele for ler a propriedade connected no inicio do loop ele já não vai causar uma exceção se o banco não estiver presente?
s3c
QUOTE
Bom, no caso da primeira exceção ele retorna do procedimento não é isso?
Não, ele fica tentando até 25 vezes.
QUOTE
Porque no caso eu pensei em colocar um exit depois da primeira exceção já que não há nada a fazer depois, mas acho que não deve ser necessário, né?
Se quiser abortar na primeira vez, ele já está fazendo com o código que ele postou.
QUOTE
Outra dúvida, quando ele for ler a propriedade connected no inicio do loop ele já não vai causar uma exceção se o banco não estiver presente?
Não, a propriedade é do objeto TIBDatabase; daria erro se o objeto não estivesse instanciado.
Thales Pontes Martins
QUOTE
Não, ele fica tentando até 25 vezes. Se quiser abortar na primeira vez, ele já está fazendo com o código que ele postou.
Desculpe, me expressei mal. eu perguntei se ele retorna do procedimento assim que ocorre uma exceção fora do try, ou seja, quando você força a exceção. Entendeu agora?

QUOTE

Não, a propriedade é do objeto TIBDatabase; daria erro se o objeto não estivesse instanciado.
quer dizer que ele não vai rodar algum método do tipo GetConnected e não vai dar erro de UNAVAILABLE DATABASE? Tem certeza?


Pena que o rapaz não se interessou mais.


ps. Eu esperaria umas 200 vezes, quem sabe o banco não teve tempo ainda.
VDLR
Pessoal desculpe a demora, pois estava na correria.
Funcionou com esta dica do s3C deu, agora está aparecendo o ícone do Interbase Guardian na barra de tarefa.
QUOTE
Acho que o Interbase deve estar entrando como um serviço. Se for isso, vá no Interbase Manager, dê Stop no Banco, desflegue a caixa: Run Interbase as a service, clique em Startup Mode [Automatic], dê Start no Banco.
Vá no autorun do regedit e deverá parecer: Interbase Guardian.
Coloque seu programa abaixo dele

Mas seria mais viável fazer como estes postes que vocês colocaram depois
Se eu colocar o sistema em rede será que vai funciona ?? no momento estou usando banco local

Abraços

Valdecir

wink.gif
s3c
Thales
QUOTE
Desculpe, me expressei mal. eu perguntei se ele retorna do procedimento assim que ocorre uma exceção fora do try, ou seja, quando você força a exceção. Entendeu agora?
Sempre pensei que qualquer exceção sem tratamento fosse igual a um Exit. Não é isso ?
QUOTE
quer dizer que ele não vai rodar algum método do tipo GetConnected e não vai dar erro de UNAVAILABLE DATABASE? Tem certeza?
Sim, se você ler Connected ele somente retorna o status(true/false); se você setar Connected é a mesma coisa que fazer: IBContrSMS.Open

VDLR
QUOTE
Mas seria mais viável fazer como estes postes que vocês colocaram depois
Bom, ai vai de cada projeto. Quando ele não entra como serviço, coloca um ícone na task e você facilmente consegue ver suas propriedades.
QUOTE
Se eu colocar o sistema em rede será que vai funciona ?? no momento estou usando banco local
Utilizo conexões em redes mas é de outra forma; espero que algum colega possa lhe ajudar sobre isso.
VDLR
Legal pessoal testei da outra forma e funcionou também, agora só preciso ver como por isto em rede, mas acho melhor iniciar um novo tópico.

Abraços a todos e muito obrigado

Valdecir

biggrin.gif biggrin.gif
Thales Pontes Martins
QUOTE
Legal pessoal testei da outra forma e funcionou também, agora só preciso ver como por isto em rede, mas acho melhor iniciar um novo tópico.
Tenho uma sugestão pra você: Leia o livro "Delphi a bíblia" todo e depois venha discutir.
s3c
"Delphi a bíblia" é muito bom; tem uma excelente parte sobre Banco de Dados.
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.