Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Observe questois associadas ao ponto decimal e separador de milhar. Se você tiver algo como: - strtofloat('1.050,00') resultará em erro. Deve ser removido o "." => strtofloat('1050,00'); - strtofloat('350.00') resultará em erro. Deve ser utilizado "," => strtofloat('350,00') Na verdade você não teria este problema se ao invés de utilizar o DBEdit.Text você utilizasse o campo associado a ele. Por questões didáticas, vamos supor que seus dbedits estejam associadas ao Dataset1 com os campos possuindo o seguinte nomes (considerando também que são todos do tipo numérico): - Em dbedit24, datafield = CAMPO24 do dataset Dataset1 - Em dbedit27, datafield = CAMPO27 do dataset Dataset1 - Em dbedit29, datafield = CAMPO29 do dataset Dataset1 - Em dbedit36, datafield = CAMPO36 do dataset Dataset1 - Em dbedit38, datafield = CAMPO38 do dataset Dataset1 então as linhas: dbedit36.text:= floattostr(strtofloat(dbedit29.text) * strtofloat(dbedit27.text)); dbedit38.text:= floattostr(strtofloat(dbedit36.text) / strtofloat(dbedit24.text)); ficariam: Dataset1CAMPO36.Value := Dataset1CAMPO29.Value * Dataset1CAMPO27.Value; Dataset1CAMPO38.Value := Dataset1CAMPO36.Value / Dataset1CAMPO24.Value; Deste modo não há necessidade de qualquer tipo de conversão. []s
  2. Como é que você está carregando o jpg em run-time?
  3. há algum conteúdo em dbedit60.text quando você está abrindo a consulta?
  4. Se o executável do qual você está falando é sua aplicação e o problema ocorreu após a instalação na máquina de seu usuário, acredito que possa ser sim. A bliblioteca ibxpress74.bpl talvez tenha que estar instalada em c:\windows\system32, local onde ela fica após a instalação do Delphi.
  5. se o seu campo código for numerico no banco então: query1.SQL.Add('select * from tbl where codigo = '+dbedit1.Text); se for string: query1.SQL.Add('select * from tbl where codigo = '''+dbedit1.Text+''''); aqui não estou certo quanto a quantidade de aspas simples. alguns colegas costumam citar a função QuotedStr: query1.SQL.Add('select * from tbl where codigo = '+QuotedStr(dbedit1.Text)); (acho que é assim) mas, ao meu ver, a melhor opção é utilizar parâmetros pois você não tem que se preocupar com esses detalhes: query1.SQL.Add('select * from tbl where codigo = :Codigo'); query1.ParamByName('Codigo').AsInteger := StrToInt(dbedit1.Text); // se código for numérico (integer) query1.ParamByName('Codigo').AsString := dbedit1.Text; // se código for texto (varchar) ainda prefiro usar diferente. supondo que o campo associado ao dbedit1 seja CODIGO e o dataset (no datasource associado ao dbedit1) TabQualquer, então usaria assim: query1.SQL.Add('select * from tbl where codigo = :Codigo'); query1.ParamByName('Codigo').AsInteger := TabQualquerCODIGO.AsInteger; // se código for numérico (integer) query1.ParamByName('Codigo').AsString := TabQualquerCODIGO.AsString; // se código for texto (varchar) como sempre digo (na assinatura), há sempre uma outra forma de fazer a mesma coisa.
  6. Uma opção: Vá ao menu Component => Import ActiveX Control na janela que aparece, na primeira caixa de lista - Registered Controls - localize Shockwave Flash, daí o procedimento é parecido com o da instalação de um componente normal (já que será gerado um componente) ao clicar em Install... Execute este procedimento com atenção para observar onde o componente estará sendo colocado na paleta (normalmente é na ActiveX). você também pode decidir em que pacote(dpk) deseja incluí-lo (sugiro colocar em um novo) Observe que o arquivo no computador que for instalado o programa, deverá estar instalado o flash, já que deverá existir o arquivo OCX utilizado no procedimento acima.
  7. Micheus

    Popupmenu No Dbgrid

    Isto não tem jeito. Não ao mesmo tempo. É até difícil imaginar como ele poderia gerenciar isto não?! Mas se você pretende ter uma determinada condição para apresentar um ou outro, então pode haver uma possibilidade.
  8. Obiwan Kenobi, você obtem o novo código em que momento? Após um insert ou append? Se for o caso, talvez fosse mais seguro executar este procedimento no evento BeforePost da sua tabela.
  9. Micheus

    Criar Componentes

    constructor TExportToExcel.Create(AOwner : TComponent); begin inherited Create(AOwner); TPopup := TPopupMenu.Create(Self); MenuItem := TMenuItem.Create(TPopup); MenuItem.Name := 'Exportar'; MenuItem.Caption := 'Exportar para Excel'; MenuItem.OnClick := ExportarClick; // <<==== TPopup.Items.Insert(0,MenuItem); end; procedure TExportToExcel.ExportarClick(Sender: TObject); begin <aqui vai o código para exportação> end; você deverá criar um procedimento a ser executado quando a opção for selecionada. O evento OnClick é do tipo TNotifyEvent, o que nos diz que o procedimento deverá ser criado dentro da sua definição: procedure (Sender: TObject) of object; Era isso?
  10. Micheus

    Soma Coluna

    DBEdit37.text:=FieldByName('TOTAL').AsString;
  11. Micheus

    Editmask

    Na propriedade EditMask o 2º parâmetro determina se a máscara será(1) ou não(0) salva com os dados. ex.: 1) !99/99/00;1;_ // salva 2) !99/99/00;0;_ // não salva
  12. Veja bem, o DBGrid mostra todo o resultado oferecido pelo dataset a ele associado. Assim, se for uma query, apresentará todas as linhas retornadas pela sua query, ser for uma tabela idem. Se você utilizar filtro, o resultado se refletirá no DBGrid. A inserção é sempre feita no dataset, mesmo que você utilize o grid para edição de seus dados, ele automaticamente irá dar um append em seu dataset. Se você quizer somar todos os valores das linhas que você vê no grid, basta percorrer o dataset associado ao mesmo do início (.First) ao fim (.Next até encontrar .EOF) somando o campo desejado.
  13. Não seria o caso de criar um form, com BordStyle=bsDialog, acrescentar os componentes que você deseja e utilizar ShowModal para apresentar o form. Ou você quer utilizar alguma caixa de diálogo padrão do sitema e acrescentar um campo para o usuário digitar algo?
  14. Não daria para utilizar o QuickReport em seu caso?
  15. Se você utiliza uma linha para título, sua StringGrid obregatoriamente terá que iniciar com a propriedade RowCount=2 (e também deverá terminar, caso você exclua linhas). Bom, é bem simples, veja o exemplo: // escreve na última linha do grid StringGrid1.Cells[0,StringGrid1.RowCount -1] := arq.readstring(........................); // abre uma nova linha em branco StringGrid1.RowCount := StringGrid1.RowCount +1; Mas não esqueça de levar em conta o que citei antes, caso contrário poderá ter alguns efeitos colaterais, como uma linha sobrando numa inclusão ou o título sumindo se RowCount vier a ser 1. Obs: Um componente legal que gosto de utilizar para escapar destes problemas é o componente RxMemoryData (do pacote RX). Com ele você pode utilizar um DBGrid e funciona como um dataset normal, com append, insert, locate ...
  16. você está tentando abrir um arquivo texto (arq: TextFile;), onde se lê linhas (string), mas deseja ler registros (record). Se o conteúdo de seu arquivo é puramente texto, deverá ler os dados de forma diferente (como strings). Mas, se os dados foram realmente gravados no formato de registro, conforme a estrutura (record) definida para Estrututa, então você deverá declarar a variável de arquivo deste modo: arq: File of Estrutura; []s
  17. Churc, o que você colocou está certo, mas BtnSalvarClick(Self) também funciona. Eu várias vezes utilizo deste modo. Como Vivendo&Aprendendo, aparentemente postou todo o código da unit, parece mais ser um erro de compilação, já que não encontrei a definição do procedimento nela: procedure TFrmCaptura.BtnSalvarClick(Sender: TObject); []s
  18. não. Só que não estou em casa agora e aqui o MSN está bloqueado. Só mais tarde, caso ainda necessite de ajuda.
  19. significa que o nome da coluna retornada pela query será QTD_VENDAS_VENDEDOR, apenas para ficar mais claro. Assim você depois utilizar Query1.FieldByName('QTD_VENDAS_VENDEDOR').Value se precisar manipular o resultado retornado, ou ainda, se você adicionar o field ao seu Query1, poderá utilizar o campo Query1QTD_VENDAS_VENDEDOR.Value o que é muito mais legível que aquele gerado ("aleatório") pelo SQL. tudo bem, é só trocar :vendedor por RECEBE o importante é que passe o parâmetro corretamente:ParamByName('vendedor').AsString:= recebe; ou se você alterar o nome do parâmetro (tipo: vendedor = :RECEBE) ParamByName('RECEBE').AsString := recebe; economizando declaração de variáveis temporárias, poderia ser: ParamByName('vendedor').Value := DBLookupComboBox1.Keyvalue; no final, o importante são os dados passados corretamente, o nome que você dá pouco importa. Entretando, quanto mais significativo for, melhor.
  20. Para este coso específico, talvez fosse interessante observar o seguinte:- O objeto TForm possui o método GetFormImage: function GetFormImage: TBitmap; - O objeto TScreen possui a propriedade ActiveForm: ActiveForm :TForm; - Há na unit Forms uma variável global Screen: Screen: TScreen; - A propriedade KeyPreview no form principal, possibilita o tratamento prioritário do teclado; você poderia provisóriamente (para este caso específico) - setar a KeyPreview=true (interceptando o teclado em sua plicação); - escrever um procedimento para OnKeyDown testanto uma tecla pré-definida (p.e., F12); a) adaptando sua rotina para salvar o bitmap (no post anterior) procedure GravaFormAtivo; var Bitmap :TBitMap; JP : TJPEGImage; Caminho:String; begin JP := TJPEGImage.Create; JP.Performance := jpBestQuality; try Caminho := 'C:\' + Screen.ActiveForm.Name + '.jpg'; Bitmap := Screen.ActiveForm.GetFormImage; JP.Assign(Bitmap.Picture.Graphic); Jp.SaveToFile(Caminho); ShowMessage('Salvou em ' + #13 + caminho); finally Bitmap.free; JP.Free; end; end; procedure MainFormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_F12 then begin GravaFormAtivo; Key := 0; end; end; Deste modo (para este caso específico), você não estará fazendo um print screen de toda a área do monitor, mas sim, apenas da tela ativa (similar a utilizar ALT+PRINT SCREEN) o que poupa espaço em disco e no seu arquivo (documento seja ele word, powerpoint, ...). Também terá as imagens com o nome do form, o que facilitará bastante a identificação das mesmas durante o processo de montagem da apresentação.
  21. O SQL ficaria com esta cara:SELECT COUNT(vendedor) QTD_VENDAS_VENDEDOR FROM notas_fiscais WHERE vendedor = :vendedor AND datanf BETWEEN :dataini AND :datafin *se vendedor for numérico, é mais conveniente definí-lo como parâmetro também se fosse utilizar num relatório que liste todos os vendedores com a quantidade vendida, aí você deveria modificar um pouco, depende do que você irá querer. Talvez assim: SELECT vendedor, COUNT(vendedor) QTD_VENDAS_VENDEDOR FROM notas_fiscais WHERE datanf BETWEEN :dataini AND :datafin GROUP BY vendedor * observe que sempre que você utilizar funções de agregação (COUNT, SUM, AVERAGE,...) na cláusula SELECT e houverem outros campos nela (neste exemple, vendedor), você deverá utilizar a cláusula GROUP BY com todos os campos da cláusula SELECT, exceto as funções de agregação (neste exemplo, COUNT(vendedor))
  22. Estive averiguando a situação.É interessante observar que há uma propriedade Kind (QRExpr.Value.Kind) que indica o tipo do resultado da expression (é somente leitura). No exemplo acima, você coloca em cada expression um valor inteiro; Embora eu acredite que ao utilizar a propriedade QRExpr.Value.dblValue deveria haver no método Get desta propriedade a devida conversão, o que ocorre na prática (acompanhe em depuração - debug) é que esta propriedade prossui um valor "bisonho" quando o valor da expressão é inteiro. Então, para não ter qualquer problema desse tipo, quando o resultado esperado é float, aconselho a multiplicar a expressão por 1.0. Isto fará com que o resultado seja um float e contornará este problema. Utilizando sua situação, a expressão ficaria assim: qrexp1 com esta expressão abaixo: (SUM(query1.peso) * 1000) / SUM(query1.FreteKelTotal) *1.0 qrexp2 com esta expressão abaixo: (SUM(query1.peso) * 1000) / SUM(query1.FreteRed) *1.0 Por favor, teste novamente com a primeira solução que lhe dei e verifique se estou correto no que digo (em meu teste ficou ok). p.s. o fato se repetiu no D3 com versão 2.0g do Quick Report e no D7 com a versão 3.5.0
  23. para retornar especificamente o caminho da aplicação você deverá utilizar a função ExtractFilePath associada a uma das duas alternativas postadas pelos colegas Graymalkin e Churc: caminho := ExtractFilePath(Application.ExeName); ou caminho := ExtractFilePath(ParamStr(0));
  24. Dê uma olha nestes post aqui no forum, talvez algum lhe responda a questão. se for para capturar do sistema: - utilizando ganchos - Hook (link) se for para uso "interno" na sua aplicação: - Registrando hotkey temporariamente (link) - Evento OnKeyDown + KeyPreview (link)
  25. Micheus

    * Bronca No Memo *

    talvez com mais informação alguém possa dar algum palpite. Você está se conectando ao Access e tabelas com que componentes?
×
×
  • Criar Novo...