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. Não chama a tela de login, como assim?! No caso, seu Form principal é essa tela de login? Se for isso, entre em Project > Options. Na aba Forms, sete o Main form para o form correspondente a sua tela de login.
  2. Olá Fernando! Você não precisa declarar DB no seu uses. Seu erro é que você escreveu "loParialKey", ao invés de "loPartialKey". Continuando o tratamento de erros, está faltando um "end;" no final do seu código. Abraço!
  3. Olá amigos! Estou prestes a começar um sistema para um amigo e estou procurando qual a melhor conexão do Delphi com uma base de dados Firebird 1.5. Estou entre as palhetas dbExpress, BDE e a InterBase. Já trabalho com o BDE no meu emprego e tenho intimidade com ele, mas muitas pessoas não o recomendam. Por isso estou buscando outras alternativas. Fazendo alguns testes simples com o dbExpress, me deparei com a seguinte situação: Ele não me permite ligar um DataSource diretamente a uma tabela por ser unidirecional, tendo que usar componentes intermediários, como o ClientDataSet e o DataSetProvider. Ok, até aí tudo bem. Vieram os testes: Teste 1: - Adicionei um SQLTable, um ClientDataSet, um DataSource, um DBGrid e dois Buttons; - Associei o SQLTable ao ClientDataSet pelo comando "Assign Local Data..." (botão direito em cima do ClientDataSet), associei o DataSource ao ClientDataSet e o DBGrid ao DataSource. (Nessa hora, já era possível visualizar os dados da tabela no Grid); - No botão 1, criei um código para desativar a visualização dos dados, e no botão 2, um código para ativar (ClientDataSet1.Active := False / ClientDataSet1.Active := True); - Executando o Teste com a propriedade "Active" do ClientDataSet setada como True, obtive um carregamento do Form um pouco lento, um congelamento pequeno, mas nada que pudesse atrapalhar. Os comandos para desativar e ativar a visualização funcionaram perfeitamente, sem atrasos. Teste 2: - Seguindo a mesma estrutura do Teste 1, apenas setei a propriedade "Active" do ClientDataSet como False, e obtive um carregamento do Form bem mais rápido. Mas em compensação, o botão de ativar a visualização passou a não funcionar, retornando o erro: "ClientDataSet1: Provedor de dados ou base de dados perdidos". Teste 3: - Para o próximo teste, adicionei um DataSetProvider, o qual eu relacionei com o SQLTable, e depois relacionei o ClientDataSet a ele; - A propriedade "Active" do ClientDataSet continua como False; - Agora o carregamento do Form voltou a apresentar um certo congelamento e na hora de visualizar o Grid existe o mesmo tempo de espera. Ou seja, dois atrasos: do Form e da visualização dos dados. Teste 4: - Fiz o mesmo Teste 3 só que com componentes da palheta BDE. O tempo de espera para o carregamento do Form é o mesmo, mas a visualização dos dados no Grid é instantânea. A tabela usada para os testes é a mesma e contém 7.100 registros. Ainda não fiz testes com a palheta InterBase, nem sei se ela seria viável para o Firebird. Agora com questão ao atraso do dbExpress para visualizar os dados no Grid, não teria uma propriedade tipo, "não carregar todos os dados", ou algo assim?! Parece que ele demora porque carrega todos os dados de uma vez. Não sei, mas parece ser algo com relação a isso.
  4. Use a propriedade OnMouseMove do ActionMainMenuBar.
  5. Isso mesmo Micheus. Minha idéia não funciona justamente por essa causa. As únicas colunas onde os dados costumam se repetir são DESCRICAO e REFERENCIA. E são eles que me interessam na verdade. Nesses dois campos o usuário pode repetir a mesma descrição infinita vezes. O que acontece é que ele pode ter um produto de mesma descrição e com marcas ou fabricantes diferentes, por exemplo.
  6. Olá Micheus! É, realmente o DISTINCT ignora dados repetidos, mas só quando eu tenho dados repetidos em todos os campos do SELECT. Assim ele funciona: SELECT DISTINCT DESCRICAO, REFERENCIA FROM CDPRODU ORDER BY DESCRICAO Ele me retorna apenas uma linha para os resultados iguais, como eu queria. Mas meu campo CODIGO é uma chave primária, aí o DISTINCT já não funciona mais. Mas pelo menos eu já tenho alguma coisa aqui. Obrigado pela ajuda. Abraço!
  7. Olá Carlos! Mas qual seria o critério para dizer ao Table1 quais dados jogar para Table2? Tipo, a lista de materiais que você quer passar para a Table2, está relacionada com o quê?! Detalhe um pouco melhor o que você quer que seu programa faça. Abraço!
  8. Qual é o gerador de relatórios que você usa?
  9. Olá! Estou precisando construir um select que ignore dados repetidos. Conheço o comando Group By, e com ele eu até consigo o que eu quero, mas o problema é que ele só me retorna uma coluna da tabela, sendo que eu preciso visualizar todas as colunas. Esse é o código que eu conheço: SELECT DESCRICAO FROM CDPRODU GROUP BY DESCRICAO ORDER BY DESCRICAO E essa seria minha idéia: SELECT CODIGO, DESCRICAO, REFERENCIA, PRECO1, ESTOQUE FROM CDPRODU GROUP BY DESCRICAO ORDER BY DESCRICAO E ainda tenho um problema ainda maior, pois o campo ESTOQUE pertence a outra tabela, e não a tabela CDPRODU como eu coloquei no exemplo. Mas com a junção das tabelas eu me viro. Inicialmente eu preciso saber se o que eu quero é possível.
  10. Olá Eder! Acho que você se confundiu na hora de postar. Este código acima não é Pascal. Mas veja se este código resolve o seu problema: procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := FormatDateTime('ddd', Now); end; Ele retorna os valores: seg, ter, qua, qui, sex, sáb e dom. Se quiser o nome inteiro, coloque 'dddd'.
  11. Aqui no fórum mesmo existem vários exemplos com este comando: http://scriptbrasil.com.br/forum/index.php...&hl=WinExec http://scriptbrasil.com.br/forum/index.php...&hl=winexec http://scriptbrasil.com.br/forum/index.php...&hl=winexec E ainda existem outros comandos para o mesmo objetivo, como o ShellExecute, ou o CreateProcess. Procure também em outros fóruns e portais de programação, o assunto é bem vasto. Abraço!
  12. Olá Fernando! Na verdade você está precisando de uma função que exporte seus dados com a largura de colunas fixas. Eu uso esta função em minhas aplicações: Declare StrUtils e StdCtrls no "uses" do Form. function ExpTxt(Source: string; Ch: char; Size: byte; LeftAlign: Boolean): string; begin if LeftAlign then Result := Copy(Source + StringOfChar(Ch, Size), 1 , Size) //alinha a esquerda else Result := RightStr(StringOfChar(Ch, Size) + Source, Size); //alinha a direita end; E para usá-la: procedure TForm1.Button1Click(Sender: TObject); begin ExpTxt(Tabela.FieldByName('CAMPO').AsString, ' ', X, True) end; Onde "X" é o tamanho da coluna. No seu caso, se o tamanho dos campos também variar, você terá que arrumar um jeito de o valor de X também variar. Qualquer dúvida poste aí. Abraço!
  13. Kiko, essa possibilidade existe sim. Você pode começar estudando/procurando por comandos como o WinExec.
  14. Olá Paulo! Eu tenho aqui um projeto onde usei este tipo de relacionamento. Estou usando tabelas. O meu projeto ficou assim: - Dois ADOTable; - Dois DataSource; - Dois DBGrid. - Relacione a tabela ADVCADAN ao ADOTable1, o DataSource1 ao ADOTable1 e o DBGrid1 ao DataSource1; - Relacione a tabela ADVCADPA ao ADOTable2, o DataSource2 ao ADOTable2 e o DBGrid2 ao DataSource2; - No ADOTable2, sete o MasterSource como DataSource1; - Ainda no ADOTable2, clique nos três pontinhos da propriedade MasterFields, e adicione os campos do relacionamento (podem ser mais que um). Creio que isso deva resolver. Faça um teste e poste dizendo se tudo correu bem. Abraço!
  15. Aproveitando o tópico, gostaria de ter uma resposta para essa pergunta do amigo fajo: Pois antigamente, nós aqui na empresa, usávamos um executável em cada estação apontando para o BD. Mas por motivos de manutenção do sistema, resolvemos criar um atalho em cada estação. Assim, em uma atualização do sistema, nós não precisamos passar em cada estação, basta atualizar o servidor e pronto! Nosso sistema usa o Firebird 1.5 e o componente de acesso ao banco é o BDE.
  16. Olá Eder! Estranho, era pra dar certo... No caso, "FATURAMENTO" é a máquina da sua rede? E "EPSON FX-890 ESC" é o nome do compartilhamento da impressora? Lembre-se que o comando deve apontar para a máquina que você deseja imprimir, ok?! Vamos supor que a máquina onde está a impressora se chame TERMINAL e o compartilhamento da impressora seja EPSONLX. O comando ficaria assim: net use lpt1: \\TERMINAL\EPSONLX /yes Sempre apontando para a máquina onde você deseja imprimir.
  17. Fala Eder! Tente isso cara: Antes do: TYPE arquivo.txt > PRN Tente: net use lpt1: \\nome_do_pc_da_impressora\nome_da_impressora /yes Isso vai mapear a sua impressora de rede e vai fazer com que tudo que você envie para a porta LPT1 seja impresso nela. Aqui no escritório deu certo. Caso você precise excluir o mapeamento, este é o comando: net use lpt1: /delete /yes
  18. Olá! Poste a mensagem de erro, só assim alguém poderá ajudá-lo melhor. Outra coisa... Se não me engano, funções são usadas para cálculos, ou seja, devem retornar um resultado. No seu caso, acho que seria melhor você criar procedimentos (procedures) ao invés de funções. Abraço!
  19. Crie uma variável para controlar o nome dos arquivos. Tipo assim: Declare uma variável numérica para o formulário (no meu exemplo declarei "i" como integer). var Form1: TForm1; i: Integer; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin i := 1; Memo1.Lines.LoadFromFile('C:\Texto' + inttostr(i) + '.txt'); end; procedure TForm1.AnteriorClick(Sender: TObject); begin i := i - 1; if FileExists('C:\Texto' + inttostr(i) + '.txt') then Memo1.Lines.LoadFromFile('C:\Texto' + inttostr(i) + '.txt') else begin ShowMessage('Acabaram os arquivos!'); i := i + 1; end; end; procedure TForm1.ProximoClick(Sender: TObject); begin i := i + 1; if FileExists('C:\Texto' + inttostr(i) + '.txt') then Memo1.Lines.LoadFromFile('C:\Texto' + inttostr(i) + '.txt') else begin ShowMessage('Este é o primeiro arquivo!'); i := i - 1; end; end;
  20. Duduh_Capixaba

    ola

    Hum...Acho que o problema é que sua condição não está sendo atendida... Confira o processo passo-a-passo com as tecla F8 e F7 e veja o que está de fato acontecendo. Outra coisa... Você está avançando dois registros de uma vez só quando sua condição é atendida. Retire o "tblTitulos.Next" de dentro do "if". Fiz um exemplo aqui e funcionou, veja: procedure TForm1.Button1Click(Sender: TObject); begin ADOTable1.First; while not ADOTable1.Eof do begin if not ADOTable1.FieldByName('TESTE').IsNull then begin ShowMessage('Campo preenchido'); end; ADOTable1.Next; end; end;
  21. Duduh_Capixaba

    ola

    Mas qual é o erro do seu projeto?
  22. Teria como você colocar seu código pra gente dar uma olhada? E também em qual linha acontece o erro.
  23. Cara, se você estiver importando esses dados para um campo numérico, o zero à esquerda não vai aparecer mesmo. De duas uma: ou você formata seu campo numérico para que ele apresente sempre oito dígitos (assim: 00000000) ou você transforma seu campo numérico em campo texto (isso tudo dentro do Access, ok?!). Lembrando que no caso de você formatar o campo numérico, ele sempre vai apresentar os oito dígitos, no caso, o número 1234, por exemplo, vai ficar assim: 00001234. Abraço!
  24. Duduh_Capixaba

    ola

    Coloque a seguinte condição: if Tabela_Desejada.FieldByName('CAMPO').Value = null then Faça alguma coisa else Faça outra coisa Não se esqueça de colocar o comando "Tabela.Next" antes do "end" do "while", ou seu loop vai ficar preso. Abraço!
×
×
  • Criar Novo...