
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
ToPronto N'Area, experimente acrescentar a constante vbDefaultButton2 à informação dos botões: If MsgBox("Deseja Imprimir o Pedido?", vbYesNo + vbQuestion +vbDefaultButton2, "Impressão") = vbNo Then Para outras opções veja referência no msdn. Abraços
-
Qual a maneira correta de se fazer esse filtro!
pergunta respondeu ao -Allan- de Micheus em Delphi, Kylix
Allan, isto está muito confuso. Vamos observar como ficaria o valor atribuído à Filter, usando o seu código, se tivéssemos os valores das datas: 'DATVCTO, DATVCTO_1 >='+'"01/01/2009"' + 'and DATVCTO, and DATVCTO_1 <=' +'"31/01/2009"' Agora juntando tudo no string final: 'DATVCTO, DATVCTO_1 >="01/01/2009"and DATVCTO, and DATVCTO_1 <="31/01/2009"' Observe os campos em vermelho, eles estão "voando" no seu filtro e no "and" destacado, você deve observar que deve haver um espaço antes dele. Da forma como você colocou, ele está grudado à data - se não me engano isto só, já é motivo de erro. O que seria mais apropriado é que a string do filtro ficasse com esta cara: 'DATVCTO_1 >="01/01/2009" and DATVCTO_1 <="31/01/2009"' Mas pergunto, se esta sua consulta é para ser usada em um relatório, e você está usando query, por que é que você não faz este filtro na consulta colocada na propriedade SQL do componente? Abraços -
danielrgoes, se entendi direito, o que você tem são "dois relatórios" que devem sair como "um só", certo?!Se for isto, você vai fazer uso do QRCompositeReport. Voce pode criar os dois relatórios no mesmo form (basta adicionar quantos QuickRep precisar, mas pode mantê-los separados também - fica a seu gosto) e adiciona também o QRCompositeReport, depois adiciona a ele os quickrep's. Veja este post, apenas remova o if..then, porque no seu caso não há condição para a inclusão da segunda cópia. Este tópico também lhe será útil. Abraços
-
dan_visualdm, com isto voltamos ao post#5 onde você já tinha entendido aquela parte - Vamos continuar de lá então. Como você está guardando o caminho+nome da imagem a ser mostrada, então você tem que carregar a imagem daquele lugar quando quiser mostrá-la. O processo é praticamente o mesmo que você já usou para selecionar a imagem e gravar sua informação no banco. A diferença é que agora, você tem a informação do banco e quer mostrar a imagem baseado nesta informação. Eu não sei como você está fazendo a leitura das informações no cadastro para mostrá-la, mas no momento em que você fizer isto, é o momento em que você deverá ler a imagem e mostrar na tela. Assim, você deveria acrescentar o código +/- como abaixo: ... if ADOQuery1.imagem.AsString <> '' then if FileExists(ADOQuery1.imagem.AsString) then Image1.Picture.LoadFromFile(OpenPictureDialog1.Filename) else ShowMessage(Format('A imagem não existe no local especificado: "%s"', [ADOQuery1.imagem.AsString])); ... end;Fazemos uma verificação se foi atribuida alguma imagem ao campo que guarda esta informação. Uma vez que tenha sido, verificamos se o arquivo existe e então a carregamos para o TImage ou, do contrário, mostramos uma mensagem ao usuário informando que aquele arquivo ou caminho não são válidos. Abraços
-
dan_visualdm, voce começou o tópico dizendo que não queria do modo que você informa agora. :huh: Se você vai mesmo gravar a imagem no DB ao invés do seu caminho, então, você vai mesmo usar um DBImage e a ele deverá estar associado um campo do tipo ObjetoOLE do seu dataset. No código que você está usando, vai trocar o TImage por TDBImage e neste caso, o dataset deverá estar em edição antes da atribuição: var Diretorio : String; {caminho aonde vai ficar salvo as imagens} begin if OpenPictureDialog1.Execute then begin ADOQuery1.Edit; DbImage1.Picture.LoadFromFile(OpenPictureDialog1.Filename); ADOQuery1.Post; end; end; Abraços
-
seveN, só para constar, o uso de FormatMaskText com a máscara de formatação desejada só funciona corretamente se o string passado a ele tiver exatamente a mesma quantidade de caracter da máscara. A função é a utilizada pelo componente TMaskEdit. No exemplo acima, a máscara "pede" que o texto tenha 7 caracteres (são os zeros ou noves na máscara). Se o conteúdo do seu texto for "885", o resultado será "885 - ". A julgar pelo fato de você não ter usado código que eu ou o Jhonas postou, parece que você não quer preencher com zeros à esquerda o tal número. Assim, baseado no exemplo, se a intenção é que o resultado seja "88-5", então voce deve garantir que o seu texto tenha a quantidade de caracteres correta, adicionando espaços no início dele: Relatorio.Matricula.Caption := FormatMaskText('000000-0;0', Format('%7s', [Edit1.text])); Agora o resultado final será: " 88-5", corretamente formatado, e para remover o espaço em branco antes, basta usar a função Trim: Relatorio.Matricula.Caption := Trim(FormatMaskText('000000-0;0', Format('%7s', [Edit1.text]))); Abraços
-
Agora fica mais fácil de dizer algo a respeito...Voce pode acessar o valor de um field basicamente de duas formas. Se você adicionou os campos do dataset em design-time, então você deverá ter uma variável criada no seu form que é composta pela concatenação do nome do dataset e o do campo. Neste caso deveria ser ADOQuery1Imagem: ADOQuery1Imagem.AsString := 'C:\teste\imagens\'+ .... Já se você não adicionou os campos em design-time, então você apenas o terá disponível em run-time, após o dataset ser aberto. Neste caso para acessar um campo você pode usar o método FieldByName(<nome do campo>) ou a propriedade Fields[<índice do campo>]: ADOQuery1.Fields.FieldByName('Imagem').AsString := 'C:\teste\imagens\'+ .... (melhor método) ou ADOQuery1.Fields[1].AsString := 'C:\teste\imagens\'+ .... (supondo que o campo Imagem seja o 2º campo na lista de fields Abraços
-
Outra forma de fazer isto, preenchendo com zeros à esquerda e usando funções do Delphi (>= 7, anteriores não sei): FormatMaskText -> unit MaskUtils FormatFloat e StrToInt -> unit SysUtils Relatorio.Matricula.Caption := FormatMaskText('000000-0;0', FormatFloat('0000000', StrToInt(Edit1.text))); Abraços
-
dan_viisualdm, a mensagem é bem clara: tbl_imagem não é um identificador declarado, ou seja, não está declarado em lugar algum do seu form. Ou se está em um datamodule, você deve prefixar o nome do dataset com o nome do mesmo: <nome_datamodule>.<nome_dataset> No seu código tem duas formas como você usa ele: self.tbl_imagem.Edit; e tbl_imagem.AsString := diretorio; Independente de estar ou não declarado, já há um outro erro ai. Em uma situação você o trata como um dataset e na outra você o trata como um field. Imagino também que este seu código seja apenas um teste, pois não está fazendo muito sentido você usar um DBImage para carregar uma imagem e salvá-la em outro lugar. Este componente pressupõe o armazenamento da imagem no bando de dados, mas você diz que guarda o caminho. Então, de dois um: ou você tem os dois campos, um para guardar a imagem e outro o caminho, ou você está tentando guardar a imagem onde deveria guardar o caminho. Se você vai guardar apenas o caminho, seria mais apropriado você usar um TImage e usar o método LoadFromFile para mostrá-lo na tela e gravar no campo da tabela apenas o caminho, como aparentemente você o faz. Supondo que o dataset chama-se tbl_imagem e o campo que guarda o caminho seja CaminhoImg, o exemplo ficaria assim: var Diretorio : String; {caminho aonde vai ficar salvo as imagens} begin if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.Filename); tbl_imagem.Edit; tbl_imagem.CaminhoImg.AsString := 'C:\teste\imagens\'+ ExtractFileName(OpenPictureDialog1.FileName); tbl_imagem.Post; end; end; Abraços
-
Eder, este assunto já passou por aqui antes. Veja se algo do que está neste tópico lhe ajuda: Bde E Windows Vista Mais um... Instalar o BDE no Windows Vista com UAC ativado Sobre a dica do colega António44, este artigo tem as mesmas orientações, porém com ilustrações (pode ajudar)
-
(Resolvido) Master-Detail em RUN TIME
pergunta respondeu ao James Morais de Micheus em Delphi, Kylix
Os Moderadores costumavam fazer isto, mas você pode fazê-lo editando o título no 1º post do Tópico - acrescente "(Resolvido)" no início do texto. Abraços -
Banco Paradox Na Mesma Pasta Do Programa[resolvido]
pergunta respondeu ao Eder de Micheus em Delphi, Kylix
Só para constar, na verdade não é necessário nem isto. Como havia mencionado, adicionando um componente TDatabase (como você já faz), configure DriverName=STANDARD, dê um nome ao alias na propriedade DatabaseName (digamos "DBEder") e LoginPrompt=False. Assim, nos componentes TQuery ou TTable, este será o nome a ser selecionado na respectiva propriedade. Só isto! Abraços -
(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report
pergunta respondeu ao António44 de Micheus em Delphi, Kylix
António44, se os relatórios são mesmo diferentes, acho que não há o que fazer.É que se o resultado final fosse muito similar, poderia ser criado apenas um form do relatório, e mudar a consulta dinamicamente para refletir a opção dos filtros, se por período, mes, ano ... Neste hipótese, você teria penas um lugar para dar manutenção. Apenas isso, mas deixamos quieto. Abraços -
DiabloX3, parece mesmo que a estrutura dos dados eram um pouco diferente do que pensei, já que seria mesmo a idéia de que para cada detalhe você teria as várias sub-details - mas beleza. Acho que você pode dar uma olhada neste tópico: Vias no Quickreport, assim.... Ele não está resolvido porque o que o colega quer não é exatamente o que eu estava pensando (as informações não vem de dataset), mas os conceitos que tentamos estabelecer lá podem lhe ajudar (veja também os links que postei lá).Outro post para ler: Relatório Duplicado, Quick Report E este especificamente sobre a questão limitação de itens por página: Repetir dados de Detail Band Qreport Abraços
-
petini, especificamente para contar de 0 a 99!!! function DezenaExtenso(valor :word) :string; const Unidades: array[1..9] of string = ('Um', 'Dois', 'Tres', 'Quatro', 'Cinco', 'Seis', 'Sete', 'Oito', 'Nove'); Dez: array[11..19] of string = ('Onze', 'Doze', 'Treze', 'Quatorze', 'Quinze', 'Dezesseis', 'Dezessete', 'Dezoito', 'Dezenove'); Dezenas: array[1..9] of string = ('Dez', 'Vinte', 'Trinta', 'Quarenta', 'Cinquenta', 'Sessenta', 'Setenta', 'Oitenta', 'Noventa'); begin if valor > 99 then Raise Exception.Create('Valor válido apenas de 0 a 99'); case valor of 0 : Result := 'Zero'; 1..9 :Result := Unidades[Valor]; 11..19 : Result := Dez[Valor]; else if (Valor mod 10) = 0 then Result := Dezenas[Valor div 10] else Result := Dezenas[Valor div 10] + ' e ' +DezenaExtenso(Valor mod 10); end; end; Abraços
-
(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report
pergunta respondeu ao António44 de Micheus em Delphi, Kylix
Que bom. :D Voce comentou, alguns posts acima, que tem um relatório para cada opção. Caso o lay-out dos relatórios seja o mesmo, você poderia criar as consultas dinamicamente e ajustar o relatório de modo a mostrar os dados conforme opção. Qualquer coisa neste sentido é só voltar ao tópico que continuamos. ;) Abraços -
DiabloX3, não entendo como não consegue. Observe que a estrutura que tentei passar tem justo como objetivo mostras estas informações. Talvez alguma coisa não tenha ficado corretamente configurada ou o lay-out que você usou não é similar ao que postei. apesar de eu achar que é uma solução estranha (no geral, você tem apenas uma banda detalhe, e n subdetails - abaixo da detalhe, não o inverso), se está funcionando deixa assim. Abraços
-
E teve um alemão que disse ficar 3h :blink: Mais alguém foi louco o suficiente para acessar os outros links ou só ficaram no lalalalalalala??? :wacko: Porque ainda tem, nos links: WORLD'S WORST: Violin Torture - tortura mesmo!!!! 3rd WORST: soldado do Darth Vader daçando o "creew" ao som de bababababuhbuhbuhbuh e assim, com essa loucura, vai levando a gente de um lado para outro. Abraços
-
carlosgmjr, esta ´não chega a ser uma dúvida de Delphi, mas sim banco de dados. Mesmo assim, vamos lá... Como a mensagem diz, na 1 linha, coluna 33 há uma palavra desconhecida e se contarmos os caracteres vamos esbarrar com month. Esta função é específica do SQL Server, o FireBird não a possui nativamente, exceto pelo uso de alguma UDF (User Defined Function - função definida pelo usuário). Para o firebird, voce deverá usar a função EXTRACT que é "equivalente" a função DATEPART do SQL Server: 'select * from programacao where extract(month from dia) = ' + inttostr(combobox1.ItemIndex + 1) + ' and extract(year from dia) = ' + (combobox2.Items[combobox2.ItemIndex]); Abraços
-
1) No Planeta Delphi, há várias apostilas boas (questão de garimpar). Para quem está iniciando mesmo, deixo estas aqui como referência: - Apostila básica de delphi. ótima para iniciantes... (D1) - Delphi_biblia - Desvendando o Caminho das Pedras de Fernando Anselmo (D2) são sobre versões antigas do delphi, mas com algumas informações e conceitos que inda são válidos, principalmente sobre a estrutura da ferramenta. 2) No Linha de Código também tem algumas apostilas/tutoriais (ver barra lateral direita) 3) O site Apostilando.com tem boas apostilas também (você precisa se registrar para fazer downloads - vale a pena) 4) No ActiveDelphi tem uma versão chm (arquivo de help) do livro Bíblia do Delphi 7 de Marco Cantu (Ótima - precisa se registrar para download) Pesquisando, aparece uma versão em pdf via RapdShare - fica por sua conta. Acho que já dá para procurar alguma coisa. É ir baixando e dando uma boa olhada - ler nunca é demais. E quanto mais informação você tem, mas dúvidas também. Porém, você já saberá como melhor explicá-las. Bom estudo.
-
(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report
pergunta respondeu ao António44 de Micheus em Delphi, Kylix
Ok. Acho que o desatento sou eu. :blush: Lembrando de que estamos falando de tabelas Paradox (ou Piradox, como outros colegas já o chamaram) e tendo ele várias limitações, vejo que esta deve ser uma delas. Ainda que houvesse suporte ao que eu queria lhe sugerir, não seria usando DATE, mas sim CURRENT_DATE. Só que olhando no help "Local SQL", consta: "The following SQL-92 language elements are not used in local SQL." e CURRENT_DATE é um dos elementos não suportados. Façamos o seguinte, modifique mais uma vez a consulta para o filtro por ano: SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = :pAno Order by 1, 2, Clube,Escalao e, como você usa o D3, vamos ter que dar uma voltinha para extrair o ano da data digitada. Assim, o parâmetro será passado com esta linha Query1.Params[0].AsInteger := StrToInt(FormatDateTime('yyyy', Date1.Date)); Acho que dessa vez a coisa anda. :D Abraços -
(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report
pergunta respondeu ao António44 de Micheus em Delphi, Kylix
Aqui é desatenção sua. Olhe de novo o post onde passei esta consulta e observe que ainda citei abaixo: "veja que usamos a função date do banco, logo será usada a data corrente." E voce colocou lá data, logo é claro que vai listar tudo o que você tiver dentro da tabela. Nesta consulta, acho que pode ser por conta do nome do parâmetro, o qual sugeri o mesmo nome do campo da tabela, ou a falta de espaço na função extract, entre o from e ":".Para testar, faça o seguinte, troque a linha: WHERE extract(year from data) = extract(year from:Data) por WHERE extract(year from data) = extract(year from :DatReferencia) (com espaço antes do ":") Aqui você me deixa em dúvida, novamente. Isto que você diz, me parece ser o que deveria ocorrer. O que está de errado, ou quando foi que deixou de ser assim. :huh: -
(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report
pergunta respondeu ao António44 de Micheus em Delphi, Kylix
Não deveria desistir tão facilmente assim. Observe que esta opção era para ser a mais simples delas. Deve ser algo que você deixou perdido nestas tantas alterações que fez.Eu sugiro que você remova o componente TQuery que você está usando nesta consulta problemática, coloque um novo componente e comece a configurá-lo tudo de novo. O problema de quem pede por ajuda, assim como você, é que geralmente partem do princípio de que, do outro lado, sabemos o que estão fazendo. E isto não é verdade.Veja que não tenho como ajudá-lo se não me disse que erro está havendo - não basta dizer que "dá erro", tem que dizer qual a mensagem de erro, se ela ocorre na compilação ou na execução. Fique a vontade para perguntar, eu ainda não desisti. ;) Abraços -
(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report
pergunta respondeu ao António44 de Micheus em Delphi, Kylix
Eu mudei o parâmetro Data,mas eu terei que ter sempre uma data...''Query1.Params[0].AsDate := Date1.Date;'' ou não é preciso? António44, acho que estamos com um problema sério de comunicação. :huh: Com esta consulta que você postou (abaixo), vejo que você mudou o SQL para a última opção que citei no post anterior e que parece-me você não entendeu - usar o ano corrente: "Mas, se o objetivo deste botão for mostrar os dados do ano corrente, então você não precisaria mesmo do parâmetro, mas a consulta teria que mudar denovo" Logo, com esta consulta, não é para ser usado o parâmetro, simplesmente porque ele não está sendo declarado. Acredito que você precise ler um pouco sobre este tipo de assunto, porque estamos "a dar tiros para todos os lados", e não é o ideal. Temos que saber onde mirar e atirar no lugar certo. ;) Para não ter dúvidas futuras: Declaração de parâmetros no instrução SQL dos componentes tipo query Isto é feito quando você coloca os dois pontos (":") seguido de um identificador e antes de abrir a consulta, você deve inicializar o valor deste parâmetro normalmente utilizando o método ParamByName(<identificador>) (ou Params[<índice_param>]) do dataset (lembrando que se o componente de acesso for da paleta ADO, ele deve ser antecedido por Parameters, ou seja, dataset.Parameters.ParamByName(<identificador>).Value := <valor>). Abraços -
(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report
pergunta respondeu ao António44 de Micheus em Delphi, Kylix
é eu já estou surtando mesmo. As Query1 eram de forms diferentes. :blush: , mas você está passando parâmetros para ela? Em qual botão você está fazendo isto?Ou, por outro lado, você alterou esta SQL, então por acaso você não esqueceu de alterar a propriedade Params, de modo a ter agora o parâmetro Data, ao invés de DataIni e DataFim? Este é o botão da minha pergunta acima? Se for, você precisa passar o valor para o parâmetro Data.Mas, se o objetivo deste botão for mostrar os dados do ano corrente, então você não precisaria mesmo do parâmetro, mas a consulta teria que mudar denovo: SELECTextract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from date) Order by 1, 2, Clube,Escalaoveja que usamos a função date do banco, logo será usada a data corrente. posso remover elas é isso?Com certeza! Abraços e até amanhã.