Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Acho, ainda, que seria uma questão de escolha: 1) utilizar componentes data-aware, ou seja, que fica ligado a um dataset e popula a lista automaticamente, bem como atualiza o campo sendo alterado; 2) utilizar components não data-aware, ou seja, você tem que gerenciar o processo de popular a lista, obter o valor selecionado e gravá-lo no bando de dados. Ao meu ver, são coisas distintas e que depende do tipo de implementação que você está utilizando. Tem que prefira utilizar TEdits e gerenciar tudo no "braço", eu prefiro a facilidade de um TDBEdit. Abraços
  2. Walter, que versão do Delphi você está utilizando, porque que me lembre, até o Delphi 7 só dá para abrir um projeto (*.DPR) de cada vez. O que não ocorre com os *dpk (packages) :huh:
  3. como eu já mencionei, quando você fecha a conexão, os datasets são fechados. Então, provavelmente você não está reabrindo os datasets, porque isto não ocorre sozinho.
  4. Kasser, esta operação não lhe parece razoável, já que você chama o método Close? Este close fecha o form e se for o formulário principal, encerra a plicação. o que você quer dizer com "fecha a conexão"? Se você atribui False a Connected, você estará fechando a conexão com o banco e qualquer componente que acesse uma tabela nesta conexão, automaticamente será fechado (o mesmo que definir a propriedade Active = false em um dataset). Obs: estes seus exemplos mostram apenas a restauração. Mas, mesmo para backup, acredito que os cuidados tenham que ser os mesmos.
  5. Cyberhack, acredito que seria mais proveitoso se você desse uma idéia do que você tem em mente. Observe que cada colega, acima, deu uma resposta referente ao seu post inicial. Porém, são aspectos diferentes da questão "manipulação em memória dinâmica". Abraços
  6. Micheus

    (Resolvido) Qrtee

    Eder, vamos ver se resolvemos este problema. Eu fiz todo o processo para o Delphi 3 e então transcrevo abaixo o procedimento para instalação. - Inicialmente baixe o arquivo SourceQRTee.zip já citando em post anteior; - Crie uma pasta QRTee dentro da pasta Delphi\Source - Agora, extraia os arquivos em Delphi\Source\QRTee - No Delphi, utilizar opção do menu: File->Open...; Na caixa que aparece, troca na caixa de lista "Arquivos do tipo" para "Delphi package source (*.dpk)" - Seleciona arquivo TeeQR44.dpk (no seu caso Delphi 4. Eu utilizei a TeeQR43.dpk para o Delphi 3) - Acionar o botão "Compile", haverá mensagem de erro: "Requirede package 'Tee44.dpk' not found" Até aqui acho que você já tinha chegado. Como resolveremos este problema: - Feche o Delphi. - Acesse o link: http://www.steema.com/download/TeeChart_v4...rt_version4.htm e baixe o instalador do TeeChart V4 Trial, apropriada a versão do seu Delphi (a 4.0; eu estarei baixando a 3.0) - Instale ele em uma pasta "qualquer". Eu sugiro, na do Delphi\Source - como resultado os arquivos estarão em "Delphi\Source\TeeChart Pro v4 for Delphi 4 Trial" - Concluida a instalação, você deverá encontrar uma pasta com o nome "Delphi 4". Dentro dela deverão haver 3 pastas: Bin, Lib e System; - Copie o conteúdo da pasta Bin para a pasta Delphi\Bin; do mesmo modo, o da pasta Lib para Delphi\Lib e da pasta System para sua pasta System32; - Abra o Delphi novamente. Acesse a opção do menu "Component->Install packages..." e verifique se aparece na lista de pacotes "TeeChart 4.0 Components". Se não aparecer, click em "Add..." e localize na pasta Delphi\Bin o arquivo "dcltee44.dpl" (no meu caso, "dcltee43.dpl"). a título de curiosidade, há lá um arquivo "dcltep44.dcl", mas este é da versão Pro que é o Trial (teste ou demo) - então ignore-o. Feito isto tudo. Reabra novamente o TeeQR44.dpk e compile-o - não deve mais ocorre erro, então acione o botão "Install". Pronto!!! Arquivo de Help (padrão .chm) do TeeChart: http://www.steema.com/files/vcl/public/TeeChartGuide.chm (ref. Steema) Tutorial sobre TeeChart: http://www.devmedia.com.br/articles/viewcomp.asp?comp=1998 (ref. DevMedia) Na pasta de instalação do componente (TeeChart Pro v4 for Delphi 4 Trial) há vários exemplos, seguem alguns bem completos: QuickReport: Delphi\Source\TeeChart Pro v4 for Delphi 4 Trial\Exemples\3rdParty\QuickReport\QRDemo1 e QRDemo2 Tee e DBTee em form's: Delphi\Source\TeeChart Pro v4 for Delphi 4 Trial\Exemples\Standard Qualquer problema, dá um toque. ;) Boa sorte. Abraços
  7. Micheus

    Qreport Delphi

    qual seria exatamente o problema? Supondo que você tenha seu relatório prontinho, e que você queira imprimir justamente os dados do registro atualmente selecionado no grid, haveriam duas possibilidades. Quanta informação desta seleção você pretende imprimir? Só estas duas? Se form, sugiro que você passe-as como parâmetro para uma função (criada no formulário do relatório) que inicializa variáveis TQRText. Se forem mais campos, acho que seria mais conveniente utilizar TQRDBText para mostrar os campos deste dataset. Quanto a primeira opção, você pode dar uma olhada na seção Tutoriais & Dicas neste post: Imprimindo Conteúdo De Tedit's.
  8. Seguimos deste post, para continuar o assunto que agora tratamos: comunicação entre os PC's. Abraços
  9. Agregando a este seu comentário o que você já colocou lá no outro post, visto que passaremos a tratar da questão da comunicação entre PC's: José, este seu server deverá gerenciar uma lista de solicitações, o que não tem nada de complicado: chegou a requisição, pões na lista. Depois, o processamento a partir desta lista é feito por ordem de chegada, ou seja, as mais antigas atendidas primeiro. Poderia ser por ai o caminho? Abraços
  10. apenas completanto, o uso do "%" irá determinar que parte da string será "generalizada". Por exemplo:1) procurar apenas nomes que começam com "MA": - então você teria "MA%" e como resultado poderia ter MAria, MAriana, MAurício; 2) procurar apenas nomes que terminam com "DE": - então você teria "%DE" e como resultado poderia ter AdelaiDE, MatilDE; 3) procurar nomes que contenham "TE" em qualquer posição. - então você teria (como exemplificado pelo Péricles) "%TE%" e como resultado poderia ter ElizabeTE, TErezinha, MarTEndau. Abraços p.s.: bom vê-lo por aqui Péricles. Seja bem vindo. ;)
  11. quando você definir sua tabela de Pedidos, você provavelmente conseguirá visualizar esta lógica já que terá que buscar os dados destas 3 tabelas que você já tem para "alimentar" a de pedidos.
  12. Ter tem - só não tenho como lhe citar qual seja agora. (talvez alguém possa adiantar isto) este: "pegar o protocolo da inteface", eu não entendi. O protocolo para comunicação com sua interface dever ser fornecida pelo fabricante. Não está listado em algum manual? Quando você coloca o exemplo, já está mostrando parte do protocolo de comunicação. Então, você quer saber é como enviá-lo para a porta serial? Supondo o uso de um componente "X", após aberta a conexão com a porta serial (COM1, COM2, COM3,...), os bytes são enviados após formatados na seqüência definida pelo protocolo. No caso do <IL>, o byte teria que ser montado conforme dito: a- as instruções vão nos 4 bits+significativo; b- os níveis operativos vão nos outro 4 bits - completando 8bits = 1 byte para simplificar, vamos pensar em hexadecimal. Por exemplo: $FB (decimal -> 251), onde o F (decimal -> 15) está corresponde aos 4 bits mais significativo do byte e o B os 4 bits menos significativos. Deste modo, para o item "a" os 4 bits representarão valores que irão de 0 a 15 ($0..$F), já para o item "b" você vai ter apenas quatro valores possíveis, conforme combinação dos dois bits: bits 3 2 1 0 |Dec|Hex -------- |---|--- 0 0 0 0 | 0 | $0 0 0 0 1 | 1 | $1 0 0 1 0 | 2 | $2 0 0 1 1 | 3 | $3 Então, um comando de valor $F (todos os 4 bits ligados) e um nível operativo $2 (o 2º bit menos significativo ligado) combinados em uma variável ficaria deste modo: ex.: variavel_byte := $F0 +$02;
  13. Micheus

    Extrato Bancario

    ... e talvez, o mais importante para uma exemplificação: nome das 3 tabelas e os campos que as relacionam.
  14. José, por questão de organização, desmembrei seu último post deste tópico por tratar de outro assunto, (apesar de o projeto ser o mesmo - eu sei). Neste post você dá continuidade a discusão sobre a comunicação entre os PC's na rede - via socket (p.e.) E neste novo - Comunicação via porta serial - discutiremos a questão de acesso a porta serial para configuração da sua matriz-display. Abraços
  15. Micheus

    (Resolvido) Qrtee

    é bem este arquivo zipado que você deveria utilizar. E ele contém o tal dpk. Estes devem ser os arquivos listados na pasta onde você descompactou o arquivo:FirstAidKit.txt Install.txt lista.txt QrTee.pas Qrteereg.pas Teedefs.inc TEEQR.RC TeeQR43.dpk teeqr43.res TeeQR44.dpk teeqr44.res TeeQR4C.bpk TeeQR4C.cpp TeeQR4C.res
  16. talvez dê para utilizar os recursos WMI. Eu já tinha lido um artigo sobre ele há algum tempo e adicionei ao meu favoritos, só não lembrava onde. :) Dei uma fuçada e achei o artigo. No início tem o link para o componente. No arquivo zipado, tem um executável (demo), execute ele, e na caixa de lista ao lado do botão "Get Class or Query", selecione Win32_NetworkAdapter e depois click no botão citado. Voce vai ver em cada coluna os adaptadores encontrados e nas linhas as propriedades lidas. Se servir, talvez alguém possa lhe ajudar com ele. Acho que vai lhe ajudar
  17. Há quanto tempo heim?! Bom te "ver" por aqui outra vez. :) José, se entendi direito você quer controlar um dispositivo eletrônico (esta Matriz) que está ligada ao servidor? Seria isto? Sobre a questão, você teria que criar um programa Servidor para receber as requisições/instruções e um programa Cliente para conectar-se a este servidor e enviar/receber os dados. Isto poderia ser feito com sockets. Estes posts podem ser úteis: - Tclientsocket E Tserversocket, Delphi 7 - Cadê esses componentes? - Record / Socket, Enviar records através de socket TCP - Preciso De Uma Dica Sobre Sockets! - Como Mandar Texto Via Serversocket Clientsocket? Abraços.
  18. Micheus

    (Resolvido) Qrtee

    é estranho, porque mesmo eu baixando o anexo do link aqui, vejo todos os arquivos. Contudo, realmente não há o que você fazer com ele, pois você utiliza o Delphi 4 e, como você pode ter verificado no link da Steema, os arquivos são outros. Este eu baixei e o que fazer com ele....poderias dar um passo a passo o que tenho que fazer.... tipo qual o primeiro passo de tudo você baixou o arquivo para Delphi 4, certo?! (SourceQRTee.zip) - Verifique se você tem como desinstalar a versão que você possui atualmente. Via menu "Componentes->Install packages...", localiza o package dele (deve ser o único componente nela - verifique via botão Components), e para removê-la utilize o botão Remove; - Para evitar um dos possíveis problemas previsto na instação (o 2º, ver FirstAidKit.txt no zip), abra o Windows Explorer e procure pelo arquivo compilado do componente (o .dcu). Sugiro que você utilize a opção Localizar na pasta de instalação do Delphi (procure por "QRTee" - sem as áspas). Encontrado o "dito-cujo", exclua-o (ou faça um back-up se quiser). - Para instalar, abra o Delphi 4; Selecione no menu "File->Open..." e localize (na pasta que você descompactou os fontes) o arquivo "TeeQR44.DPK" - Na janela que foi aberta (a de packages) utilize o botão "Compile". Se não houver qualquer problema, o botão "Install" será habilitado e, então, click nele para concluir esta etapa. - No processo de compilação, foi gerado um arquivo compilado do package - TeeQR44.BPL. Localize-o (talvez tenha ficado na pasta onde foram descompactados os fontes). Encontrando ele, copie-o para a pasta "C:\Windows\System32"; - Os arquivos QRTee.DCU e QRTeeReg.DCU deverão ser copiados para a pasta "Lib" localizada na pasta de instalação do seu Delphi (???\Delphi\Lib). Neste ponto você já deve ter o componente disponível - é dar uma conferida. Caso no momento que você click no botão "Install" receba a mensagem: "A class named TQuickRep already exists" - um dos possíveis problemas previsto na instação (o 1º, ver FirstAidKit.txt no zip), então, você deverá abrir o arquivo TeeQR44.dpk e - Acionar o botão "Remove" da janela que foi aberta (a de packages) e selecionar e remover o arquivo QRpt40.dcp (é a referência ao package do quickreport supostamente intalado). Voce deve então, utilizar o botão "Add" para adicionar a referência a sua package do quickreport instalado (será um arquivo de nome muito similar ao do removido). - Feito isto, basta clicar em "Install" e seguir a partir deste procedimento com as outras etapas já mencionadas anteriormente. Bom, agora não deve ter erro - o componente está instalado! Eder, tudo isto que eu citei, está nos dois arquivos .txt que acompanham o arquivo zipado. (eu apenas traduzi). Espero que consiga instalar sem muita dificuldade. Abraços
  19. Walter, como disse antes, acompanham "demos". Após a instalação, você deve localizar a pasta onde você instalou o componente. Nesta pasta há sub-pastas e em uma delas vários demos (para cada aplicação). Dê uma olhada.
  20. Micheus

    (Resolvido) Qrtee

    Eder, segue ele em anexo. (contém as instruções no Install.txt) Eu tomei um "baile" para instalar ele, porque deu conflito com a versão para uso nos forms. Tive que fazer minha própria unit de instalação do componente e instalei-a em um de meus pacotes (dpk). Veja se você tem mais sorte com as instruções. ;) Apenas complementando as informações: - Versões Standard do QuickReport - QuSoft (confira sua versão em relação a versão Delphi utilizada) - TeeChart v4 para QuickReport v3 - Steema Abraços Motivo da Edição: Atualizado link da QuSoft
  21. Micheus

    Comando Trunc

    brugall, você tem que resolver se quer que o 8,333, passe para 8 ou 9 - não dá para ser duas coisas ao mesmo tempo. ;)Supondo que você queira fazer o arredondamento: 8,3333 => 8 e 8,55 => 9, então você poderia utilizar a função ROUND (que retorna um Int64 - inteiro - "arredondado"). A função TRUNC tem como objetivo extrair a parte inteira de um número fracionário: 8,3333 => 8 e 8,55 => 8 (esta função retorna um Int64 - inteiro). A função INT também extrai a parte inteira de um número fracionário, mas o tipo retornado é um Extended. Seu "complemento" seria a função FRAC que tem como objetivo retornar a parte fracionária (do tipo Extended - ponto flutuante). Estas funções estão declaradas na unit System. Abraços
  22. exatamente! bom, o SQL abaixo nos trará os dados (data_saida e peso) dos veículos ordenados por placa e data_saida: Caso alguma viagem não implique em abastecimento, ocorrerá que não existirá um registro em Abaste.db para um determinado codigo em Ajuste, logo, não dá para simplesmente adicionar a relação da Abaste com Ajuste via cláusula WHERE porque poderíamos deixar informações de fora, já que o resultado implica na satisfação de todas as condições definidas nesta cláusula. Em alguns bancos, é possível fazer outer joins (left ou right) na cláusula where utilizando um "*" no respectivo lado do sinal de "=", p.e. no SQLServer 2000 (se não estou "trocando as bolas"): where Ajuste.codigo =* Abaste.codlan Mas o padrão ANSI é o uso das cláusulas JOIN (inner, left/right outer - veja este artigo - ref. Comunidade-Firebird). O Paradox é um pouco limitado neste sentido, mas dá suporte ao que você precisa. Então, acredito que com o acréscimo abaixo voce consiga obter os dados corretamente: não sei se você o utiliza, mas daria para experimentar o código através do Database Desktop ou Database Explorer (ambos acompanham o Delphi). Caso não o teste com as aplicações citadas, você pode fazer seu relatório inicialmente com uma banda detalhe, o que implica que você terá todos os dados listados e, então, poderá observar se há viajem onde não há litros associados (isto garante que você está pegando os registros corretamente - desde que esta condição realmente exista, é claro). Uma vez testado, torná-lo sintético, é uma questão de utilizar bandas Group (header e footer) e QRExpr. Não é?! - você deve ter observado que não utilizei o seu "*" no select - dê preferência a esta opção, se possível. ;) - Também é conveniente o uso de alias para a tabela (é necessária nos JOIN) e evita problemas de conflito quando há colunas com mesmo nome em tabelas diferentes (ambiguous column name). Abraços Modelo_ER.doc
  23. robinhocne, sempre que você lidar com listas (como TStringList, p.e.) ou vetores e você tentar acessar uma posição da lista que não exista você receberá uma mensagem deste tipo e que significa que você tentou acessar uma posição (Index) fora do domínio (out of bounds) da lista (list). Já "escolado" com este método que você está utilizando para gravar os dados, e vendo o código postado, eu arriscaria dizer que você está esquecendo de adicionar valores a sua lista de valores (vvlr). Levando em consideração que justamente no procedimento AlterarRegistro (ref. post) você faz uso de um único indexador (baseado em vcpo) e acessa as duas listas (vcpo e vvlr), e que geraria este erro caso sua lista de campos fosse maior que a de valores. ;) Imagino que você esteja adicionando a sua lista vcpo os campos associados aos ChekObs e RdbEnt, mas é possível observar no código a adição de valor em apenas uma condição (true), o que significa que em outra (false) não há adição à lista. Veja o comentário num trecho do seu código: ... If RdbEnt.Checked Then // <========= apenas se checked Add ('1'); If ( EData (TxtDtEnt.Text) ) then Add (#39 + Formatdatetime ('mm/dd/yyyy', StrtoDate (TxtDtEnt.Text)) + #39); Add (#39 + TxtReg.Text + #39); Add (#39 + TxtCed.Text + #39); If ( EData (TxtVen.Text) ) then Add (#39 + Formatdatetime ('mm/dd/yyyy', StrtoDate (TxtVen.Text)) + #39); Add (#39 + TxtCate.Text + #39); If ChekObs.Checked Then // <========= apenas se checked Add ('1'); ... e quando a opção for falsa? supondo esta lógica em seu último post: If RdbEnt.Checked Then Add ('1') else If RdbEnt.Checked Then Add ('0'); isto não está "soando" meio estranho não?! se RdbEnt marcado então adiciona 1 senão se RdbEnt marcado então adiciona 0 e quando RdbEnt NÃO estiver marcado??? O lógico seria: If RdbEnt.Checked Then Add ('1') else Add ('0');já que Checked só pode ser True ou False, logo, if true then, do contrário, else (false) Abraços
  24. Significado do erro, tirado de Windows Sockets Error Codes (ref. msdn): o que significa que por algum motivo, na condição que você colocou, o seu server (programa) não está aceitando conexões de seu client possivelmente porque está inativo ou o programa não está "rodando", ou ainda, conforme é possível verificar abaixo, por não estar achando o server devido a algum problema de resolução de nome. (o que acho pouco provável, visto que você diz utilizar o endereçamento IP e não o HostName) Neste link, são sugeridas algumas verificações: - Verifique o endereço destino que você está utilizando; - Se você utiliza um hostname (nome do servidor), ele estará sendo "resolvido" para o endereço correto (endereço IP)? - Se a resolução do hostname usa um hosttable local, é possível que esteja "resolvendo" para um endereço obsoleto/velho (endereço IP); - É também possível que o arquivo de serviço local tenha um número de porta incorreto (embora não seja comum). (minha nota: Neste caso, acho que seria algo como você ter configurado em seu cliente uma porta que não é a que o servidor responde) Abraços
  25. Felipe Vencato, são muitas dúvidas. Espero que tenha bastante tempo até a apresentação/entrega do seu projeto. Sugiro que você vá tentando avançar uma etapa de cada vez, para então postar uma nova dúvida. ;) 1.1 - acredito que você terá que contabilizar e guardar esta informação na máquina do usuário.Para isto você tem duas opções: arquivo de inicialização (*.ini) ou registro do windows (pesquise no forum por inifile ou registry; 1.2 - Altere sua propriedade Align para alTop. 2.1 - Sem problemas. Bastaria que em cada uma destas abas você carregasse um Frame - você cria suas telas de cadastros, gráficos em Frames (File->New->Frame) não Forms. Tem apenas que trabalhar direitinho a questão da dimensão das "janelas" que você utilizará.2.2 - No caso de uso de frames, este não são adicionados a lista "Auto-create forms" (Projects->Options...). Mas se forem forms, basta que você os selecione e mova para a lista "Available forms"; 2.3 - Isto também é possível, entretanto é um pouco mais complicado, requerindo algum tipo de controle, estruturação do form/frame/datamodules para que utilize um mesmo form ou frame "n" vezes simultaneamente; 3.1 - Não saberia responder, sem testá-los no quisito customização, mas para adiantar tem um componente baseado no TCalendar que viabiliza a pintura de dias - TColorCalendar (pode ser outra opção).3.2 - ... (varia com o componente escolhido) 3.3 - ... (varia com o componente escolhido) a principal vantagem que vejo em colocá-lo em um diretório, é a facilidade de manutenção, já que elas podem ser atualizadas via Windows Explorer facilmente. Já no programa, você terá que implementar em algum lugar uma opção para isto. Há de se levar em conta a questão segurança/integridade desta informação. Se o arquivo fica exposto a qualquer um que possa apagá-lo ou adulterá-lo, isto pode resultar em erro ao tentar acessá-lo de seu programa, já que o caminho pode não existir. E se o nome do arquivo for alterado, também não o encontrará - coisas que não ocorrem quando você coloca no banco de dados. Em qualquer das duas opções, cabe optar pelo formato JPG ou outro compactado. imagino que você queira ligar seus componentes visuais aos datasets (do tipo Table ou Query). Neste caso você estará utilizando os componentes da paleta "Data Control" que são ligados aos datasets via propriedade DataSource. Nesta propriedade você seleciona um componente TDataSource (localizado na paleta "Data Access"), que por sua vez ligará ao respectivo dataset via propriedade DataSet.Já que você utiliza FireBird, você poderia utilizar componentes de acesso ao banco da paleta InterBase (ficando sem portabilidade) que são plenamente compatíveis. Uma boa opção seria utilizar os componentes ZeosLib (facilita a portabilidade a vários outro bancos de dados) que suporta FireBird, MySQL, Oracle, SQLLite, SyBase, Postgresql, MSSql (acho esta opção melhor). Há outras tantas opções. Uma vez decidido que componentes utilizar, você acessa os dados de "n" maneiras e pode faze as operações que desejar. Com relação a gráficos, você vai ter que primeiro decidir que gerador de relatórios irá utilizar. O mais comum é o QuickReport, mas houveram outros tipos que acompanharam algumas das versões do Delphi - um deles o Rave Report. além de você ter modelado seu banco de dados para suprir as informações necessárias para extrair estas informações, vejo que que você vai precisar estudar um pouco de SQL. ;)Dê uma olhada em apostilas (tem um link no topo da página, procure por banco de dados Interbase/Firebird. Mesmo qualquer outro artigo que lhe fale sobre instruções SQL lhe ajudará, já que em teoria é um padrão. não conheço uma, mas lendo várias dá para formar uma idéia legal. como falei antes, vai depender que gerador de relatórios você vai utilizar. Lembre-se do que eu disse no início, comece a postar suas dúvidas em partes para que os posts não fiquem confusos e longos como este. ;) Abraços
×
×
  • Criar Novo...