Dicas de Delphi

download Dicas de Delphi

of 28

Transcript of Dicas de Delphi

Dicas de Delphi - Banco de Dadosy y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y

Solucionando problemas de arredondamentos Criando tabelas via SQL Salvar imagem em tabela Paradox Evitar a biblioteca midas.dll Copiar qualquer texto para o Clipboard Avaliar de expresso matemtica Rolagem automtica em ListBox Obter data/hora do prprio EXE Mostrar aviso em forma de hint Sons no alto-falante do micro Acessar tabela DB/DBF no diretrio do EXE Ordenar datas pelo ms em Paradox? Excluir todas as ocorrncias de um caractere de uma string Fazer pesquisa incremental apenas com DBGrid Consulta SQL que usa a data do sistema Obter nomes dos campos de uma tabela Obter path de um Alias do BDE Copiar todos os registros de uma tabela para o Clipboard Copiar um registro de uma tabela para o Clipboard Mudar a cor de um DBEdit dentro de um DBCtrlGrid de acordo com uma condio Fazer pesquisa incremental com DBGrid e Edit Limpar um campo tipo data via programao Implementar um campo auto-incremental via programao Exibir a caixa de dilogo padro de solicitao de senha do banco de dados Usar o evento OnGetText de um TField Verificar, via programao, se Local Share do BDE est TRUE Resolver "Internalerrornear: IBCheck" do Interbase 5.1.1 Server no NT Excluir todos os registros de uma tabela Mudar a coluna ativa em um DBGrid via programao Obter o nmero do registro atual Trabalhar com Filter de forma mais prtica Obter a quantidade de registros total e visvel de uma tabela Gravar fisicamente com Paradox Criar uma tabela (DB, DBF) atravs do seu programa Criar um Alias temporrio atravs do seu programa

Solucionando problemas de arredondamentosComo sempre observo longas discusses sobre este tema, resolvi apresentar minha experincia nesta rea. Eu tive muitos problemas com arredondamentos h muito tempo, especialmente quando comecei a implantar sistemas para uso com ECF (emissor de cupom fiscal). Acontecia do programa apresentar um total de venda diferente do valor impresso pelo ECF. Ento

fui estudando a questo com carinho e cheguei a algumas concluses que resolveram meus problemas. O modo de arredondamento do Firebird igual ao modo das calculadoras financeiras. J no Delphi o arredondamento leva em considerao se a parte inteira par ou mpar quando a parte decimal termina em 5. Os ECFs tambm calculam como no Firebird. Para resolver as diferenas entre Delphi e Firebird escrevi a funo abaixo (a converso para string resolve alguns problemas de arredondamento do Delphi):function ExRound(Value: Extended; Decimals: Integer): Extended; var Factor, Fraction: Extended; begin Factor := IntPower(10, Decimals); Value := StrToFloat(FloatToStr(Value * Factor)); Result := Int(Value); Fraction := Frac(Value); if Fraction >= 0.5 then Result := Result + 1 else if Fraction dgEditing = false ReadOnly = true * Pode tambm ajustar a propriedades Columns para escolher as colunas que sero exibidas. - Na seo private da unit declare: private FTexto: string; - No evento OnCreate do form coloque: FTexto := ''; Label1.Caption := ''; - No evento OnKeyPress do DBGrid1: procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if Key in [#8, #32..#255] then begin if Key = #8 then { BackSpace } FTexto := Copy(FTexto, 1, Length(FTexto) -1) else FTexto := FTexto + Key; { Posiciona na coluna Nome } Table1.FieldByName('Nome').FocusControl; { Escolhe o ndice e procura } Table1.IndexFieldNames := 'Nome'; Table1.FindNearest([FTexto]); { Mostra o texto procurado } Label1.Caption := FTexto; end; end;

Observaes No nosso exemplo estamos pesquisando atravs do campo "Nome". Para esta pesquisa precisamos de um ndice com este campo. Autor: Daniel P. Guimares Home-page: www.tecnobyte.com.br Incio

Consulta SQL que usa a data do sistemaProblema:

Preciso fazer uma consulta com SQL que me retorne todos os registros em que o valor de um campo do tipo data seja igual ou anterior dada do sistema. Como fazer? Soluo: Query.Close; Query.SQL.Text := 'select * from Tabela where CampoData 0 do Delete; end; { Chame-a como nos exemplos abaixo: } tbDBDeleteAll(Table1); ou tbDBDeleteAll(Query1);

Observaes Se houver um filtro ou range ativo, somente os registros filtrados sero excludos. Portanto diferente de Table1.EmptyTable. Esta funo poder ser chamada no evento BeforeDelete do Table (ou Query) principal em um formulrio mestre-detalhe para excluir os itens (da parte detalhe). Autor: Daniel P. Guimares Home-page: www.tecnobyte.com.br Incio

Mudar a coluna ativa em um DBGrid via programao{ Usando nmero da coluna (zero a primeira coluna): } DBGrid1.SelectedIndex := 0; { Usando o nome do campo } DBGrid1.SelectedField := Table1.FieldByName(Edit2.Text);

Observaes Aconselho usar o nome do campo quando o que importa o campo e no a posio. Use o nmero da coluna somente quando o que importa a posio, e no o campo. Autor: Daniel P. Guimares Home-page: www.tecnobyte.com.br

Incio

Obter o nmero do registro atualTable1.RecNo()

Autor: Daniel P. Guimares Home-page: www.tecnobyte.com.br Incio

Trabalhar com Filter de forma mais prticaSe voc est habituado a usar este cdigo no filter... Table1.Filter := 'Nome = '''+ Edit1.Text + ''''; ou Table1.Filter := 'Data = ''' + DateToStr(Date) + ''''; Tente usar este: Table1.Filter := 'Nome = ' + QuotedStr(Edit1.Text); ou Table1.Filter := 'Data = ' + QuotedStr(DateToStr(Date));

Observaes A funo QuitedStr() coloca apstrofos envolvendo a string. Se houver um apstrofo como parte da string, ela o subtitui por dois apstrofos, para que seja corretamente interpretado. Autor: Daniel P. Guimares Home-page: www.tecnobyte.com.br Incio

Obter a quantidade de registros total e visvel de uma tabelaInclua na seo uses:DbiProcsOs componentes TTable e TQuery possuem a propriedade RecordCount que indicam a quantidade de registros da tabela. No entanto esta propriedade dependente de filtros, ou seja, se tivermos uma tabela com dez registros com campo "Codigo" de 1 a 10 e aplicarmos o filtro mostrado a seguir, a propriedade RecordCount retornar 5 e no 10. Table1.Filter := 'Codigo