Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. maxm.ro, dê uma olhada neste post. Ele utiliza o TGauge, mas o princípio é exatamente o mesmo e está comentado (exemplo para download): - max - contém o tamanho máximo do arquivo sendo importado; - position - avança com a quantidade de bytes lidos; Veja se você consegue avançar.
  2. fajo, como sua cláusula WHERE só utiliza AND's, os parênteses não se fazem necessários. Também, pelo fato de você não utilizar outra tabela em sua cláusula FROM, não se faz necessário indicar junto ao campo o nome da tabela. Observando, então, a consulta SQL de uma forma mais "limpa": SELECT Doc_Doa_Id, 10 AS Motivo, current_date AS Data, 937 AS Usuario, Doc_Id FROM Tab_Doacoes WHERE (current_date - doc_data_operacao)>60 AND Doc_Func_Operadora = 937 AND Doc_Status_Doacao=2 Usando Firebird, eu posso lhe afirmar que esta avaliação: (current_date - doc_data_operacao)>60 seria válida, exceto se seu campo "doc_data_operacao" for de um tipo não compatível com "current_date" (que é DATE). Um caso seria ele ser TIMESTAMP. Se este for seu caso, substitua "current_date" por "current_timestamp" Abraços
  3. robinhocne, sempre que se fala em filtrar determinado campo, isto é feito adicionando tal filtro na cláusula WHERE, ou seja, você coloca "nome_do_campo_a_filtrar = valor_desejado". Quando você quer listar os dados "agrupados" (não falo de group by), basta que você coloque na cláusula ORDER BY, no seu início, os campos que farão o agrupamento. Por ex.: SELECT P.Aluno, P.Instrutor, P.Data, P.Horario, P.Categoria, P.Aluno FROM Praticas P, Instrutores I WHERE P.Aluno=' + TxtMat.Text AND P.Status=1 AND I.Codigo=P.Instrutor ORDER BY P.Data, P.Horario aqui você tem a listagem agrupada, e em seqüência de data. SELECT P.Aluno, P.Instrutor, P.Data, P.Horario, P.Categoria, P.Aluno FROM Praticas P, Instrutores I WHERE P.Aluno=' + TxtMat.Text AND P.Status=1 AND I.Codigo=P.Instrutor ORDER BY P.Categoria, P.Data, P.Horario aqui você tem a listagem agrupada por Categoria e em seqüência de data. SELECT P.Aluno, P.Instrutor, P.Data, P.Horario, P.Categoria, P.Aluno FROM Praticas P, Instrutores I WHERE P.Aluno=' + TxtMat.Text AND P.Status=1 AND I.Codigo=P.Instrutor ORDER BY P.Instrutor, P.Data, P.Horarioaqui você tem a listagem agrupada por Instrutor e em seqüência de data. Faça estas consultas no IBExpert (você deve tê-lo instalado) e verifique os resultados.
  4. Em qual banco de dados isto é obrigatório? Eu desconheço. Este tipo de "obrigação" ocorre, para todos os bancos, na cláusula GROUP BY.
  5. Se você vier a experimentar o DSPack, dê uma olhada neste exemplo
  6. Vivendo&Aprendendo, já que ADOTable, Table ou ADOQuery são todos datasets, acho então, que o seu problema é com a construção das instruções SQL, não seria isto? Em termos de relatório nada muda. O quickreport sempre vai mostrar os dados de acordo com o dataset vinculado a ele.
  7. Micheus

    Erro No Delphi

    rodrigão, você andou instalando algum componente (pacote de ) recentemente? Se sim, experimente desinstalá-lo.
  8. an_cp, se não tiver muita dificuldades com inglês, dê uma olhada neste driver (free) e siga as orientações - dbxOpenMySQL5 - pode ser que lhe ajude.
  9. darth_ivan, acho que a resposta ainda não clareou as coisas.Você pretende fazer algum tipo de jogo ou algo assim? Talvez se você disser o que pretende fazer possa ser mais fácil de dar algum help ;)
  10. Ricky, conforme o help:"Use Service to identify the use of the connection. Windows provides a number of standard service names such as ftp, http, finger, or time. Servers can specify additional services and their associated ports in a SERVICES file. For more information, see the Microsoft documentation for Windows sockets." Basicamente, é onde você define o tipo de serviço que está implementado: ftp, http, finger ou time.
  11. Se voce foi testar em outra maquina, essa maquina no minimo tem que ter o interbase ou firebird instalado, caso contrario vai dar erro. Jhonas, complementando a informação. Se as demais máquinas que vão acessar o banco, estiverem na rede, não há necessidade da instalação do gerenciador do banco nelas. Na verdade será necessário apenas instalar junto com o programa as DLL's: - para o Firebird -> FBClient.dll (localizada na pasta BIN de instalação do banco no servidor) - para o Interbase -> GDS32.dll (esta eu não estou certo da localização, mas se não estiver numa pasta similar, provavelmente estará pasta System32, também do servidor). Obs.: na instalação do Firebird, há uma opção que permite a "criação"(para fins de compatibilidade) da DLL GDS32.dll e sua cópia para a pasta System32 do servidor. Estas dll's deverão ser inclusas na sua instalação e copiadas para a pasta SYSTEM32 da máquina client.
  12. Complementando... a ordenação foi pelo campo nome. Mas se fosse necessário ordenar pelo maior valor, seria necessário você indicar a coluna do max. Alguns bancos, não aceitam que você utilize o alias (apelido) dado a coluna com a função de agregação (SUM, MAX, Min, COUNT). Neste caso, você deve indicar o número da coluna - veja exemplo: SELECT MAX(Cod) MAXCod, Nome FROM tb_teste GROUP BY nome ORDER BY 1 onde 1 é o número da coluna onde está o campo de agregação, neste caso o MAXCod. José Rodrigo, apenas para complementar e justificar o motivo pelo qual seu SQL inicial funcionava sem o GROUP BY: select MAX(Cod) FROM tb_teste E depois exigiu que fosse incluído a coluna nome: select MAX(Cod), nome FROM tb_teste GROUP BY nome A regra é: todo o campo (coluna) que não for função de agregação (SUM, MAX, Min, COUNT), TEM que ser listada na cláusula GROUP BY. Isto é uma atribuição minha (moderador) ;) Abraços
  13. Allanrf, não deve ser nada complicado se você tiver em mente qual a composição deste campo. A variável TDateTime é equivalente a um Float, onde a parte inteira corresponde o número de dias a partir de 30/12/1899 (ou seja, se você atribuir zero a ela, esta será a data observada) e a parte fracionária corresponde ao valor da hora (horas, min, seg e mili), sendo que 0.9999999 corresponde a aproximadamente 23:59:59. Não seria preciso dizer que quando atingir 1, será incrementada a parte inteira, avançando um dia - visto que 24:00 corresponde a um dia. Se você quizer somar dias, então some o número de dias diretamente à variável TDateTime. Dê uma olhada neste post também.
  14. gleistoncardoso, o que você quiz dizer com o comentário "não encontrou propriedades" ao lado a variável "privada"?Você lembrou de colocar na cláusula USES a unit "ComObj"? Eu exemplifiquei utilizando esta únit, porém coloquei depois da cláusula IMPLEMENTATION, talvez você tenha que colocar na cláusula INTERFACE (lá no início da unit) bom, esta parte é um efeito em cascata. Mas o problema começa numa linha que não parece-me ser qualquer uma que tenha posto em meu exemplo. Observe que a mensagem cita "',', ')' or ]' expected but 'EXCEPT' found" e não há nada parecido em meu exemplo.Você vai ter que colocar o código desta parte aqui (a parte em que contenha as linhas anteriores a linha 791, até o final do seu except - end)
  15. Jhonas, acho que o colega Pirambu! perguntou é: como colocar o programa na "Tray". Tem alguns tópicos que discutem isto aqui no forum. Existem alguns componentes que implementam esta funcionalidade, mas também pode ser implementada direto na aplicação. Dê uma olhada neste tópico - "Trayicon" (este é um componente, mas neste tópico explico como implementar a o recurso na aplicação porque o colega queira utilizar o botão esquedo com a mesma funcionalidade do direito) Um componente que pode ser utilizado é SysTray (download). Tem este post que dá umas dicas sobre o seu uso. Abraços
  16. Esta instrucao me retornou 2000 registros. Note que os parametros passados nas duas instrucoes são o mesmos, com exceção da instrucao like que foi acresentada na segunda instrucao. Oras, se na primeira instrucao, sem o like, me retornou 177 registros, na segunda instrucao com o like deveria me retornar um número menor de registros que foi encontrado na primeira instrucao, ou seja deveria ser menor que 177 registros. O que há de errado nesta história? Halfar, acho que ser você colocar de uma forma visualmente melhor, você consegue perceber onde reside a diferença: SELECT Ementa, Texto, Linkagem, Processo, Tribunal, ID FROM DLJ WHERE (AnoPublicacao='2006') AND (Tribunal = 'STJ - Superior Tribunal de Justica') AND (Ementa LIKE '%crime%') OR (Texto LIKE '%crime%') ORDER BY Data DESC observe que o fato de aparecer na cláusula WHERE o "OR (Texto LIKE '%crime%')" faz com que, além das restrições impostas pelos 3 outros filtros combinados com AND, sejam listados todos os registros onde TEXTO contenha "crime" (independente das outras restrições) Se você quer filtrar todos os registros que tenham AnoPublicacao=2006 e que o Tribunal=STJ - Superior Tribunal de Justica e que apareça "crime" nos campos Ementa ou Texto, então você tem que por um parênteses nesta última condição: SELECT Ementa, Texto, Linkagem, Processo, Tribunal, ID FROM DLJ WHERE (AnoPublicacao='2006') AND (Tribunal = 'STJ - Superior Tribunal de Justica') AND ((Ementa LIKE '%crime%') OR (Texto LIKE '%crime%')) ORDER BY Data DESCdesta forma, você vai realmente ter um resultado mais restrito ao procurar por "crime" (ou seja, menos que os seus 177 registros iniciais). Abraços
  17. Micheus

    Limpando Matriz

    acho que você poderia utilizar algo como:memset( array, '', sizeof(array) ); // declarada em string.h preenche toda a array com nulos ()
  18. ... #include <stdlib.h> ... div_t temp; temp = div(qtd_livros, 3); // se for para cada grupo de 3 livros, somar 7% de desc vlr_desc = temp.quot * (7 / 100); // ou se for para dar 7% de desc caso seja comprado mais que 3 livros if (temp.quot > 0) vlr_desc = (7 / 100); em temp.quot você terá a quantidade de grupos de 3 livros comprada. Por ex., se: - qtd_livros = 8, então temp.quot será 2 - qtd_livros = 2, então temp.quot será 0 - qtd_livros = 5, então temp.quot será 1 ... Seria algo assim?
  19. Allanrf, é importante lembrar que o DBGrid apenas mostra os dados provenientes do dataset ligado a ele, ou seja, os dados estão no dataset. A linha atualmente selecionada no DBGrid é exatamente a linha em que está posicionado atualmente o dataset. Logo, se você quer obter os dados da linha selecionada, apenas acesse os campos do dataset associado ao DBGrid. Por ex., no DBGrid temos o dataset Alunos associado a ele. Nele visualizamos as colunas Nome Aluno e Data Nascimento. No dataset associado a ele estas colunas correspondem, respectivamente, a NomAluno e DatNascimento. Nosso dataset chama-se TabAlunos, então para atribuir as colunas hora selecionadas no DBGrid bastaria: ... TabDestino.Append; TabDestinoNomAluno.Value := TabAlunosNomAluno.Value; TabDestinoDatNascimento,Value := TabAlunosDatNascimento.Value; TabDestino.Post; Já quanto a seleção múltipla, a idéia é similar. Mas, antes, será necessário habilitar a multipla seleção - setar dgMultSelect = True na propriedade Options do DBGrid. A seguir é necessário fazer um loop para processar todos os registros selecionados. Para isto utiliza-se a priopriedade SelectedRows do DBGrid. Neste loop, a cada intereção, o registro lido é gravado na tabela destino. Partindo do exemplo anterior: var Idx :Integer; begin if DBGrid1.SelectedRows.Count > 0 then begin for Idx := 0 to DBGrid1.SelectedRows.Count-1 do begin // posiciona o dataset de origem no "n" registro selecionado TabAlunos.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Idx])); // move os dados do dataset de origem para destino aqui TabDestino.Append; TabDestinoNomAluno.Value := TabAlunosNomAluno.Value; TabDestinoDatNascimento,Value := TabAlunosDatNascimento.Value; TabDestino.Post; end; end; end;algo assim. ;) Tem este post similar, só que movendo os campos para um string a ser colocado no clipboard. Abraços
  20. samuelsjn, além de manipulá-la em CarregaDados, você manipula a propriedade lstvwDados.ShowColumnHeaders em algum outro ponto do programa?
  21. Está falando sério?Não seria em um componente TEdit colocado em um Form!? Se não souber como criar uma aplicação Delphi básica, sugiro que utilize o botão "Novo Tópico" para criar um tópico e obter ajuda a este respeito. Também, no link Apostilas Gratuitas, você pode encontrar alguma ajuda - Apostilas Delphi
  22. gleistoncardoso, esta última informação não é compatível com esta outra sua observação:"Quando vou fazer um arquivo novo no word 2007 utilizando mala direta com a tabela clientes.db funciona, o problema é realmente delphi com word 2007" Então, acho que deve haver algo ainda não identificado acontecendo. acho que não seria o caminho. Como disse antes, deve ter alguma coisa errada ocorrendo que ainda não se descobriu.O pior é que provavelmente só você conseguirá tentar achar o problema (eu, por ex., nem tenho o Word 2007). Não tenho certeza se em essência, não seria a mesma coisa, mas você já experimentou abrir o documento com esta outra forma: type TForm1 = class(TForm) private WordApp :OLEVariant; end; ... uses ComObj; procedure TForm1.BtnAbreDocClick(Sender: TObject); const wdWindowStateNormal = 0; wdWindowStateMaximize = 1; wdWindowStateMinimize = 2; begin try // cria objeto OLE para a aplicação Word WordApp := CreateOleObject('Word.Application'); // se não quiser que o word "apareça", comente a próxima linha WordApp.WindowState := wdWindowStateNormal; try WordApp.Documents.Open('C:\eventos\contratos\contratoarea.doc''); except ShowMessage('Erro ao tentar abrir arquivo doWord'); end; except ShowMessage('Erro ao tentar inicializar o Microsoft Word'); end; end; procedure TForm1.Form1Destroy(Sender :TObject); begin // se havia inicializado o Word, então encerra ele if not VarIsEmpty(WordApp) then WordApp.Quit; WordApp := UnAssigned; end; Mais uma outra coisa. Em qual a versão do Paradox que foi criada sua tabela (5, 7, ...)? Quem sabe, possa estar relacionado a versão dela.
  23. Carlinhosprog, se fosse para contar dias corridos, você poderia utilizar parte do código do Jhonas para os obter dias exatos. Ocorre que TDateTime/TTime/TDate são do tipo Float, onde a parte inteira corresponde à data. por isso ele fez este cálculo: Data := DataAtual - DataVenc; logo, em Data, você terá a diferença em dias entre as duas datas em questão. Um valor 0 (zero, ou seja datas no mesmo dia) corresponde a data 30/12/1899 e tratar este resultado como uma data comum pode ser meio complicado. Ao utilizar a função: DecodeDate(Data, ano, mes, dia); as variáveis ano, mes e dia, vão conter 1899, 12 e 30 respectivamente. Então, acho que esta saída não será a melhor para a sua aplicação. Experimente algo como o que está abaixo e veja se é o que procura: procedure TForm1.BtnCalculaDiferenca(Sender :TObject); var Data1, Data2 :TDateTime Meses, Dias :Integer; begin // inicializa as variáveis com os valores Data1 := StrToDate(Edit1.Text); Data2 := StrToDate(Edit2.Text); Meses := 0; Dias := 0; // computa meses transcorridos entre as datas while IncMonth(Data1) < Data2 do begin Data1 := IncMonth(Data1); Inc(Meses); end; // a diferença que sobra são os dias (+1 para incluir do 1º ao último) Dias := Trunc(Data2 -Data1) +1; // neste ponto você tem os valores Label1.Caption := Format('%d meses e %d dias', [Meses, Dias]); end;
  24. Muito bem, parece que está utilizando adequandamente a normalização de dados (ref. Modelo Relaciona de Dados Parte IV - Linha de Código) schaukoski, mais umas perguntinhas além das do colega Jhonas:- quando você fala em campo lookup, está se referindo a um campo adicionado a sua lista de campos via opção "Add new field..."->"Field Type = Lookup" ou ao uso das propriedades LookupDataset, LookupResultFields e LookupKeyFields de um campo (field) existente em seu dataset? - a tabela que você quer chamar o método Locate é a mesma tabela onde você tem os campos lookup's? Seria interessante um exemplo mais realista de sua situação para que o pessoal possa opnar ;)
  25. gleistoncardoso, acho que o ideal seria primeiro conseguir resolver o problema no Word2007 (ou seja, abrir o documento no Word 2007, fazer funcionar "lá"), para depois continuar queimando pestanas no Delphi (o que acho, que daí não será necessário). Pois, me corrijam se estiver falando besteira, o uso de OLE apenas faz com que possamos utilizar os recursos e funcionalidades do Word através de nossa aplicação Delphi. Se não funciona nativamente no Word, não vai ser via OLE que vai funcionar.
×
×
  • Criar Novo...