Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Posts postados por Micheus

  1. Olá pessoal. Faz tempo que não dou as caras por aqui. :)

    Volto hoje com uma dúvida.

    Já há algum tempo meu programa desktop armazena a senha encripitada utilizando o componente TLbSHA1 TurboPower LockBox (LockBox 2). Só que recentemente eu estou fazendo uma pequena implementação em PHP onde utilizo a função sha1 para codificar a senha de entrada, porém ela nunca é igual àquela que foi armazenada via app desktop.

    já tentei utilizar outro código de emcriptação no Delphi (Crypt.SHA1.pas), mas segue com o mesmo problema.

    Assim, minha pergunta é: tem alguém aqui que utiliza ou já utilizou desta combinação (BD acessado via Delphi e PHP) incluindo a criptografia sha1 e teve sucesso na validação por ambas as aplicações? Se sim, o que é que eu estaria deixando de fazer o como deveria proceder para resolver este problema?

    Grato pela atenção

    Micheus

  2. Achei um meio mais facil, mas ele vem com outra dúvida: Ao invés de definir toda URL do programa, seria mais facil definir somente a porta que seria usada (Os 4 numeros depois de 127.0.0.1)? E se for, como faço isso?

    Para indicar uma porta de acesso em determinado endereço você a acrescenta dois pontos [:] seguido do número da porta.

    127.0.0.1:80

    Observe que este endereço (127...) diz respeito ao "identificador" localhost - ou seja a própria máquina. Qualquer browser que receba este endereço tentará estabelecer uma conexão com a máquina onde ele esteja sendo executado. Assim, se de um computador você quizer acessar o aplicativo que está em outro, você terá que informar o endereço IP (ou identificação) deste servidor na rede.

    Acho que Intraweb não tem essa funçao, so se estiver com outro nome ou for necessario algum comando
    Talvez você tenha implementado sua aplicação em um dos formatos que embute o servidor na aplicação (Stand Alone Server), conforme pude observar na explicação Mini-Curso / Video-Aula de IntraWeb - a partir dos 14:45s (Recomendo assistir)

  3. Meu conhecimento nesta área é minúsculo, mas considerando que você tem acesso ao servidor, perguntaria se não seria possível fazer uso de "aliases" (apelidos).

    No IIS voce utilizaria os tais diretórios virtuais: Usando diretórios virtuais ou Criando um diretório Virtual com o IIS

    No Apache voce utiliza o alias: Alias no Apache (ou Apache Module mod_alias)

    Seu celular poderia sempre acessar a aplicação via http://servidor/alias

  4. Do jeito que está mostra o a mensagem e outra tela dizendo uma mensagem padrão de erro de usuário padrão do mysql e eu não quero que mostre, somente mostre a Showmensage que programei e nada mais.

    Experimente utilizar o tratamento de exceção da forma apropriada para este caso:

    ...
      with dm.ZC do
      begin
           ...
           try
               Connected:=True;
           except
               ShowMessage('Erro de conexão');
           end;
      end;
    end;

    Quando você utilizar o finally, o bloco de código dentro dele é executado havendo ou não uma exceção. Já quando você usa o except, o bloco de dados dentro dele será executado apenas quando ocorre a exceção. Nesta condição, quando você estiver depurando o código, pode até ser que a mensagem de exceção do banco seja apresentada, seguida pela sua. Mas executando fora do ambiente de desenvolvimento (o executável gerado) voce deve observar apenas a mensagem que voce programou.

    Faz tempo que não programo Delphi, então, dê uma testada para ver se é isto mesmo. :)

  5. Consegui alguns comentários também no forum do Lazarus (Wrong character displayed)

    Uma solução que resolve meu problema facilmente (não definitivamente) foi a sugestão de mudar na conexão do banco o parâmetro lc_ctype de WIN1252 para UTF8. (este post)

    Funcionou imediatamente.

    Questionei sobre algum efeito colateral, já que o banco ainda está configurado para WIN1252 e, segundo outro usuário, a possibilidade existe se eu usar algum caracter que não esteja no conjunto UTF8. Bom, consideranda a aplicação atual, só mesmo os caracteres "comuns" entre os dois estão sendo utilizados. Isto vai me dar um bom tempo para pensar em como fazer a bendita migração.

    Abraços

  6. Olá pessoal,

    Estou convertendo um antigo projeto do Delphi 7 para o Lazarus. Do ponto de vista do código e telas os problemas tem sido contonados.

    Meu problema diz respeito à visualizão de informações cadastradas em um banco de dados. Como voces podem observar na figura, os caracteres acentuados são suprimidos ou substituídos por "?".

    Algum de voces saberia como contornar este problema?

    lazarusa.png

  7. O problema é que não to conseguindo pegar esses dados da DBGrid e mandar para o form frmeditar_apagar, tenho o codigo, sei que o metodo é esse mas infelizmente não sei como usa- lo, esse codigo que eu dissi a cima eu coloco no botão que chama o form para edição, no form de edição não tenho nada só o ModalResult := mrOk;
    Afinal, quem está chamando quem?

    É uma tela com DBGrid que você chama outra tela para editar os dados deste com DBGrid; ou é uma tela de cadastro em que você chama outra tela com o DBGrid para selecionar alguma informação?

    Entenda, a atribuição ModalResult := mrOk fará com seu form feche - só isto.

  8. Não seria por causa desse comando ?

    ModalResult := mrOk;
    É isto mesmo robinhocne. Setar o valor para ModalResult (seja, mrOk ou mrCancel) faz com que o loop de processamento da janela seja encerrado e com isto a janela é fechada.
    Não dá nenhum erro mais sempre quando tento editar volta para o form frmcontas_apagar(form original)... Sei q tem algo de errado q estou fazenndo mais não consigo ve onde...
    Não daria erro mesmo. Mas, a propósito, os blocos try...except...finally tem a finalidade de tratar excessões (ou os erros/falhas). O finally será sempre executado ocorra ou não uma exceção. O bloco que você codificou não está coerente. Se voce deseja validar uma terminação normal do seu formulário (verificando o valor de ModalResult), com certeza não deveria utilizar o finally para isto. A aplicação mais comum para ele é liberar qualquer memória que tenha sido alocada ou desfazer alguma ação realizada anteriormente ao procedimento que possa causar uma falha. No seu caso, o finally poderia (deveria) ser utilizado para remover o formulário que você criou no with...do:
    procedure Tfrmcontas_apagar.cmdeditarClick(Sender: TObject);
    begin
      with Tfrmeditar_apagar.Create(Self) do
      begin
        try
          ShowModal;
          if ModalResult = mrOk then
          begin
            if not(Table_APagar.State in [dsInsert, dsEdit]) then
              Table_APagar.Edit;
    
           frmeditar_apagar.txtnro_doc.text := Table_APagar.FieldbyName('nro_documento').AsString;
            //Table_Entregador.FieldByName('Placa').AsString := Table_Veiculo.FieldByName('Placa').AsString;
          end;
        finally
          Free;
        end;
      end;
    end;

    É muito útil (e até importante) o tratamento de exceções, porém temos que estar cientes de como aplicá-lo. ;)

  9. danielrgoes, isso vai ficar difícil de eu responder - eu não tenho mais o Delphi instalado para poder testar por aqui.

    Mas, voce já experimentou fazer a alteração no arquivo WebCamMainForm.pas que um cara sugeriu lá:

    // introducing the RGB array and a buffer
      TVideoArray = array[1..PICHEIGHT] of array[1..PICWIDTH] of TRGBTriple;
      PVideoArray = ^TVideoArray;
    
      TForm1 = class(TForm)
    [...]
      FBuf24_1: TVideoArray;
    [...]
    
    function FrameCallbackFunction(AHandle: hWnd; VIDEOHDR: TVideoHDRPtr): bool; stdcall;
    var
      I: integer;
    begin
      result:= true;
    
      with form1 do begin
      try
        if ConvertCodecToRGB(FCodec, VideoHDR^.lpData, @FBuf2, PICWIDTH, PICHEIGHT) then
        begin
          for I:= 1 to PICHEIGHT do FBuf1[I]:= FBuf2[PICHEIGHT- (I- 1)];
          SetBitmapBits(FBitmap.Handle, PICWIDTH* PICHEIGHT* SizeOf(DWord), @FBuf1);
        end
        else
        begin  // assume RGB
          for I:= 1 to PICHEIGHT do
            FBuf24_1[I] := PVideoArray(VideoHDR^.lpData)^[PICHEIGHT-I+1];
          SetBitmapBits(FBitmap.Handle, PICWIDTH* PICHEIGHT* SizeOf(RGBTriple), @FBuf24_1);
        end;
    [...]
    Ainda, a título de teste, se a tal alteração não mudar nada, voce poderia modificar a callback (FrameCallbackFunction) grando o bitmap original (lá ele é convertido para jpg):
    ...
        FBitmap.Canvas.Font.Color:= clRed;
        FBitmap.SaveToFile('c:\webcam.bmp');  // <<====  AQUI
    
        FJpeg.Assign(FBitmap);
    
        FJpeg.CompressionQuality:= 85;
        FJpeg.ProgressiveEncoding:= true;
        FJpeg.SaveToFile('c:\webcam.jpg');
        ...

  10. Estou precisando fazer um programa que firme com a webcan e capture a imagem (frame) quando apertar um botao

    Na internet achei varios exemplos mais são componentes que não funcionam no D2007 só no D7

    Voce chegou a testar este: Getting a snapshot from a webcam with Delphi ?

    O exemplo está em uma pergunta em um forum, referente ao fato de o cara não usar uma câmera real (sim uma simulada), mas o código deve funcionar.

    Eu já o utilizei há algum tempo com o D7 e pelo que consta na 2ª resposta que deram a ele, o programa funciona no Win7 com Delphi 2010, fazendo apenas alguns ajustes (colocados lá) - acredito que você seja capaz de entendê-lo e adaptá-lo. A vantagem seria o fato de ele não utilizar componentes.

    Observe que estão todos os códigos fonte em sequência. Voce deve separá-los e adaptar o código fonte do seu form de acordo com o que ele usou no dele (WebCamMainForm).

  11. Então vamos supor que eu perca todo o meu projeto e na hora que eu for pegar um backup, qual os arquivos que tenho que ter salvos, pois sei que os " *.~* " são Backup, mas e os .dcu, .ddp, .dfm e .pas tem que salvar quais ? todos ?

    Para o Delphi 7 e anteriores basicamente são estes os significados. Em negrito, o que é indispensável ser mantido:

    • .dcu (Delphi Compiled Unit) -> este é gerado a cada compilação;
    • .ddp (Delphi Diagram Portifolio) -> não sei afirmar nada a respeito;
    • .dfm (Delphi Form file ) -> contém o layout - dados do seu form;
    • .pas -> É o código fonte
    • .dpr (Delphi Project) -> é o arquivo do projeto, responsável pela obtenção do executável
    • .res (Resource file) -> é o arquivo de recursos. É onde costumam ficar icones, bitmaps - o que você adiconar a ele.
    para as versões mais recentes do Delphi existem mais extensões. Há uma lista neste link (Delphi File Extensions), indicando quais devem ser mantidos ou não.
  12. Teria a possibilidade de ler um arquivo '.txt' assim como é feito no php por exemplo?

    Ex.: No php eu faria=>

    $abrir = fopen('c:\\arquivo.txt', 'r'); 
     while(!feof($abrir){ 
       $linha = fgets($abrir); //faço a leitura de linha por linha
      }
      fclose($abrir);
    Sem dúvidas. Se voce realmente precisa processar as linhas deste jeito mesmo, então este seria o exemplo.
    var
       SomeTxtFile : TextFile;
       buffer : string;
    begin
      AssignFile(SomeTxtFile, 'c:\arquivo.txt');  // aqui você vincula o nome à variável do tipo textfile
      Reset(SomeTxtFile);  // aqui estamos abrindo para leitura apenas
      while not Eof(SomeTxtFile) do
      begin
        ReadLn(SomeTxtFile, buffer);   // lendo uma linha inteira - até o &13&10 (aquele "Ln" diz isto)
      end;
      CloseFile(SomeTxtFile);  // fechando o arquivo
    end;

    Se não me engano estas funções estão na unit SysUtils. Caso tenha erro de compilação, verifique se ela está na cláusula "uses". Se estiver e ainda assim as procedures não forem reconhecidas, então estou errado e você deve acionar o help para descobrir onde encontrá-las - tarefa fácil, apenas posicione o cursor no meio do nome da função e acionde Ctrl+F1.

    Há outras funções para manipular arquivos, mas acredito que este conjunto lhe sirva, já que é o mais parecido com o que você está acostumado a trabalhar.

    Dica: Se voce não tem problemas em ler em Inglês, use muito o Help - O Delphi tem um help muito completo, bem documentado e com fraguimentos de código exemplo. (aprendi Delphi usando o Help, não livros)

  13. os componentes que vem de TTalbe e TDataSet tem uma propriedade chamada "RecNo", ela retorna a linha em que a Query ou Tabela está no momento...

    Samara, o colega vms não deseja saber em qual registro esle "se encontra".

    Em tabelas como Parados existe um tipo de campo(field) chamado de AutoInc. São campos que a cada novo registro recebem um novo número, sequencial, e que nunca se repetirá. Estes campos são gerenciados pelo driver do paradox, de modo que quando você grava o registro (post) o seu dataset estará paradinho no registro recém salvo e voce poderá obter o valor que este campo recebeu do "banco" (paradox não é exatamente um bando de dados - na minha opinião). Nesta condição, se voce colocar este dataset em um DBGrid (mostrando este tal campo) e usar o seu código, voce observará que são coisas diferentes.

    RecNo representa o número do registro sequindo a ordem em que ele se encontra no dataset. Assim, se voce mudar o índice (tabela) ou ordenação (query), voce provavelmente notará que um registro com RecNo = 10 é diferente para cada ordenação.

    O que o colega vms quer é obter do banco de dados (Firebird), o valor daquele campo "autoinc", que no firebird é obtido através da definição de um Generator e sua utilização através de uma trigger (exemplo). Este valor está no domínio do banco de dados e não é retornado quando o post/applayupdates é utilizado.

    Uma alternativa a isto é não utilizar o generator e sim gerar o código ("manualmente" usando um select max(campo)+1) dentro do programa no momento imediatamente antes da gravação no banco. O problema com isto é que para tabelas com muitos acessos, pode ocorrer de mais que um usuário obter o mesmo número (código sequencial) e na hora de comitar os dados o banco rejeite aqueles que ficariam duplicados. Quando usamos o generate, o próprio banco usa seus mecanimos para retornar apenas um código de cada vez, sem qualquer possibilidade de duplicação.

    Espero ter ajudado a exclarecer a diferença entre os itens citados.

  14. O problema é que quando mando salvar, a tabela vai para o primeiro registro e eu preciso que permaneça no mesmo registro. Eu preciso usar o refresh para poder gerar o ID automatico (pela trigger).

    Tentei usar um Locate, mas a unica referencia seria o ID mas ele so é criado depois do Refresh.

    É, esta é (digamos assim) uma desvantagem de gerar o Id pela trigger - voce não tem como saber diretamente qual foi o valor gerado.

    Voce poderia usar uma combinação de alguns campos (que voce acabou de cadastrar) para identificá-lo.

    Se não me engano, há alguns anos, enquanto eu monitorava as atividades em um banco de dados (utilizando o SQL Monitor que acompanha o D7), era este o procedimento que os drivers do BDE utilizavam para encontrar o registro após sua inserção (na verdade, ele usava na cláusula where todos os campos ainda no cache).

    Ou talvez voce possa querer testar esta alternativa (nunca testei): Auto Incremento: Firebird

  15. Coloquei uma QRBand e mudei o BandType para rbGroupFooter, liguei o LinkBand com a QRGroup1, nele eu coloquei os QrExpr :

    sum(valor), sum(recebido) e sum(receber).

    mesmo assim não trouxe nada, testei como rbGroupHeader, mas também não deu, o que posso estar fazendo de errado ?

    só para confirmar, o QRGroup1 deve ter as propriedades Expression contendo o campo de quebra do dataset (CodCli) e a propriedade FooterBand apontando para a QRBand que você definiu para rbGroupFooter.

    No QRExp além de configurar a Expression e setar ResetAfterPrint = True.

    Estamos chegando naquele ponto em que eu não vendo o seu código, não consigo depurá-lo. A lógica é esta ai que discutimos aqui.

    Nesse caso eu tenho o campo
    A.NumParc
    que traz o numero da parcela, é um campo numeric, coloquei ele e o CodCli como order by também, ai deu certo.

    Ficou então

    order by A.CodCli, A.NomCli, A.NumParc

    Se voce quer que a listagem seja ordenada pelo nome do cliente, então aquele CodCli não deve ser colocado. No caso de voce querer ordenar pelo CodCli mesmo, então retire NomCli porque ele torna-se redundante e também, pelo fato de que se a sua tabela tiver um índice contendo os campos CodCli + NunParc, este índice será utilizado na ordenação agilizando-a.

  16. um outro detalhe é que informei:

    order by A.NomCli, A.Parcela

    Pela imagem daquele relelatório inicial, parece que este campo é string e não numérico. Sendo string, dependendo como está o texto isto poderia acontecer. Vai ficar de eu avaliar isto daqui.

    Eventualmente, voce não poderia utilizar a data? Em teoria, a ordem de vencimento é a orde das parcelas - crescente

  17. Sobre o agrupamento do relatório ficou show de bola, do jeito que eu queria, agora só não estou conseguindo fazer que para cada agrupador(cliente) apareça um "subtotal", pois um "total" eu já coloquei em um rbSummary e deu certo, para o subtotal eu havia colocado uma child, mas para cada registro foi somando um resultado (legal), mas não o que quero...testei entre outras BandType e não consegui, você poderia me ajudar ?

    A banda sumário, é como diz o nome: sumariza/totaliza tudo! Ou seja, soma todos os registros que ele mostrar na banda detalhe.

    Isto que voce quer está claramente relacionado à quebra do cabeçalho, não é mesmo. Vinculada à uma GroupBand voce terá uma GroupFooter (ou apenas footerband - já não lembro, mas você a achará). Esta banda deverá ser vinculada à group em questão. Isso é necessário porque o QuickReport tem que saber a quem ela "pertence" para imprimí-la na hora certa. Lembre-se que voce poderia ter vários destes conjuntos em um relatório mais compléxo.

    Observe ainda, que há uma propriedade nos componente de totalização (TQrExpr) que voce usará onde você diz que ele deve ser zerado após impresso (acho que é algo como ResetAfterPrint). Do contrário, ele poderá funcionar como um sumario.

    Abraços

×
×
  • Criar Novo...