
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
ou, uma banda Detail para os dados do cliente e uma Sub-detail para as parcelas...
-
talvez a solução mais simples possa ser mesmo executar o aplicativo Ntrights.exe a partir do Delphi, com o parâmetros conforme o artigo apontado por um dos links que o Jhonas postou: Como definir logon direitos de usuário com o utilitário Ntrights.exe Em termos de implementação via Delphi, com certeza você teria que fazer uso de alguma DLL (API do Windos) ou de um componente que a utilize. Eu acredito que passará pelas funções do LSA (Local Security Authority), provavelmente LsaAddAccountRights. Em Account Rights Constants (ref. msdn), você deve verificar isto. Com isso em mente, e procurando um pouco, encontrei uma página com componentes para isto: NTSet Component Collection Um grupo destes componentes, TNTUserMan parece implementar esta funcionalidade (suporta D6..D2006). Porém é Shareware e conforme diz na seção de download: "Evaluation version has no restrictions, but must not be used in commercial or production applications." Ele tem toda a funcionalidade e não poderia ser utilizado para uso comercial. A versão paga, contém fontes, suporte e atualizações. Se opinar por implementar a interface com a DLL, acredito que você poderá ser basear nesta (ref. Experts-Exchange) codificação que faz uso de outras funções desta mesma DLL. Ou, ainda, neste componente publicado em DelphiPages. Abraços
-
existem outras linguagens de programação que não utilizam o BDE... depende do que voce quer fazer Permitam-me uma parte...Eu diria: existem outros bancos de dados que não utilizam o BDE. A questão é que, se você pretende continuar trabalhando com Paradox, não deverá deixar de utilizá-lo. Passando a trabalhar com um SGBD (sistema gerenciador de banco de dados), como MySQL, Firebird, Interbase, ... neste caso, normalmente você terá o gerenciador do banco instalado no servidor (ou mesmo máquina local - "servidor dele próprio") e precisará ainda assim, instalar pelo menos a DLL client que é responsável por toda a comunicação/transação com o servidor do banco de dados. (mais ou menos isto em linhas gerais) Abraços
-
vms, desculpe a demora em responder - estive ausente esses dias. É bem estranho. Voce chegou a experimentar utilizar os atalhos, no link que indiquei, para modificação do entre-linhas processados pelo próprio componente (ele com foco e você usa o atalho em um parágrafo)? Será que este efeito estaria ocorrendo após você ter colado algum texto formatado (do Word), por exemplo? Chegou a fazer uso da função em um texto simples (sem formatação)? Abraços
-
Se você tentar abrir os exemplos do TurboDelphi, basta ir ignorando as propriedades que não são reconhecidas. Deve conseguir abrir - pelo menos no D7 abriu. :huh: Nunca mexi com ela. Eu utilizo o MDO (apenas D5 em diante) para uma aplicação que optei por Firebird. Mas, pelo que dá para ver dos componentes neste link, é basicamente o mesmo que os demais. você vai precisar adicionar um componente do tipo Database (FBLDatabase), um do tipo Transaction (FBLTransaction) e para as consultas/edições um do tipo SQL (FBLDsql). Olhando o arquivo de ajuda (FbLib.chm), ví que o componente FBLDsql tem apenas a propriedade SQL, onde você coloca as instruções, e que pode ser feito uso da propriedade QueryType para indicar o tipo de SQL (qtUnknown, qtSelect, qtInsert, qtUpdate, qtDelete, ...qtSetGenerator) - isso é bem diferente se compararmos ao Zeos e Interbase. :huh: E ainda tem o fato de que há apenas o método ExecSQL. Em outro componentes, este método é utilizado para comandos SQL que não resultem em linhas, caso de INSERT, UPDATE, .... Em outros componentes, quando fazemos uso do SELECT devemos utilizar o método Open - inexistente neste componente. Resumindo, você deve conseguir fazer as coisas funcionarem, mas não dá para se basear muito em qualquer outro componente que haja por aí. Se bem que no fundo, depois que você fizer a primeira consulta funcionar, o resto não deverá ser problema. Abraços e boa sorte.
-
Faça uso das funções API - EnumWindows e GetWindowText Veja este exemplo do colega Graymalkin. No procedimento EnumWindowsProc, você deverá utilizar GetWindowText para retornar o título da janela. De posse dele, você poderá utilizar a função Pos para procurar pelo sub-string desejado e, encontrando, faz o que "bem entende" com ela. Abraços p.s. já que o Jhonas postou primeiro que eu, fica como complemento.
-
serve para trabalhar como o RichEdit como se fosse um TMemo, ou seja, sem formatação. (pelo menos deveria) Esta precisão, acho que você não vai obter. O entre-linhas pode ser 1, 1.5 e 2 - apenas. No RichEdit, quando você cola um texto formatado, ele tenta manter estas formatações. No geral, quando você quer formatar algo no componente, você precisará selecionar o texto desejado. Ou definir uma formatação, que ficará disponível a partir da posição do cursor em diante - como funciona no Word. O componente não tem muitos recursos- ele não suporta todo o padrão RTF. Ele está mais para o WordPad (que vem com o Windows). Quer ter uma idéia do que ele pode fazer? Então, dê uma olhada no msdn: About Rich Edit Controls. Neste link, você também encontrará uma lista com todos os atalhos de teclados (Rich Edit Shortcut Keys) para aplicar algumas das formatações do texto. O componente, na verdade, oferece poucos recursos para manipulação do texto. Basta ver a quantidade de mensagens (opções) que ele pode tratar - são aquelas que começam com "EM_". Veja um exemplo de como utilizar, nesta dica que postem em Tutoriais & Dicas: Justificação E Entre-linhas Em Richedit ou neste post, onde implementei uma função "Destaca Texto" Abraços p.s. Veja se escreve meu nome com U e não com LL. Faz tempo que o corrijo e nem percebeu. ;)
-
Vagner, vou tentar explicar melhor agora. ;) Se você utilizar um componente TZQuery para fazer todas as consultas, isso implica que você deverá montar suas consulta em run-time, logo terá que implementar isto no código. Se opinar por utilizar um componente para cada consulta, então as consultas serão montadas em design-time (direto nas propriedades). Para buscarmos uma determinada informação baseada em um parâmetro, faremos uso da propriedade SQL do ZQuery você coloca a instrução SQL para realizar a consulta: SELECT nome, endereco, cidade FROM clientes WHERE id = :id em desing-time, basta editar a propriedade SQL, mas em run-time, temos que fazer desta forma: ZQuery1.SQL.Clear; ZQuery1.SQL.Add('SELECT nome, endereco, cidade'); ZQuery1.SQL.Add('FROM clientes'); ZQuery1.SQL.Add('WHERE id = :id'); onde, ZQuery1 é o componente que utilizaríamos para as consultas dinâmicas. O uso do ":" resulta em declarar um parâmetro (nome que o segue) que deverá ser inicializado antes de que a consulta seja "aberta". O valor deste parâmetro é inicializado através do método ParamByName. Então, supondo que o TEdit em que você digita o ID chame-se Edit1, nós passamos o parâmetro assim: ZQuery1.ParamByName('id').AsInteger := StrToInt(Edit1.Text); dê preferência a inicialização do parâmetro através de um dos métodos que força o tipo dele, neste caso AsInteger (parâmetro é um integer). Se você não vai fazer uso de um botão para forçar a busca, então vamos utilizar o evento OnExit do componente TEdit. Ao sair do campo executamos a consulta e movemos os valores obtidos para os edits que mostrarão a informação ao usuário. Faremos isso utilizando o método FieldByName, de modo a ficar claro no código que campos estamos buscando. Mas, caso a instrução SQL seja adicionada em design-time, poderemos adicionar ao dataset (TZQuery) os campos (Fields) e, neste caso, acessar os campos diretamente. Como disse antes, isso depende de como você pretende implementar seu código. (são sempre muitas as opções) Uma vez que nesta tela seja mostrado apenas os dados consultados, podemos inicializar a consulta no componente ZQuery uma única vez (no OnCreate do form) e, depois, no evento OnExit do edit passaríamos apenas o parâmetro. Não sei que opção você utilizaria, então vou por tudo no OnExit. Juntando tudo: procedure TForm1.Edit1Exit(Sender :TObject); begin ZQuery1.SQL.Clear; ZQuery1.SQL.Add('SELECT nome, endereco, cidade'); ZQuery1.SQL.Add('FROM clientes'); ZQuery1.SQL.Add('WHERE id = :id'); ZQuery1.ParamByName('id').AsInteger := StrToInt(Edit1.Text); ZQuery1.Open; if not ZQuery1.EOF then begin Edit2.Text := ZQuery1.FieldByName('nome').AsString; Edit3.Text := ZQuery1.FieldByName('endereco').AsString; Edit4.Text := ZQuery1.FieldByName('cidade').AsString; end else begin Edit2.Text := ''; Edit3.Text := ''; Edit4.Text := ''; ShowMessage('Não foi encontrado cliente com este ID'); end; ZQuery1.Close; end; Faltaria ainda a validação do texto digitado, de modo a garantir que seja realmente um texto numérico e não alfanumérico. Mas isso, acredito que você possa fazer. ;) Por fim, se tratar-se de uma aplicação simples, talvez utilizar componentes data-aware seja uma opção, já que uma vez ligados ao datasource, irão fazer todo o trabalho "pesado" - basta abrir o dataset e pronto! (mais uma vez, depende da forma como você pretende implementar seu projeto) Abraços
-
etspaz, esta dúvida é especificamente associada a banco de dados - temos uma sessão para isso. Qual o banco de dados que você utiliza, assim eu posso mover para a sessão correta.
-
Olá José :D Projeto interessante, mas esse é mais complicado de dar apoio. Então, boa sorte. ;) Dê uma olhada neste post do meu colega Pericles. Acho que você poderia contatar ele para trocar umas idéias. Abraços
-
Aí não chega nem a compilar João, esta mensagem parece ser resultado de um erro de execução - não de compilação. Está estranho... Este erro seria mais comum quando você tem alguma instrução SQL com INSET, UPDATE, DELETE, ... que não retornam resultados e que você ao invés de utilizar o método ExecSQL, utiliza o Open ou Active=True. Você estaria fazendo algo deste tipo logo que inicia algum de seus forms/datamodule? (verifique em todos que você tenha habilitado no auto-create). Abraços
-
charles_1976, o básico do relatório segue o mesmo princípio do outro que você recém concluiu. O que muda? Muda apenas a forma como você fará a consulta - sua query. Parece que esta é sua dificuldade. Sugiro que você procure algum material a respeito e dê uma estudada. ;) Basicamente em um relatório de aniversariantes, você lista eles organizados pelo mês - se for listar por período. Do contrário, lista apenas o mês solicitado. Para uma consulta pelo mês específico, basta utilizar uma instrução SQL como esta: SELECT * FROM membros WHERE extract(month from datnascimento) = :mes ORDER BY datnascimento mas uma vez, lembro que no lugar do * deve ser utilizado apenas o nome das colunas necessárias (questão otimização de recursos) a função extract, retira uma parte do campo desejado; no nosso caso, pegaremos apenas o mês (month) da data (datnaescimento - estou supondo este nome, você não informou) e comparamos com o mês que queremos filtrar (parâmetro mes). depois antes de abrir a consulta (via método open), você deve passar o parâmetro informando o mês a ser filtrado e isto você faz de forma mais segura, dependendo do componente de acesso, através do método ParamByName no seu código - mais ou menos assim: QryAniversariantes.ParamByName('mes').AsInteger := <número do mês> QryAniversariantes.Open; Informe se sua listagem deve ser por período, porque a consulta muda um pouco. obs: aquele ":" na instrução SQL é quem define um parâmetro para o qual devemos passar um valor antes de abrirmos a consulta. Abraços
-
Denis o que ele quer é que sejam buscadas as palavras exatas, não os sub-string. No exemplo que ele deu: ele recebe o resultado BBVA, mas estava procurando somente 'BB' ele recebe o resultado banco são o melhor negocio do brasil, mas deveria ser somente 'banco do brasil' Captou? Eu não estou certo, mas acho que se ele simplesmente omitir o %, resolve o problema dele. Inclusive o fato de ele substituir os espaços por % nas strings de pesquisa, também estão influenciando no resultado (como vemos no 2º exemplo). O que você acha? Abraços
-
Vagner, supostamente você já tem o resto da tela pronta, certo?!Voce não informou nada sobre sua aplicação (nome do banco, componentes de acesso que usa, componentes que mostrará os dados), então, apenas explicando o procedimento, você deverá filtrar na sua tabela a informação baseada no tal ID. Se for via query filtra na cláusula WHERE ou se for direto em um table, você pode usar a propriedade Filter, ou o método Locate, ou (se tiver indice pelo campo) FindKey, ... Como alguém poderá lhe dar uma resposta clara e útil sem informação... :huh:
-
(Resolvido) Delphi - hotkey - Delphi
pergunta respondeu ao Jhonatas araujo de Micheus em Delphi, Kylix
usando o botão Pesquisar, com o texto hotkey, você encontra todos estes resultados. Mas você pode ir olhando este, do colega Churc, que já deve lhe servir. ;) Abraços -
Renato, sugiro que você retire o tratamento da exceção (comente o try..except) e informe a mensagem de erro exatamente como a recebe: ZStoredProc1.ParamByName('nome_param_1').AsInteger := 1; ZStoredProc1.ParamByName('nome_param_2').AsString := 'parametro 2'; // try ZStoredProc1.ExecProc; // except // ShowMessage('houve erro executando procedure xxxxx'); // end; Informe a versão do banco que utiliza e a do componente, bem como, coloque a codificação da sua procedure para avaliação, porque uma mensagem como "capability not supported" pode ser decorrente de comandos incorretos no SQL (se não estou enganado) Abraços
-
Rafael, este post equivale a um UP! Eles não são permitidos pelas regras do forum. Então, se alguém não lhe responder é porque não quiz, não sabe ou não entendeu sua pergunta. Se isto ocorre, sugiro que tente melhorá-la, quem sabe alguém, então, lhe responderá. ;)
-
Você poderia explicar melhor o que você precisa?Seria algum modo de ser digitada uma senha na tela ao invés de mostrar o caracter digitado, mostra * por exemplo?
-
Acredito que esta seria uma situação em que não valeria a pena. Qual seria o ganho que você imagina ter?Seu programa final ficaria maior porque você estaria injetando código para fazer algo que poderia ser feito em design-time. Em termos de memória, também não deveriam haver ganhos, já que provavelmente você não ficaria alocando os recursos apenas quando cada guia estivesse em uso. Eu reforçaria a indicação do Jhonas no sentido do uso do TPageControl (paleta Win32). No entanto, caso você vá implementar o recurso de colocar componentes em abas, porém sem querer mostra as guias, isto não dá para fazer com ele. A propriedade TabVisible dos TabSheet torna a guia invisível bem como todo o que esteja no tabsheet. Em um aplicativo, eu combinei opções em um TTreeView com o TNoteBook. Voce tem que criar as "guias" via propriedade Pages e selecionar cada uma delas em design-time alterando a propriedade PageIndex - daí você coloca os componentes no lugar certo. Fica bacana e funciona bem, entretanto o TNoteBook tem um inconveniente chato: quando se faz uso do copiar/colar ele cola na guia errada. O que é péssimo, já que muitas vezes os componentes se repetem e seria mais fácil simplesmente copiar/colar do que dropar cada componente da sua respectiva paleta. Quando você exclui um componente de uma guia, após excluir, ele a guia ativa torna-se outra. :wacko: Abraços.
-
Na sessão Tutoriais & Dicas tem um tutorial do colega Prog'amador que pode lhe ajudar: Criando Um Relatório no QuickReport Passo a Passo
-
o nome do datasource é dspedidos e está dentro do datamodule1.estas informações não são as esperadas, mas vamos ver o que sai... você precisará adicionar um componente TQuery no seu datamodule1 (vou chamá-la, QrySomaPedido). Configura a priopriedade DatabaseName com o alias que você utiliza em seu sistema (o mesmo das outras tabelas). Na propriedade SQL você adiciona o seguinte comando: SELECT SUM(qnt*vlrunit) AS vlrtot FROM pedidos WHERE ... na cláusula WHERE você definirá o filtro. Como você diz que a tabela se chama pedidos, imagino que você esteja somando os items dos pedidos de um determinado cliente ou algo assim. Como disse, faltaram informações para poder exemplificar melhor, mas espero que você consiga entender o espírito da coisa. Com esta query pronta, basta que você execute ela a cada vez que quiser atualizar o valor total, com um código mais ou menos assim: with datamodule1 do begin // os parâmetros são utilizados no caso de precisar fazer // o filtro na cláusula WHERE QrySomaPedido.ParamByName(<nome do parâmetro>); // ao executar Open, o resultado será obtido QrySomaPedido.Open; // buscamos o campo que foi calculado ao qual demos // o nome "vlrtot" e formatamos ele para mostrar no Edit Edit1.Text := FormatFloat('#,##0.00', QrySomaPedido.FieldByName('vlrtot').AsFloat); // fechamos a consulta QrySomaPedido.Close; end; ... positivo, quero fazer isto no dbgrid, e a 1ºopção que você me deu é o que preciso, digitar o código do produto no campo codpro, e ele aparece a descrição no campo descpro e o preço no campor vlrunit.Para isso, você deverá adicionar um componente TQuery (vou chamá-lo QryProduto). Configura a propriedade DatabaseName (como já mencionei antes) e coloca na propriedade SQL uma instrução do tipo SELECT para que possamos obter o nome do produto e valor unitário. Entretanto, deveremos filtrar apenas o código do produto que queremos e para isso fazemos uso da cláusula WHERE parametrizada: SELECT descpro, vlrunit FROM produto WHERE codpro = :codpro você me disse em outro post: a pergunta é: o campo desc e vlrunit existem na sua tabela de pedidos sendo edita? É isso? Supondo que seja, o que vamos fazer, na seqüência, é atribuir os valores obtidos via QryProduto a estes campos. Para isto, iremos fazer uso o evento OnValidate do seu campo (field) codpro. Dê um duplo-click no dataset pedido que você está utilizando no DBGrid, localize o campo codpro e na janela Object Inspector acesse Events e dê um duplo-click no evento OnValidate. No editor de código colocaremos (supondo o nome do seu dataset TabPedido): procedure TForm1.TabPedidoCodProValidate(Sender: TField); begin QryProduto.ParamByName('CodPro').AsInteger := TabPedidoCodPro.Value; QryProduto.Open; TabPedidodescpro.Value := QryProdutodescpro.Value; TabPedidovlrunit.Value := QryProdutovlrunit.Value; QryProduto.Close; end; Para concluir, estes campos não deverão ser editados no DBGrid, logo, se você incluiu os campos no DBGrid em design-time, dê um duplo-click nele e selecione os campos (com as conf. das colunas) descpro e vlrunit e na propriedade ReadOnly, marque ela como True. Bom, espero que você consiga implementar. Fica um pouco difícil dar uma instrução correta quando não se tem as informações necessárias. Se você entender o espírito da coisa, irá conseguir implementar. Abraços
-
Eder, esse é um erro de compilação interno do Delphi. Não saberia lhe dar alguma sugestão sem ter o D4 para testar. Você fez o procedimento de descompatar o arquivo principal (stable), depois descompacta sobre ele o Patch1 e a seguir descompacta o Path2 - sobrescrevendo os arquivos anteriores? Talvez, você pudesse verificar e instalar algumas atualizações (Update Pack #2 e #3), que existem no site da Borland, para o Delphi 4. Só precisa saber se sua versão é: Standard, Professional ou Client/Server. O endereço para download é este (Borland Developer Support). Os relevantes: - Socket Server and Socket Service (se a versão é Client/Server) - Delphi 4 <tipo da versão> Update Pack #2 - Delphi 4 <tipo da versão> Update Pack #3 - Delphi 4 Update Pack #3 Additions Observe as datas onde aparece Created - instale dos mais antigos para os mais recentes e o Delphi não pode estar "rodando". Talvez, com estes patchs o problema possa ser eliminado - outros serão com certeza. Abraços
-
Essa é uma atribuição da moderação. Então, não esquenta. ;)
-
(Resolvido) Organizar por ordem alfabetica
pergunta respondeu ao charles_1976 de Micheus em Delphi, Kylix
então aquele nome do índice tá me enganando... este componente TQuery não vai ser ligado a nada a princípio. Ele será utilizado "solto". parece que é por isto que sua query não abre (active) - você ainda não colocou nada nela. :unsure: onde colocar? Eu disse no post anterior: "... então você tem que usar sim um componente TQuery, configurar a propriedade DatabaseName e escrever o código SQL na respectiva propriedade.", ou seja, na propriedade SQL do componente TQuery! Abraços -
(Resolvido) Conseguir valor da diferença entre datas
pergunta respondeu ao K!ko de Micheus em Delphi, Kylix
Serve para retornar a parte inteira de um número fracionário (float). Este valor retornado é do tipo Int64 (integer)