Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. voce está utilizando um componente TDatabase? Como está definida a propriedade KeepConnection? No BDE seu alias está configurado utilizando drive nativo (MSSQL) ou ODBC (SQL Server)?
  2. ou, a partir do D7, incluindo a unit DateUtils na cláusula uses do seu form: mês := MonthOf(now);
  3. Micheus

    [resolvido] Gauge

    foi mal... onde aparece Arq, você tem que utilizar a sua variavel arquivo, no caso, Txt - troque onde aparecer. ArqSize := FileSize(Txt) *128; // *** FileSize assume blocos de 128 quando não é arquivo "tipado" foi mal duas vezes... :rolleyes: Onde coloquei Linha, deve ser utilizada a sua variável Entrada para a qual você lê a linha do arquivo. É que puxei de uma rotina que eu tinha e não ajustei ao nome das suas variáveis.
  4. não estou certo, mas acho que com uma aplicação simples isso seria difícil (parece com o que há em firewalls).Qualquer um dos componentes (baseados em TCP/IP) comumente utizados não descem à camada Internet onde o header IP está disponível (conversam com a camada de Aplicação). Para saber sobre as camadas, ver Como o Protocolo TCP/IP Funciona - Parte 1 (Clube do Hardware)
  5. Micheus

    Codigo De Barras

    Robinhocne, a que você quer se referir quando cita o IBExpert? Ele é só uma ferramenta para manipulação de banco de dados (FireBird, Interbase e Yaffil). Seria mais relevante você informar qual banco de dados você utiliza e/ou componentes de acesso. Ok?! quando você acessa: https://www.scriptbrasil.com.br/forum deve encontrar à direita +/- ao meio da tela duas opções: Qual exatamente seria a dificuldade?
  6. Micheus

    [resolvido] Gauge

    Eder, se há demora desta grandeza, não acho interessante a leitura do arquivo por duas vezes (1 para estabelecer tamanho e outra para importação). Sabendo-se que trata-se de um arquivo texto, é possível estimar o tamanho do mesmo (valor muito próximo mesmo) e com esta informação calcular o avanço na leitura. Para o gauge mostrar a duração do processo todo, e não apenas o referente a leitura do arquivo (baseada em seu tamanho), a idéia é trabalhar com um valor máximo do gauge que corresponda a 100(% do arquivo) + "n" processos a serem incrementados fora do loop - como os que você faz. Eu inclui as alterações no seu código (marcadas com "//***") para que sirva de exemplo a outras situações parecidas (apenas suprimi a parte interna do loop) : procedure TForm1.XiButton1Click(Sender: TObject); Var ArqLido, // *** Quantidade de caracteres lidos ArqSize :Integer; // *** Tamanho do arquivo Txt: TextFile; Entrada: String; Linhas: Integer; now_temp: TDateTime;//variavel contadora de tempo begin //CONTADOR DE TEMPO now_temp:=now;//recebe tempo tempo.caption:= '00:00:00'; // // gauge1.Progress:=30; // *** sugiro retirar esta linha - não a computei TABLE1.Active:=TRUE; Assignfile(Txt,'c:\sswrel\ctrc.csv');//caminho do arquivo CSV Reset(Txt); ArqLido := 0; ArqSize := FileSize(Txt) *128; // *** FileSize assume blocos de 128 quando não é arquivo "tipado" gauge1.MaxValue := 104; // *** equivale a 100 +4 valores que você incrementa na mão Linhas := 0; While not Eoln(Txt) do begin // gauge1.Progress:=50; // *** esta linha deve ser retirada - inclui outra abaixo Readln(Txt,Entrada); ArqLido := ArqLido +Length(Entrada)+2; //*** este 2 = CR+LN (presumido) Gauge1.Progress := Trunc(ArqLido/ArqSize *100); // *** progress chegará no máximo a 100 (%) Inc(Linhas); If Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV if (Copy(Entrada, 1, 1) = '3') then //AQUI CONSIDERA SOMENTE AS LINHAS QUE TEM O CAMPO 1 = 3 begin : // ** parte suprimida : Table1.Post; // gauge1.Progress:=95; //*** esta linha deve ser retirada end; end; //*** neste ponto, progress deveria estar com 100 (todo o arquivo lido) gauge1.Progress:=101; CloseFile(Txt); //aqui abaixo conta os registros gauge1.Progress:=102; //*** este loop abaixo, parece não fazer sentido... //*** de qualquer modo, como Progress recebe valor fixo, deixe-o fora do loop while not TABLE1.Eof do begin Table1.Next; end; gauge1.Progress:=103; //*** retirado de dentro do loop Label2.Caption := IntToStr(Table1.RecordCount); Table1.First; Beep; gauge1.Progress:=104; //*** 104 foi o valor definido como máximo - resulta em 100% Tempo.caption:=(FormatDateTime('hh:mm:ss',now-now_temp));//conta o tempo de conversão Showmessage('Ok..Arquivo C:\xxxxx\yyyy.db criado com Sucesso E Já Processou o campo CONTADOR!'); end; Veja se ficou funcionndo adequadamente.
  7. não justifica o erro, mas aqui você utilizou um SELECT ao invés de DELETE. O problema não é com o SQL, e o MSAccess dá suporte sim exclusão de vários registros sim. Para quem deseja utilizar comandos como DELETE, UPDATE e INSERT tenham em mente que o método a ser utilizado não é Open, mas sim ExecSQL: DataModule1.ADOQryHistorico.Close; DataModule1.ADOQryHistorico.SQL.Clear; DataModule1.ADOQryHistorico.SQL.Text:= 'DELETE * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text+''; DataModule1.ADOQryHistorico.ExecSQL; Sugiro utilizar este comando ao invés de todas aquelas linhas implementadas. Abraços
  8. paulobergo, o que você precisa é setar qual codec (codificador) deseja utilizar, neste caso WMVideo9 Encoder. Voce mencionou anteriormente ter instalado o componente DSPack. Então, deve ter instalado os exemplos, certo!? Dê uma olhada no exemplo VideoCap.dpr em ...\DSPACK234\Demos\D6-D7\videocap. Você vai ver que lá ele permite a seleção do codificador de vídeo e audio. Veja no código do botão Start a parte com o comentário "// configure output Video media type". Acredito que você conseguirá fazer o que deseja.
  9. Sugestão, troque: FAcoes.Destroy; // destroy o formulario FAcoes.FreeOnRelease; // libera o formulario da memoria por: FAcoes.Release; Motivos (do help): Destroy destructor (TCustomForm) Removes the form from memory. Description Do not call Destroy. Instead, call Release, which indirectly produces a call to the Free method, which in turn calls Destroy. FreeOnRelease method (TComponent) Frees the interface reference for components that were created from COM classes. Description FreeOnRelease is called when an interface implemented by the component is released. FreeOnRelease is used internally and calls the corresponding interface method. It should not be necessary to call FreeOnRelease directly. ___________________________ Release method (TCustomForm) Destroys the form and frees its associated memory. Description Use Release to destroy the form and free its associated memory. Free method (TObject) ... To free a form, call its Release method, which destroys the form and releases the memory allocated for it after all its event handlers and those of the components it contains are through executing.
  10. Micheus

    Imagem No Grid

    VDLR, a melhor opção é você colocar um DBImage, como mencionou o Jonas. Nesta situação, a cada linha do DBGrid que é posicionada a imagem será alterada para o respectivo registro. Mostrar a imagem no DBGrid convencional (componente distribuído com o Delphi) não seria viável porque a altura da linha é fixa (+/- 22pixels) e acredito que suas imagens necessitem de mais altura para uma boa visualização, certo?! Bom, se for realmente necessário mostrar a imagem no grid, existe um componente free (com o código) - (DBGrid Plus), que permite alterações na altura da linha e está preparado para escrever campos memos em múltiplas linhas e imagens. Porém, foi escrito para o Delphi 2 e prevendo seu uso de Paradox, já que ele espera o campo ftGraphic como campo de imagem. Talvez você possa aproveitá-lo ou utilizar o código que ele usa para o desenho da imagem, em DrawColumnCell. Se for adaptá-lo, como você estará gravando em seu banco imagens no formato JPG (que é o ideal), será necessário modificar o procedimento DrawColumnCell, substituindo o uso do objeto TBitmap por TJPGImage. Abraços
  11. Ruyfreis, uma outra maneira, seria definir a banda detalhe ocupando metade da folha (ou um pouco menos), colocar todos os TQRLabel's e TQRText's necessários - exatamente como qualquer relatório. Entretanto, você não liga a propriedade Dataset do QuickReport ao seu dataset (Table ou Query), ou seja, deixa esta propriedade "em brando". Então, você define uma variável na sessão private do seu form (do relatório) para controlar quantas vezes você imprimirá o registro em questão. Inicializa ele antes da impressão (BeforePrint) e manipula (incrementa e testa) no evento OnNeedData do QuickRep: type TRelatorio = class.... ... public procedure ShowPreview; private QtImpresso :byte; end; implementation ... // supondo a existência de um procedimento que mostre seu relatório... procedure TRelatorio.ShowPreview; begin QryConsulta.Open; QuickRep1.Preview; QryConsulta.Close; end; procedure TRelatorio.Quickrep1BeforePrint(Sender :TObject); begin QtImpresso := 0; end; procedure TRelatorio.Quickrep1NeedData(Sender :TObject; var NeedData :boolean); begin // incrementa o contador de impressão Inc(QtImpresso); // NeedData dirá ao quickreport ainda há dados a serem impressos, enquanto QtImpresso não for 2 NeedData := QtImpresso < 2; end; Quando manipulamos o evento OnNeedData, o quickreport não controla mais o avanço do dataset (por isso, não definimos a respectiva propriedade no mesmo) - nós temos que controlar este avanço na mão. Enquanto não avançarmos o dataset (via método Next), a cada vez que setarmos o parâmetro NeedData para TRUE, as informações referentes ao registro atual serão repetidos. Assim, no exemplo acima, enquanto QtImpresso não for 2, ele repitirá a impressão dos dados sem qualquer alteração. Para o caso de uma impressão de "n" registros do dataset, onde tenham que ser impressos, para cada um, duas cópias, então deve ser gerenciado o posicionamento e avanço do dataset nos eventos mencionados. procedure TRelatorio.Quickrep1BeforePrint(Sender :TObject); begin QryConsulta.First; // posiciona no primeiro registro do dataset QtImpresso := 0; end; procedure TRelatorio.Quickrep1NeedData(Sender :TObject; var NeedData :boolean); begin // incrementa o contador de impressão Inc(QtImpresso); // NeedData dirá ao quickreport ainda há dados a serem impressos, enquanto QtImpresso não for 2 NeedData := QtImpresso < 2; // se NeedData é falso, sinal que já foram impressos as duas cópias if not NeedData then begin // tentamos avançar ao próximo registro QryConsulta.Next; // verificamos se há mais registros a imprimir if not QryConsulta.EOF then begin // há o que imprimir, então reiniciamos o contador e ajustamos o retorno do parâmetro QtImpresso := 0; NeedData := True; end; end; end; Seria algo mais ou menos assim, apenas escrevi o código nos eventos, não o testei. No caso de impressão de apenas o registro atual (apenas um), haveria ainda a opção de utilizar um TQRComposite. Você cria o relatório normalmente e adiciona a ele o componente TQRComposite. Então, você inclui na lista Reports do composite o seu QuickRep1 duas vezes e chama o preview deste componente. Veja este post. O TQRComposite tem a finalidade de agregar relatórios. Abraços
  12. Estou preparando alguma coisa, já que pode ser útil a outros. Assim que tiver algo coloco aqui. Abraços
  13. Siga a lógica do que você pôs:DBCOMBOBOX1.Text := DBCOMBOBOX1.Items[1] ou DBCOMBOBOX1.Text := DBCOMBOBOX1.Items[DBCOMBOBOX1.ItemIndex] deve funcionar. Verifique.
  14. Micheus

    Imagem No Grid

    acho que foi mais ou menos isto que eu tinha dito... por isto do meu questionamento, o qual ele não respondeu... Daí fica difícil...
  15. Se o texto a ser formado for assim tão padronizado, você pode usar apenas isso: procedure TForm1.PageControl1Change(Sender: TObject); begin label1.Caption:= 'Tabela ' +FormatFloat('00', pagecontrol1.TabIndex); end;
  16. Micheus

    Imagem No Grid

    é erro na compilação certo?Este tipo de mensagem é mais comum numa situação como a proposta pelo Jonas, onde você pode estar forçando uma determinada variável de um determinado tipo ser outro com o qual ela não é realmente compatível: BS := TBlobStream.Create((Campo as TBlobField), BMWRITE); Porque, se fosse uma questão de utilizar apenas um tipo impróprio na chamada do método Create, normalmente a mensagem seria referente a tipos incompativeis ou algo assim. Qual o tipo de dados deste seu campo Foto na tabela TBCadRim? Confirme também o tipo de field que foi incluso na tabela, ele deveria ser um TBlobField.
  17. Micheus

    Tab Por Enter

    Neste caso, tem que ser processado no Application, então volte a questão do OnMessage proposto pelo Jonas - apenas trabalhei encima do seu exemplo por achar que simplificaria as coisas. Infelizmente no componente TDBLookupComboBox não há uma propriedade DroppedDown, como nos descendentes de TCustomCombo (TComboBox). Com algo assim, você saberia que o cara está teclando o ENTER com a caixa de listas aberta e poderia tratar a tecla adequadamente. Abraços
  18. mensagem estranha. Como está o código onde este erro ocorre?
  19. Micheus

    Preechimento De Cor

    Siga o exemplo, vou ilustrar com um TImage:procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Image1.Canvas.Brush.Color := clLime; // cor do preenchimento Image1.Canvas.Brush.Style := bsCross; // estilo do preenchimento // utilizo a cor embaixo do ponteiro do mouse como superfície a ser preenchida Image1.Canvas.FloodFill(X, Y, Image1.Canvas.Pixels[X, Y], fsSurface); end;
  20. Violação de Chave constrangimento '' INTEG_566 " na tabela " Praticas ". Basicamente você deve ter algum campo inteiro na tabela Praticas que está definido de maneira incorreta. permita-me melhorar um pouquinho a resposta...Foreign Key - refere-se a chave estrangeira constraint - neste contexto diz respeito a restrição. Normalmente esta mensagem o corre ao tentar fazer em uma tabela "detalhe" uma referência para um valor não existente na tabela "mestre" (acho que nesta sequencia). As foreign constraint são normalmente criadas via instrução SQL (ex.): ALTER TABLE CIDADES ADD CONSTRAINT FK_PAISES FOREIGN KEY (PAIS) REFERENCES PAISES (PAIS); Veja que no exemplo, a tabela Cidades tem definida uma foreign key que referencia Paises. Se, ao incluir uma nova cidade, você tentar definir no campo Pais um pais não existente no respectivo campo da tabela Paises, este erro deve ocorrer.
  21. Micheus

    Tab Por Enter

    mas é o que deveria ser o certo. Quando o cara não usa o mouse, o ENTER funciona como seleção. Se você intercepta o ENTER, o componente que não sabe de nada disso, fica sem esta informação. Mesmo trocando o ENTER por TAB, você terá sempre o mesmo problema porque o TAB indica mudança de campo (componente, edit, coluna...) e o fato de você sair de uma campo para outro não significa que você alterou alguma coisa nesta lista - ela só intende quando você move a lista fechada (ao digitar para localizar) e quando aberta, ao clicar com o mouse ou teclando ENTER. Então... ... acho pouco provável que ache um. Tem ainda que lembrar que num TMemo ou TRichEdit, o ENTER é considerado quebra de linha. Num grid, se editável, coloca a célula em modo edição. Então, como fica isso também? Tudo bem, você vai dizer que pode filtrar o tipo do componente, mas daí uma hora o cara tem que saber que em tal componente o ENTER é isso, no outro ele é aquilo... :huh: (acho que ele vai achar isto ainda mais chato) Mesmo assim, naquele código que postou inicialmente (nas condições citadas), para não fazer toda aquela encrenca com OnMessage, bastaria que você alterasse para: Begin if not (ActiveControl is TDBLookupComboBox) and // você deve usar AND not (ActiveControl is TCustomGrid) then If Key = #13 then Begin Key := #0; Perform(WM_NextDlgCtl, 0, 0); End; End;
  22. Micheus

    Imagem No Grid

    você deve ter um campo blob para isso não?Estou achando meio estranho que ao mostrar uma determinada guia (TabSheet) você esteja solicitando a seleção de uma foto, mas... procedure TFRinclrim.TabSheet2Show(Sender: TObject); Var BS :TBlobStream; opd: TOpenPictureDialog; ImageJpg :TJPEGImage; begin opd := TOpenPictureDialog.Create(Application); if opd.Execute then Begin ImageJpg := TJPEGImage.Create; try if ConvertImage(opd.FileName, ImageJpg) then begin // aqui você está mostrando no seu TImage Image1.Picture.Assign(ImageJpg); // a tabela TBCadRim deverá estar em modo edição ou inserção. // não sei como você está trabalhando, então, verifique e acrescente o Edit se necessário // aqui você cria o meio de transferir a imagem para o blob (campo) BS := TBlobStream.Create(DMdados.TBCadRimFoto, BMWRITE); // aqui você transfere para o campo blob da sua tabela Image.Picture.Graphic.SaveToStream(BS); end; finally BS.Free; ImageJpg.Free; opd.Free; end; end; end; Veja se assim, você vai conseguir mover a imagem sem problemas. p.s. Jonas, este BS eu não peguei do seu código não, foi de uma que captura imagem que postei no 4Share. ;)
  23. Se está funcionando como você esperava, e aparentemente está, então está certo.
  24. Sim, tem algo errado com certeza.Se não tiver dificuldades com o idioma inglês, dê uma olhada no Firebird 1.5 Quick Start Guide, procure por Creating a database using isql. Está lá passo-a-passo. Tá errado. No link que passei, você se registra e das opções disponíveis você baixa a versão Personal. Tem quase todos os recursos da versão Full (lá tem o link para Tryal também). você não terá alguns recurso como a ferramenta para montar o diagrama de dados, avaliação de desempenho das suas queries - mas isto você nunca usou em Paradox!!! Não consigo testá-lo aqui, mas duvido que seja melhor que o IBExpert. Mas como você vai começar a mexer com um conceito um pouco diferente do que está acostumado, talvez seja uma opção. (ahh, o IBExpert permite que você selecione o idioma da interface - tem português). Eu utilizo os componentes MDO, com o qual ele foi construído (só serve para FireBird). Mas, para quem trabalha profissionalmente, sugiro que utilize os componente Zeos pela questão PORTABILIDADE (você escolhe o tipo de conexão: Firebird, PostGree, MySQL,...). Isto evita problemas futuros, quando você pode utilizar seu produto em um ambiente onde haja outro banco que não o Firebird. Que versão de Windows você usa. Se for server (2000, XP,..) verifique se o serviço instalado está iniciado. Se for Win95, Win98 ou Me, deve ter um programa fbguard (Guardian) rodando. Sabe o tal do Start Guide que mencionei acima, explica tudo isso - procure por Testing your installation. Umas dicas: - cuidado com nulls (no Start Guid procure por Expressions involving NULL); - atenção na criação do banco e tabela (quando definindo varchar) ao utilizar o collate adequado ao nosso idioma (envolve questões da acentuação) use o WIN1252; - o autoinc a que você está acostumado, funciona um pouco diferente num SGBD; - ao definir campos BLOB (memo, graphic - no paradox), há o sub-tipo: 0 = Blob (usado para graphic); 1 = Text (memo). Mais um artigo que merece ser lido por quem sai dos TTables para SGBD - Migrando para o Ambiente Cliente/Servido Se você quiser apenas utilizar um SGBD como se fosse suas tabelas Paradox, você até pode, mas estará subutilizando o banco e não estará agregando ao seu currículo o conhecimento apropriado. (trabalhar com um SGBD que oferece, transações, integridade referencial, procedure, views e triggers, e não explorá-los ou entendê-los....) Tenha paciência e se quiser realmente aprender mais sobre o que você pode fazer com um SGBD, dê pelo menos uma olhada nestes tópicos que já mencionei e coloquei alguns links. Bom estudo.
  25. Isso é complicado de explicar em um post.Veja alguns artigos para entender do que se trata um SGBD (Sistema Gerenciador de Banco de Dados), que é o que esses "bancos de gente grande" são: - SGBD (apresentação) - Programação (Linha de Código) matando as duas com uma resposta só: IBExpert. Segue o link para download da versão Free. você deve se registrar - é interessante porque você recebe aviso sobre cada versão atualizada.Para saber mais sobre o Firebird e configurar o banco no IBExpress, acesse o link www.firebase.com.br. Voce também precisará se registrar, mas o artigo lhe será muito útil. Outra ferramenta que "citam por aí" é o IBConsole, mas considero a IBExpert melhor. Outro site sobre Firebird que você pode achar artigos para você que está começando com este banco é o da Comunidade Firebird de Língua Portuguesa Itens a serem explorados: - integridade referencial - Modelagem de dados Abraços
×
×
  • Criar Novo...