Ir para conteúdo
Fórum Script Brasil

Duduh_Capixaba

Membros
  • Total de itens

    258
  • Registro em

  • Última visita

Tudo que Duduh_Capixaba postou

  1. Cheguei a uma solução: Primeiro declarei uma variável dentro do Form com o nome WinSt, depois: procedure TForm1.FormCreate(Sender: TObject); var R: TRegistry; begin R := TRegistry.Create; R.RootKey := HKEY_LOCAL_MACHINE; if R.OpenKey('\SOFTWARE\TESTE\CONFIG\', True) then begin if not R.ValueExists('StatusTela') then R.WriteString('StatusTela', 'Normal'); end; WinSt := R.ReadString('StatusTela'); if WinSt = 'Normal' then Self.WindowState := wsNormal; if WinSt = 'Maximizado' then Self.WindowState := wsMaximized; R.CloseKey; R.Free; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var R: TRegistry; begin if Self.WindowState = wsNormal then WinSt := 'Normal'; if Self.WindowState = wsMaximized then WinSt := 'Maximizado'; R := TRegistry.Create; R.RootKey := HKEY_LOCAL_MACHINE; R.OpenKey('\SOFTWARE\TESTE\CONFIG\', False); if R.ReadString('StatusTela') <> WinSt then begin if Self.WindowState = wsNormal then R.WriteString('StatusTela', 'Normal'); if Self.WindowState = wsMaximized then R.WriteString('StatusTela', 'Maximizado'); end; R.CloseKey; R.Free; end; Pronto! Assim consigo gravar no registro do Windows o estado em que o Form foi fechado, e quando for reaberto, voltará com a última configuração. Vlw!
  2. O seu código funcionou direitinho aqui. A única coisa que mudei foi essa linha: de: DataInicio.Date:=tblTitulos.fieldbyname('DataInicio').AsDateTime; para: DataInicio.Date:=tblTitulos.FieldValues['DataInicio']; ou: DataInicio.Date:=tblTitulos.FieldByName('DataInicio').Value; Tente fazer assim pra ver se funciona. Abraço!
  3. Opa, desculpa cara...esqueci de mencionar que você deve declarar o "DateUtils" no "uses" do formulário. Pronto, isso resolve. Abraço!
  4. Sobre a questão de calcular os dias em atraso, tente o comando "DaysBetween", exemplo: procedure TForm1.Button1Click(Sender: TObject); var Dias: Integer; DtVenc, DtAtual: TDate; begin DtVenc := DateTimePicker1.Date; DtAtual := DateTimePicker2.Date; Dias := DaysBetween(DtAtual, DtVenc); if DtVenc < DtAtual then if Dias = 0 then ShowMessage('Prestação vence hoje.') else ShowMessage('Prestação está vencida em ' + IntToStr(Dias) + ' dia(s).') else ShowMessage('Prestação está em dia.') end; Sobre gravar em uma tabela Paradox, você pode usar os comandos "Table.Insert" (inserir) ou "Table.Edit" (editar) ou "Table.Append" (acrescentar) com um "Table.Post" no final (estou levando em consideração que você está usando uma tabela).
  5. Olá pessoas! Eis meu problema... Estou tentando construir um Form onde o estado da janela (maximizado, minimizado...) vai depender do último acesso do usuário, por exemplo: se o usuário sair do programa com a tela maximizada, então, no próximo acesso ao programa o Form estará maximizado. Eis meu código: ao entrar: procedure TForm1.FormCreate(Sender: TObject); var R: TRegistry; begin R := TRegistry.Create; R.RootKey := HKEY_LOCAL_MACHINE; if R.OpenKey('\SOFTWARE\TESTE\CONFIG\', True) then begin if not R.ValueExists('StatusTela') then R.WriteString('StatusTela', 'wsNormal'); end; Self.WindowState := R.ReadString('StatusTela'); R.CloseKey; R.Free; end; ao sair: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var R: TRegistry; begin R := TRegistry.Create; R.RootKey := HKEY_LOCAL_MACHINE; R.OpenKey('\SOFTWARE\TESTE\CONFIG\', False); R.WriteString('StatusTela', Self.WindowState); R.CloseKey; R.Free; end; O erro ao compilar aponta para as linhas "Self.WindowState := R.ReadString('StatusTela')" e "R.WriteString('StatusTela', Self.WindowState)": Incompatible types: 'TWindowState' and 'TStringField'. Não sei como converter esses dois tipos. Alguém pode dar uma mão?
  6. Pois é... É porque sempre tento entender o funcionamento dos comandos e a lógica antes de expôr o meu código. Mas nesse caso só atrapalhou. O seu código acima também funcionou, e ficou muito mais rápido! Vou usar ele. Obrigado mais uma vez. Abraço!
  7. Ah sim, hehe, agora entendi :P Não, na verdade eu sempre limpo a tabela T2 antes de preenchê-la. Antes do código que eu deixei acima, vem esse código: begin . . . ADOQuery.SQL.Add('DELETE FROM SINCFOP'); ADOQuery.ExecSQL; ADOQuery.SQL.Clear; . . . end; Porque na verdade, isso é pra gerar um resumo de vendas por CFOP, tipo como um relatório, e eu exibo o resultado em um grid, pro usuário ter noção de suas vendas ^^ É uma tabela temporária, seus valores nunca acumulam.
  8. Hum... é, aí fica complicado! O ideal seria você já ter alguma coisa em mente, pois há várias maneiras de se fazer uma mesma coisa no Delphi. Se você já tivesse um código, seria mais fácil. Conselho: procure um pouco mais ^^ E depois poste suas dúvidas. Abraço!
  9. Não, o código principal é esse mesmo que postei. Acompanhei o processo pelo "Step Over" e o resultado é sempre correto. Com o "Locate" eu tenho apenas duas possibilidades, ou ele encontra o valor de T1 em T2 ou não, claro! Se ele não encontra, eu crio o CFOP e somo os valores. Se encontra, então eu apenas somo os valores, pois o CFOP já foi criado... É batata! :) Dá certinho. Mas creio que existam outros modos de se fazer isso. Ainda sou iniciante em programação e conheço poucos comandos e procedimentos. Abraço!
  10. Certo, agora passe seu código como ele está, pro pessoal ter uma noção de que caminho você tomou.
  11. Olá Alex! Para podermos te ajudar melhor, você poderia nos dizer qual é o banco de dados que você está utilizando. Só assim você terá uma resposta mais completa. Abraço!
  12. Correto meu amigo Micheus, cada "|" significa um registro diferente, e não um campo diferente como eu citei. Me desculpem pela falta de atenção no post, já consertei. Quanto à sua resposta, ainda não testei o filtro SQL que você sugeriu. Vou fazer uns testes e qualquer novidade posto aqui, apesar de já ter resolvido meu problema com o comando "Locate". Obrigado! --------------------------------------EDIÇÃO-------------------------------------- Perfeito Micheus, o código SQL realmente funciona! Só que eu não tinha explicado ainda, que além disso, eu preciso somar em cada registro da tabela T1, um campo com um valor real. A estrutura real de T1, seria essa (agora, cada "|" representa uma coluna, onde PK é uma chave primária qualquer): PK | CFOP | VRTOTAL 01 | 5929 | 280,88 02 | 5102 | 420,00 03 | 5102 | 32,90 04 | 5929 | 336,50 05 | 1102 | 150,00 06 | 2303 | 867,37 07 | 1102 | 213,00 08 | 2102 | 690,00 Então na tabela T2 eu teria como resultado (onde CFOP é a chave primária): CFOP | VRTOTAL 1102 | 363,00 2102 | 690,00 2303 | 867,37 5102 | 452,90 5929 | 617,38 Ou seja, tenho que ler T1 registro por registro, inserindo e editando à medida que encontro um CFOP. Esse é o código que estou usando: begin . . . while not T1.Eof do begin if T2.Locate('CFOP', T1.FieldValues['CFOP'], []) then begin T2.Edit; end else begin T2.Insert; T2.FieldByName('CFOP').Value := T1.FieldValues['CFOP']; end; T2VRTOTAL.Value := T2VRTOTAL.Value + T1VRTOTAL.Value; T2BASEICMS.Value := T2BASEICMS.Value + T1BASEICMS.Value; T2VRICMS.Value := T2VRICMS.Value + T1VRICMS.Value; T2ISENTAS.Value := T2ISENTAS.Value + T1ISENTAS.Value; T2OUTRAS.Value := T2OUTRAS.Value + T1OUTRAS.Value; T2.Post; T1.Next; end; . . . end; Me desculpem por não ter postado todo o problema antes, pensei que iria ficar um post muito grande, mas acabei fugindo do problema real. Mas tudo resolvido. Se alguém tiver uma outra sugestão para o meu código acima, fique a vontade. Obrigado, abraço!
  13. Aê galera, pode fechar o tópico, fiz um esquema com o Locate das tabelas que resolveu meu caso. Obrigado!
  14. É, eu já pensei em ordenar T1, mas como são muitos dados, acabei desistindo dessa idéia, pois o programa iria demorar muito pra mostrar os dados... mas acho que não vai ter outro jeito não. Obrigado Denis!
  15. Fala galera! Estou tentando preencher os dados de uma tabela baseado nos dados de outra. Sendo que na tabela T1 eu possuo vários dados duplicados, e na tabela T2 esses dados são a chave primária, portanto, não podem se repetir. Exemplo de estrutura da tabela T1 (cada "|" significa um registro diferente): c | b | a | a | c | d | e | b | b | a Com esses dados em T1, estou tentando fazer com que a tabela T2 fique assim: c | b | a | d | e Já tentei montar meu algoritmo de várias formas, com matrizes e tudo, mas não consegui chegar numa lógica que funcionasse :S Peço ajuda.
  16. E se você criar um DBEdit novo, apontando pro campo que o "DBEdit problemático" está apontando... acontece a mesma coisa?! Tente acompanhar seu código com o Step Over (tecla F8), isso parece ser um erro no seu código mesmo. Infelizmente não dá pra ajudar muito, porque esse tipo de erro pode ser qualquer coisa errada no projeto.
  17. Cara, dá uma repassada no seu código de gravação, provavelmente esse DBEdit não está incluído. Se possível, apague ele e coloque um novo de teste, gravando no mesmo campo.
  18. Duduh_Capixaba

    Novo Projecto

    Caracas meu amigo... você falou, falou, e não explicou nada :S rsrs... Tem como dar uma reformulada na pergunta?!
  19. Cara, em qual linha do código está dando o erro? Analisando rápido, creio que o erro seja aqui: sTbConsName := TbConsName; Pois você não definiu o que sua string está recebendo da sua tabela.
  20. Esse é um dos modos pra se fazer uma importação. Agora, para eliminar o ";" eu uso um componente que instalei no Delphi, o "TextTable". Com ele meu trabalho fica muito mais fácil, basta dizer ao componente qual caracter é o delimitador de colunas, no seu caso, o ";". Exemplo de uma importação com o TextTable: var F: TextFile; S: String; begin AssignFile(F, 'C:\Teste.csv'); Reset(F); ADOTable1.Open; while not Eof(F) do begin Readln(F, S); if not Eof(F) then begin ADOTable1.Insert; ADOTable1.FieldByName('FILIAL').Value := TextTable1.FieldValues['FILIAL']; ADOTable1.FieldByName('ORDEM').Value := TextTable1.FieldValues['ORDEM']; ADOTable1.FieldByName('ITEM').Value := TextTable1.FieldValues['ITEM']; ADOTable1.FieldByName('MATRIC').Value := TextTable1.FieldValues['MATRIC']; ADOTable1.FieldByName('CST').Value := TextTable1.FieldValues['CST']; ADOTable1.FieldByName('ECF').Value := TextTable1.FieldValues['ECF']; ADOTable1.FieldByName('QUANT').Value := TextTable1.FieldValues['QUANT']; ADOTable1.FieldByName('VRUNIT').Value := TextTable1.FieldValues['VRUNIT']; ADOTable1.FieldByName('VRTOTAL').Value := TextTable1.FieldValues['VRTOTAL']; ADOTable1.Post; TextTable1.Next; end; end; CloseFile(F); ADOTable1.Active := True; end; Mas você também pode fazer isso através de funções, também funciona. Aqui no fórum já ví um processo de importação que elimina os caracteres que delimitam as colunas de um txt. Basta procurar, abraço!
  21. O problema das casas decimais não estaria na construção da sua base de dados?! Veja como seu banco armazena estes números com três casas, pois sua formatação está correta.
  22. Cara, eu sempre fiz meus programas assim. Você poderia descrever o erro que está acontecendo? Deve ser algum detalhe a acertar. Antes, faça um teste: - Comece uma nova aplicação do zero; - Adicione um TDatabase, um TTable, um TDataSource, um TDBGrid e dois TButton; - Crie a conexão com seu banco, ligue o TTable ao TDataBase, o TDataSource ao TTable e o TDBGrid ao TDataSource; - Configure seu TTable com uma tabela qualquer e sete a propriedade "Active" como "True"; - No evento "OnClick" do TButton1 coloque o seguinte código: procedure TForm1.Button1Click(Sender: TObject); begin Table1.IndexFieldNames := 'CAMPO_1'; end; - No evento "OnClick" do TButton2 coloque o seguinte código: procedure TForm1.Button1Click(Sender: TObject); begin Table1.IndexFieldNames := 'CAMPO_2'; end; Onde "CAMPO_1" e "CAMPO_2" são os campos que você quer ordenar, e veja o que acontece. Abraço!
  23. Tenho sim, a importação ou exportação de txt é um processo bem simples, basta saber lidar com os arquivos texto. Se preferir, mande uma MP pra mim com seu e-mail que eu te passo alguns exemplos que eu tenho aqui no escritório. Você tb pode procurar aqui no fórum por importação, exportação e arquivo txt no campo busca, vai perceber que já existem vários posts sobre o assunto.
  24. Aqui na nossa empresa utilizamos o Firebird 1.5 com acesso BDE. Nas novas aplicações estamos tentando eliminar o BDE, mas o banco de dados continua sendo o Firebird, por nos atender perfeitamente. Recomendo!
×
×
  • Criar Novo...