Guest Valdecir Peres Postado Novembro 6, 2006 Denunciar Share Postado Novembro 6, 2006 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);varReg : 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Novembro 13, 2006 Denunciar Share Postado Novembro 13, 2006 Estranho!Certifique-se que realmente não esta lá, abre o msconfig (no execultar digite msconfig), na guia InicializarPorque, 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. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Novembro 13, 2006 Denunciar Share Postado Novembro 13, 2006 Certifique-se que realmente não esta lá, abre o msconfig (no execultar digite msconfig), na guia InicializarCara 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. 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çosValdecir Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Novembro 13, 2006 Denunciar Share Postado Novembro 13, 2006 Cara o que esta no inicializar do msconfig e o executável que está na pasta de inicializarPow, foi mal, vacileiCara aí eu já num sei o que fazer :huh: Mas fica o apelo aos grandes... S, M, T :) B) Abs. Progr'amador. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 Cara e como fazer isto, a Unit completa é esta, tem como você me ajudar 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çosValdecir Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 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.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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 Cara o erro que dá e esse " UNAVAILABLE DATABASE "Tem alguma idéiaAbraçosValdecir Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 Valdecir,você consegue abrir normal depois que o windows é iniciado???Abs. Progr'amador. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 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: AbraçosValdecir Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 15, 2006 Denunciar Share Postado Novembro 15, 2006 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 ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 15, 2006 Denunciar Share Postado Novembro 15, 2006 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 15, 2006 Denunciar Share Postado Novembro 15, 2006 Mas por favor responda a minha pergunta: Esse erro é exceção?Sim você pode pegá-lo no try/except. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 15, 2006 Denunciar Share Postado Novembro 15, 2006 Então deveria ser assim->O primeiro comando que é executado no banco é o do OnFormShow ->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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 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.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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 Bom, no caso da primeira exceção ele retorna do procedimento não é isso?Não, ele fica tentando até 25 vezes. 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.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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 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?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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 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.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 deleMas seria mais viável fazer como estes postes que vocês colocaram depoisSe eu colocar o sistema em rede será que vai funciona ?? no momento estou usando banco localAbraçosValdecir ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 ThalesDesculpe, 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 ?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.OpenVDLRMas seria mais viável fazer como estes postes que vocês colocaram depoisBom, 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.Se eu colocar o sistema em rede será que vai funciona ?? no momento estou usando banco localUtilizo conexões em redes mas é de outra forma; espero que algum colega possa lhe ajudar sobre isso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 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 obrigadoValdecir :D :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 16, 2006 Denunciar Share Postado Novembro 16, 2006 "Delphi a bíblia" é muito bom; tem uma excelente parte sobre Banco de Dados. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest 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
Link para o comentário
Compartilhar em outros sites
49 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.