Ir para conteúdo
Fórum Script Brasil

Jhonas

Monitores
  • Total de itens

    9.657
  • Registro em

Tudo que Jhonas postou

  1. Voce quer fazer consulta em quantos arquivos ? qual o nome desses arquivos ? mostre como os numeros estão dentro do arquivo txt.
  2. Voce tem algumas formas de resolver isso: 1 - Criar uma tabela temporaria tipo: CodAnalises Res1 Res2 Res3 300 400 600 2,51 1,32 4,23 3,32 2,00 2,11 5,11 Obs: Nesse caso voce le a tabela original e move o resultado para os devidos campos da tabela temporaria e mostra isso no DBGrid. Se forem muitos valores no campo CodAnalises, voce pode substituir os campos Res1..Res3 por um campo Memo ( Blob ) e delimita o tamanho da string ( valores entre ponto e virgula ( ; ) delimitador ) 2 - Criar uma tabela com os campos da forma como voce quer visualizar 3 - Mostrar o conteudo num componente StringGrid .... é mais trabalhoso mas fica da forma como voce quer. 4 - Criar um QuickReport ou outro Report onde voce especifica como os dados do DBGrid serão mostrados no relatório abraço
  3. Ok... Se voce estver usando uma rotina do delphi para ler o conteudo da pagina web e jogar no memo, voce deve ter em mente, o tempo necessário para essa operação. Ou seja, tem o tempo que a rotina leva para ler o conteudo da pagina, o tempo que leva para jogar esse conteudo no memo ( se o texto for muito grande, vai precisar de mais tempo ) e o tempo determinado no timer para ler esse conteudo . ( 100 milisegundos é pouco ) Portanto, quero que voce faça um teste ai ... aumente o tempo do seu timer ( interval = 1000 equivale ao tempo de 1 segundo ) Primeiro começe com 1000 e veja o resultado, depois aumente para 2000 e veja novamente o resultado ... faça isso ate 5000 ( 5 segundos ) e veja o resultado . Preciso de uma forma do código me pegar o menor valor entre os dois números, não estou conseguindo uma forma de fazer isso. Para obter o menor valor, é necessário determinar se o menor valor é entre a tomada dos 2 ultimos valores obtidos (ou de um conjunto de valores) .. se sim, voce deve então armazenar os valores em 2 variaveis numericas e depois comparar o menor. abraço
  4. Eu tenho um edit que fica recebendo a quantidade de linhas de um memo e o conteúdo do memo vem de um timer;edit1.text:= floattostr(memo2.lines.count); Faltam informações: 1 - Qual o tempo que voce especificou no Timer ? 2 - De onde vem conteudo do memo ? 3 - O conteudo do memo fica sendo trocado ? 4 - o maior e o menor valor é do mesmo memo ?
  5. Reveja as definições de classes do seu relatório ou o caminho das Bpls. abraço
  6. Veja nesses Links: https://www.google.com.br/search?source=hp&ei=U7RYXLHaAoWa5gL7vJHgBA&q=atualizações+windows+7&o que=atualizações+windows+&gs_l=psy-ab.1.0.0l10.2143.8649..17717...0.0..0.281.3938.0j17j4......0....1..gws-wiz.....0..0i131j0i10.hWKRvdOTRvU abraço
  7. Foto do Chip de Rede ( onBoard ) do Micro http://www.bhl-electronics.com/pic/big/202_0.jpg Algum tempo atrás, durante uma tempestade com raios, um deles atingiu um swith de 8 portas. Em cada porta havia um cabo de rede conectando uma placa de rede On-Board ou uma placa Off-Board de um micro. Aconteceu de queimar o Swith de 8 portas , a fonte do swith, e todas as placas de rede On-Board e Off-Board de todos os micros ligados a ele. Em uma observação mais profunda nas placas mãe dos micros, verificou-se que o Chip de Rede ( RTL8111c ou outros modelos ) tambem haviam queimado. Se o chip entra em curto, ele superaquece, e a placa mãe não liga enquanto o chip não for retirado ou trocado por outro. Entretanto se o chip for apenas retirado, a placa mãe volta a funcionar mas fica sem a rede On-board, e nesse caso voce deve usar uma placa de rede Off-Board. Existe tambem o caso, do chip queimar, mas o micro continuar funcionando e mesmo com uma placa de rede Off-Board nova, voce não tem conexão com uma rede ou Internet. Colocando o dedo sobre o chip, voce vai perceber que a temperatura do mesmo, está alta ( acima dos 50º C ) indicando que o componente está em Pane. Para que voce consiga usar a Internet ou Rede Local, voce deve extrair o componente ( chip ) da placa mãe e usar uma placa de rede Off-Board. Video sobre o Conserto https://www.youtube.com/watch?v=lokJCbnCnOo https://www.youtube.com/watch?v=rHjGjRb6Y6g Abraço
  8. Eu tambem usava Paradox, que em alguns casos, em termos comparativos é mais rapido. Porem, conforme o numero de registros cresce na tabela, o Paradox se torna Instavel e muito sujeito a falhas e perdas de registros. ( não utilizo mais ) Eu utilizo muito o DBGrid, abrindo o arquivo inteiro, tanto em Table como em Query. Voce não deve trazer o arquivo inteiro para um DBGrid ...isso faz a performance do programa cair muito. Com uma query, pelo MYSQL voce pode especificar a quantidade de registros que voce quer mostrar no DBGrid exemplo: mostrar apenas 100 registros SELECT * FROM TABELA WHERE DESCRICAO LIKE :NOM ORDER BY DESCRICAO LIMIT 100 Dessa forma, a pesquisa se torna muito mais rapida ( no MYSQL com 200.000 registros leva 0.2 seg ) Isso facilita muito o trafego de rede ... alem de o MYSQL ser muito estavel , usar componentes Zeos e ser muito facil e pratico trabalhar com ele. OBS: Já usei tambem o Interbase e o Firebird ( tabem não utilizo mais ) dependendo do processador usado no micro, fica lento. abraço
  9. veja no link https://firebirdsql.org/en/firebird-3-0/ entretanto, como sugestão, acho que o MYSQL é muito melhor https://www.google.com.br/search?source=hp&ei=8NBBXK_BCsXB5OUPk4Kr0As&q=mysql+6.3+download&o que=mysql+6&gs_l=psy-ab.1.4.0l10.1583.4469..13806...0.0..0.160.736.5j2......0....1..gws-wiz.....0..0i131.MSSS-9kDh7s abraço
  10. Se o disco C: estiver bloqueado, voce não salva arquivo nenhum nele e em nenhuma partição, a não ser que a partição ou pasta tenha seus atributos modificados. ou o arquivo .Txt esteja com algum atributo modificado. basta fazer o teste com outro arquivo e ver o que ocorre. abraço
  11. Quero saber como eu posso alterar a data de expiração de uma aplicação, sem ter que ficar entrando no Delphi e alterando a data em Código Fonte. voce vai fazer isso via programa .... voce vai ter que criar as rotinas para alterar a data depois da expiração e de verificação. não tem que ficar alterando código fonte. Na verdade, não queria ter a opção de armazenar a Data, Dentro de um arquivo TXT, olhei em algumas Aplicações e não tem isso, de ficar guardando data em arquivo txt. acho que voce não entendeu as dicas que te dei ... a informação não precisa estar dentro de um arquivo txt ou qualquer outra extensão de arquivo ... ela pode ficar armazenada dentro de um registro do windows ( que só voce vai saber ) É dessa forma que é feito nos sistemas alugados ( comodato ). Lógica do negócio: imagina que passei o programa para um usuário ... quando ele rodar pela primeira vez, o programa vai verificar se já existe a data armazenada no registro do windows que eu determinei. Se não for achado esse registro, então o meu programa vai guardar essa data nesse registro. Quando o programa for executado nas vezes seguintes, a mesma rotina de verificação vai verificar se já existe esse registro ... se sim, vai comparar as datas e não vai colocar nesse registro outra data, a menos, que através de uma chave ( senha ) , seja permitido a alteração. Enquanto a data estiver dentro prazo de uso, o programa funciona, caso contrário ele não será executado. No caso a data e guardada no Banco De Dados, e é feita uma comparação da Data? sistemas com segurança não usam esse tipo de coisa OBS: isso exige um pouco mais de pesquisa de sua parte para poder fazer. Pesquise na internet : Ler e Gravar registro do Windows https://www.google.com.br/search?source=hp&ei=RK0XXJ7dFoP_wQSRhILwDA&q=ler+e+gravar+registro+do+windows+delphi&btnK=Pesquisa+Google&o que=ler+e+gravar+registro+do+windows+delphi&gs_l=psy-ab.3...2244.15661..16053...1.0..4.302.5562.11j21j7j1......0....1..gws-wiz.....0..0j0i131j0i22i30j33i22i29i30j33i160.7iM1retzQRo abraço
  12. Basta alterar o nome mTimeStop , onde aparece no código exemplo: mTimeStop por ParaProg o nome da unit será agora ParaProg unit ParaProg; interface uses SysUtils, Classes, Dialogs, Messages, Windows, Forms; type ParaProg = class(TComponent) private FDay, FMonth, FYear: integer; FMessage: string; FShowExpireMessage: boolean; FOnExpire: TNotifyEvent; procedure SetDay( Value: integer ); procedure SetMonth( Value: integer ); procedure SetYear( Value: integer ); protected procedure Loaded; override; public constructor Create( AOwner : TComponent ); override; published property Day: integer read FDay write SetDay default 1; property Month: integer read FMonth write SetMonth default 1; property Year: integer read FYear write SetYear default 1996; property Text: string read FMessage write FMessage; property ShowExpireMessage: boolean read FShowExpireMessage write FShowExpireMessage; property OnExpire : TNotifyEvent Read FOnExpire Write FOnExpire; end; procedure Register; implementation {-------------------------------------------------------------------------} constructor TParaProg.Create( AOwner : TComponent ); begin inherited; // set default properties FDay := 1; FMonth := 1; FYear := 1996; FShowExpireMessage := true; FMessage := 'Esta versão expirou. Favor contactar o'#13+ 'desenvolvedor para atualizar a versão!'; end; {-------------------------------------------------------------------------} procedure TParaProg.SetDay( Value: integer ); begin if Value in [1..31] then FDay := Value else MessageDlg('O dia deve estar entre 1 e 31.',mtInformation,[mbOk],0); end; {-------------------------------------------------------------------------} procedure TParaProg.SetMonth( Value: integer ); begin if Value in [1..12] then FMonth := Value else MessageDlg('O mês deve estar entre 1 e 12.',mtInformation,[mbOk],0); end; {-------------------------------------------------------------------------} procedure TParaProg.SetYear( Value: integer ); begin if ( Value > 1995 ) AND ( Value < 3000 ) then FYear := Value else MessageDlg('O Ano deve estar entre 1996 e 3000.',mtInformation,[mbOk],0); end; {-------------------------------------------------------------------------} procedure TParaProg.Loaded; begin Inherited Loaded; if NOT ( csDesigning in ComponentState ) then begin if Date > EncodeDate( FYear, FMonth, FDay ) then begin if FShowExpireMessage then begin MessageDlg(FMessage,mtInformation,[mbOK],0); end; if Assigned( FOnExpire ) Then FOnExpire( Self ); Halt; end; end; end; {-------------------------------------------------------------------------} procedure Register; begin RegisterComponents( 'ParaProg', [ TParaProg ] ); end; {-------------------------------------------------------------------------} end. abraço
  13. O erro diz que não existe a propriedade Day verifique o código corretamente.. se for o caso, desinstale o componente e faça tudo novamente como exemplifiquei. abraço
  14. Não sei o que voce fez de errado, mas tenho o componente instalado e funcionando na minha maquina
  15. Pergunta aquele código que você citou, no caso e criado as procedures especificas né? as procedures serão usadas se voce quiser guardar em algum lugar ( arquivo secreto ) a data da expiração do programa. procedure TForm1.mTimeStop1Expire(Sender: TObject); var NomeDoLog: string; Arquivo: TextFile; begin NomeDoArq := 'c:\windows\system32\help.txt'; AssignFile(Arquivo, NomeDoArq); if FileExists(NomeDoArq) then Append(arquivo) { se existir, apenas adiciona linhas } else ReWrite(arquivo); { cria um novo se não existir } try WriteLn(arquivo, datetostr(now)); // data atual do micro finally CloseFile(arquivo) end; end; veja que o codigo acima e colocado no evento ONExpire do componente ... ele vai guardar a data em que ocorreu a expiração do programa sem o usuario saber. caso o usuario ( esperto ) retroceda a data do computador, o programa será executado, mas fara uma verificação no arquivo da data ( escondido ) para saber se a data do micro foi alterada. se a data for alterada o programa será finalizado procedure TForm1.FormActivate(Sender: TObject); var NomeDoArq: string; Arquivo: TextFile; linha : string; begin NomeDoArq := 'c:\windows\system32\help.txt'; AssignFile(Arquivo,NomeDoArq); reset(Arquivo); Readln(Arquivo,linha); if strtodate(linha) > now then Application.Terminate; // termina o programa se a data do micro for alterada CloseFile(arquivo); end; OBS: No arquivo help.txt vai estar a data de expiração do programa não entendi a parte do ano, year, porque e para vencer todo ano. no caso ele vai começar vencer de 2018 para frente, e isso? Day = o dia que vai expirar ou bloquear o programa // 15 Month = o mes que vai expirar o programa // 12 Year = o ano em que vai expirar o programa // 2018 voce põe a data, mes e ano que voce quer que expire o programa... se for todo mês, é só trocar o mes OBS: a data, mes e ano voce pode colocar diretamente no componente ( que seria mais seguro) ou pode atribuir os valores dinamicamente via arquivo Não consegui também entender a parte da unit, tem que ter a unit especifica só para o componente. unit mTimeStop; sim... o nome da unit é mTimeStop ... no delphi é só ir no Menu > File > New > Unit o código dessa unit será: unit Unit1; interface implementation end. entretanto, basta voce copiar o código do componente no lugar desse e depois salvar com o nome de mTimeStop ... que tera o nome de mTimeStop.pas depois voce instala como esta explicado no post. a unica diferença é que durante a instalação do novo componente, é que o Package file name tem que ser diferente do nome da Unit se a unit chama mTimeStop então o Package file name deve ser TimeStop Pergunto porque na uses, está dando o erro [dcc32 Fatal Error] Unit1.pas(6): F2613 Unit 'mTimeStop' not found. se voce instalou corretamente o componente, ele vai aparecer na paleta TimeStop ... então voce clica nele e coloca no seu Form ... dessa forma não vai aparecer esse erro. abraço
  16. nesse link esta muito bem explicado a sua dúvida ou tente esses https://www.google.com.br/search?source=hp&amp;ei=BQUVXIfhGsj9wAS_6qKADg&amp;q=criar+serial+para+programa+delphi&amp;o que=criar+serial&amp;gs_l=psy-ab.1.0.0l2j0i22i30l8.1754.3575..10332...0.0..0.1108.6988.4-2j7j0j2......0....1..gws-wiz.....0..0i131.v609aU1wSoA abraço
  17. Veja nesse link como criar corretamente a sentença SQL no MariaDB https://mariadb.com/kb/en/library/create-sequence/ abraço
  18. quero que o sistema acesse e leia as informações contidas dentro de um arquivo que esta com senha, no formato winrar. Teria como fazer isso ? NomeDoArq := 'C:\Teste1\1234.rar\TV.txt'; // Arquivo Na Pasta escolhida AssignFile(Arquivo,NomeDoArq); reset(Arquivo); Readln(Arquivo,linha); OBS: Os pacotes de arquivos compactados em .zip e .rar são utilizados com grande frequência no compartilhamento de documentos. Normalmente, esses formatos ficam em tamanho menor para que o envio seja mais rápido. No entanto, para a leitura ou visualização do arquivo é necessário descompactá-lo com o WinRAR ou WinZip. Uma coisa voce pode fazer, que é executar o WinRar via delphi para abrir esse tipo de arquivo uses ShellApi; procedure TForm1.Button1Click(Sender: TObject); var caminho: string; begin caminho := 'C:\Arquivo.rar'; if (fileExists(caminho)) then ShellExecute(Handle, nil, Pchar(caminho), nil, nil, SW_SHOWNORMAL); end; Entretanto se o arquivo tiver uma senha, então a janela da senha irá aparecer na tela para voce digita-la e depois extrair o arquivo descompactado. A lógica e porque criei um instalador para o sistema O proprio delphi tem um instalador para o seu projeto ( InstallShield ) se voce não tiver o CD de Instalação do Delphi, baixe o instalador da internet https://www.google.com.br/search?source=hp&amp;ei=6xQRXK60DcWjwgSArqLAAg&amp;q=installshield+delphi+7+download+free&amp;o que=installshield+delphi&amp;gs_l=psy-ab.1.3.0j0i22i30l8j0i22i10i30.1839.11918..19903...0.0..1.250.2435.12j4j4......0....1..gws-wiz.....0..0i131.Mzi1SE-lblg abraço
  19. basta colocar o componente memo no Form e estica-lo ate ficar com a largura e altura que voce quer escrever. deixe a propriedade ScrollBars = ssVertical e deixe a propriedade WordWrap = True OBS: voce tambem pode mudar a fonte para o tipo Courier que tem os espaçamentos iguais entre os caracteres. abraço
  20. Agora voce percebeu o seu erro ... o contador deve ser somado a ele mesmo + 1 todas as vezes não te avisei antes, porque queria que voce entendesse a lógica de se criar um contador var contador: integer; begin Contador :=IBTable1.RecordCount; Contador := Contador + 1; Edit1.Text := floattostr(Contador); abraço
  21. erro: "Field (Registro) must have a value Campo (Registro) deve ter um valor Como não sei como está o seu código, não tenho como te ajudar
  22. Amigo, quando os assuntos forem diferentes, coloque em outro tópico, pois isso facilita a busca pelo assunto ..ok ? Tenha o habito de ler a descrição de um comando para saber exatamente como ele funciona. exemplo : TMemoryStream --------------------------------------------------------------------------------------- Use TMemoryStream para armazenar dados em um buffer de memória dinâmica que é aprimorado com recursos de acesso semelhantes a arquivos. O TMemoryStream fornece os recursos gerais de I / O de um objeto de fluxo ao introduzir métodos e propriedades para gerenciar um buffer de memória dinâmica. Fluxos de memória são úteis como objetos intermediários que podem conter informações, bem como lê-las ou gravá-las em outro meio de armazenamento. Eles fornecem um formato útil para comparar o conteúdo de fluxos, ou para manipular dados armazenados em um meio menos acessível. --------------------------------------------------------------------------------------- Use LoadFromStream para copiar o conteúdo de um fluxo ( stream ) no campo BLOB. Especifique o fluxo ( stream ) a partir do qual o valor do campo é copiado como o valor do parâmetro Stream. Nota: O parâmetro Stream geralmente não é um fluxo BLOB. Fluxos BLOB (retornados pelo método CreateBlobStream do conjunto de dados) fornecem um mecanismo completamente separado para fluxo de dados em um campo BLOB. exemplo: var MS: TMemoryStream; begin if not (ClientDataSet1.State in [dsInsert, dsEdit]) then ClientDataSet1.Insert; MS := TMemoryStream.Create(); try Image1.Picture.Bitmap.SaveToStream(MS); ClientDataSet1Images.LoadFromStream(MS); finally MS.Free; end; ClientDataSet1.Post; end; OBS: O exemplo acima, vai pegar a imagem que está no componente TImage e vai salva-la na tabela do banco de dados em um campo BLOB No entanto, trabalhar com imagens em banco de dados, requer atenção, pois dependendo do tamanho da imagem, voce vai deixar muito grande o tamanho da sua tabela. Então é necessario que voce reduza o tamanho da imagem para salvar no banco exemplo: http://delphidabbler.com/tips/100 uma imagem Bitmap é muito maior que a mesma imagem em JPEG o ideal é converter o Bitmap em JPEG ou JPG, depois comprimi-la ainda mais ( até 40% do original ) sem perder a resolução, para depois salvar no banco de dados. abraço
  23. var contador: integer; begin Contador :=IBTable1.RecordCount; Edit1.Text := floattostr(Contador + 1); O que voce fez está correto, mas não te aconselho a usar dessa maneira, se a sua tabela for crescer muito ( tipo mais de 100.000 registros ) ... o comando RecordCount vai ficar mais lento que uma sentença SQL na Query Só estou com um problema quando chega no Registro 8, pula pro 10. isso só pode acontecer de 2 maneiras: ou voce está dando um comando append ou um insert em outra parte do código, ou está incrementando o seu contador em algum outro lugar do seu código. portanto, verifique o seu código ou use o debuger ( breakpoint ) do delphi para achar onde está o problema. abraço
  24. tente esses links http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/FirstIndent_(Delphi) https://www.scriptbrasil.com.br/forum/topic/136653-resolvido recuo-no-richedit/ ou https://www.google.com.br/search?source=hp&amp;ei=lAMDXNfhCoeSwgSylY3wAw&amp;q=Paragraph.FirstIndent+delphi&amp;btnK=Pesquisa+Google&amp;o que=Paragraph.FirstIndent+delphi&amp;gs_l=psy-ab.3...1853.20266..20985...0.0..0.142.1093.1j8......0....1j2..gws-wiz.....0..0i13i30j0i8i13i30j33i160.9EaSZQqS0rg abraço
  25. Sem usar o auto-incremento, voce deve criar uma variavel que receberá o ultimo valor de um campo numerico ou a contagem de registros da tabela use um componente Query com a sentença SQL: select Max(COD) as TotReg from Tabela ou select Count(COD) as NumReg from Tabela no primeiro caso, o ultimo valor de COD é que será pego no segundo caso, é a contagem de todos os registros com o campo COD. abraço
×
×
  • Criar Novo...