Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Eu sim, mas não sei se você entendeu o que eu postei antes.A questão de usar o extract, daquele modo, tem como objetivo fazer a comparação apenas com o ano da data passada como parâmetro. Que neste caso, pode ser apenas uma data. Eu não entendi o fato de você usar dois componentes para data (voce disse que queria usar apenas um), bem como não entendi o fato de você usar Query1 em dois pontos diferentes do código, sem mudar sua consulta SQL, mas em um lugar você passa duas datas como parâmetro (FlatSpeedButton3Click) e em outro não passa nada (FlatSpeedButton4Click). Neste caso, você vai em algum momento obter sim "List index out of bounds". Coisas de copiar colar e postagem sem atenção. :blush: Isso é só uma advertência - não erro. Voce deve remover estas declarações porque realmente não são necessárias.
  2. António44, esta parte não serve. Eu me referia ao conteúdo da propriedade SQL das suas queries. Agora deu para ver que você não está criando a consulta em run-time, ou seja, digitou o a instrução direto dentro da propriedade em design-time. Também, observa-se que você usou vários TQuery, então é interessante que você verifique aquele em que o erro está acontecendo. Eu olhei melhor a sua última query postada e observei que você não colocou a palavrinha WHERE antes do extract, do mesmo modo como eu havia esquecido no meu post. Tente observar o que está fazendo - não confie em tudo que a gente passa, porque podemos errar também. ;) Abraços
  3. Não tem não. (em termos) A dica acima, é para instalar seu programa sem ter que configurar o Alias no BDE, mas você precisa sim instalar o BDE na máquina em que vai rodar o seu programa. Veja o post do colega Jhonas neste tópico: Como instalar o dbe no maquina do cliente sem instalar o delphi? ou este do colega Vagner: Instalador Abraços
  4. Use estas que vão funcionar: function StartOfTheMonth(aDate :TDateTime) :TDateTime; var D, M, A :Word; begin DecodeDate(aDate, A, M, D); Result := EncodeDate(A,M, 1); end; function EndOfTheMonth(aDate :TDateTime) :TDateTime; var D, M, A :Word; begin Result := StartOfTheMonth(aDate) +32; // forçamos uma data no mês seguinte Result := StartOfTheMonth(Result) -1; // pegamos o último dia do mês end; Deve haver algo na hora que você monta a string, pois como você pode ver, esta instrução já é usado no SELECT.Poste o código da parte em que você monta a instrução SQL. Abraços
  5. Micheus

    Links

    Mais alguns links para componentes úteis (e não tão úteis - talvez): UtilMind => Diversos - 40 componentes - freeware (com fontes) LMD Inovative => LMD-Tools SE (Special Edition) - quase 100 componentes freeware para diversas versões de Delphi. Angus Johnson's => Diversos - 14 componentes - freeware (com fontes)
  6. Claro que não!Se estiver usando o D7 (ou posterior - anteriores não sei se tem a função), você pode incluir a unit DateUtils ao seu projeto e usar as funções StartOfTheMonth e EndOfTheMonth. Assim, você usa a data informada para obter o primeiro dia do mês e o último e passa estes valores aos parâmetros: ... Query1.Params[0].AsDate := StartOfTheMonth(Form1.DateEdit1.Date); Query1.Params[1].AsDate := EndOfTheMonth(Form1.DateEdit1.Date); ... Neste caso você está ciente que não estará fazendo a consulta por período, certo?! baseado no SQL que você postou acima: Select extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T where extract(year from data) = extract(year from :Data) Order by 1, 2, NomeClube, NomeEscalão Order by 1, 2, Clube,Escalaoassim, você terá apenas que passar o valor para o parâmetro Data. Abraços Motivo edição: acrescentado a palavra WHERE no SQL.
  7. Na verdade usa sim.Você não mencionou, mas há necessidade da inclusão da unit NB30.pas (no caso do Delphi 7) e se você der uma olhada no código fonte, verá que o uso da função NetBios implica no uso implícito da DLL netapi32.dll: function Netbios; external 'netapi32.dll' name 'Netbios'; Sendo ambas dll parte do Windows, a primeira vista, vejo como vantagem do primeiro método ele ser mais enxuto (e compativel com as versões atuais do Windows) e como desvantagem do segundo (o seu), o fato de não ser suportado pelo Windows Vista e posteriores - "[Netbios is not available for use on Windows Vista, Windows Server 2008, and subsequent versions of the operating system]" (ref. msdn) Abraços
  8. aldo macedo, a idéia da representação foi a de mostrar que, baseada nos duas primeiras afirmações, duas "respostas" são possíveis para a última proposição...Se alguns Smaugs são Thors e alguns Thors são Thrains, então: - alguns Smaugs são definitivamente Thrains se, e somente se, {{Smaugs} ∩ {Thors}} ∩ {{Thors} ∩ {Thrains}} ≠ Ø - nenhum Smaugs é definitivamente Thrains se, e somente se, {{Smaugs} ∩ {Thors}} ∩ {{Thors} ∩ {Thrains}} = Ø Assim, a resposta à questão será Falsa - como o colega Jonathan Queiroz, já havia tentado explicar: Sim !Eles podem (ou não) estar no grupo de 90 ! Mas a proposição não é verdadeira ! Ela pode (ou não) ser verdadeira... Em lógica, uma proposição só pode ser verdadeira quando o resultado é invariável, ou seja, não muda ! Como o resultado da proposição é variante, podemos afirmar que ela é falsa ! Acho que esse seria um caso para o qual a idéia "maluca" de um profº de Compiladores e Linguagens de Programação serviria. Ele falava sobre ter uma estrutura do tipo: If <condição> Then [...] Else [...] Otherwise [...] Abraços
  9. Jonathan Queiroz, seria o caso de entender este exemplo como sendo verdadeiro? Possível?Se for, eu tenho a impressão qua não está muito bom não. Como você mesmo diz, ainda não podemos afirmar que: "no mínimo um Smaug é Thrains" pensando em termos de conjunto, que poderíamos representar as duas possibilidades citadas pelo colega Jonathan Queiroz: Abraços
  10. Eu utilizo o Firefox e, de vez em quando, eu também não vejo o ponto de inserção na área de escrita da mensagem, mas consigo escrever. Entretanto, nenhuma acentuação é aceita - os caracteres aparecem sem o acento. Vai entender... em se tratando de Google, isso é meio relativo já que muitos dos seus aplicativos em "atividade" são beta:Google Docs Google Acadêmico Google Agenda Google Notícias Brasil ... E o mais beta dos betas, desde abril de 2004: GMail :D Considerando o significado de versão beta, tão explorado pela Google, a Microsoft também deveria agregar o termo à seus aplicativos. Assim, justificaria muito dos problemas que encontramos neles. ^_^ Abraços
  11. Micheus

    Conexão Remota

    Alguns links que tenho guardado do período que andei procurando saber um pouco sobre o assunto (faz pouco tempo) :blush: O básico para entender o funcionamento: - Webservices - 1ª parte (ref. Planeta Delphi) - Webservices - 2ª parte (ref. Planeta Delphi) Acessando banco de dados: - Building a Web Service in Delphi with a DB2 Backend (ref. IBM) - [o banco e componentes são outros, mas o conceito é o mesmo] - How to get data from InterBase via WebServices (ref. Delphi3000.com) - [um bom artigo] - Building your First WebService in Delphi (Autor Shiv Kumar) - [infelizmente as figuras não estão aparecendo, mas o conteúdo é muito bom] - WebServices and Complex Types (Autor Shiv Kumar) Exemplos diversos: - 100 exemplos de aplicação (midas, soap, webservice, ravereport, intraweb, webservice) (ref. Planeta Delphi) - [a parte sobre midas, soap, socket... estão nas pastas de 19 a 23] Tenho mais alguns, mas acho que estes já dão para a saída. Abraços
  12. marlonCampos, já que você disse ter formatado, pode ser devido as configurações nas Opções Regionais e de Idioma do Windows não estarem iguais a que você tinha antes. se você fizer a consulta formatando o campo date para ficar no mesmo formato que você está comparando, não deverá haver problema: select * from cliente where CONVERT(VARCHAR(10), data_nascimento_cliente, 103) = '29/12/2008'detalhes sobre os parâmetros da função CONVERT: CAST and CONVERT (Transact-SQL) Abraços
  13. Micheus

    Montando Select

    acho que posso ajudar com uma das questões... zionxxx, a lógica aqui seria algo como dizer à query que: selecione todos os funcionários onde a data de solicitação seja igual a 10/10/2008, mas(E) não exista resultado da seleção de solicitação deste funcionário na data igual a 15/10/2008. select F.* from TB_FUNCIONARIO F, TB_SOLICITACAO S where F.MATRICULA = S.MATRICULA and DATA_ABERTURA = '2008-10-10' and not exists(select S2.MATRICULA from TB_SOLICITACAO S2 where S2.MATRICULA = F.MATRICULA) and DATA_ABERTURA = '2008-10-15') Abraços
  14. - Extensões do Delphi (Delphi 7 e anteriores. As versões posteriores tem mais outras extensões)- Filename Extensions in Delphi - Delphi File Extensions dan_visualdm, a princípio, apenas o .exe que você não citou aí - é o executável ;)Em alguns casos, você pode precisar levar também alguma DLL (que você tenha criado ou que já exista e que seja utilizada pelo seu programa), bem como pode ser necessário a instalação de dos drivers BDE, ODBC, .... (vai depender do que você vai usar). Sugiro que você procure por apostilas para iniciantes ou livros que possam lhe dar estas noções básicas. Não é uma boa idéia você querer programar em uma determinada linguagem, sem conhecer o básico sobre ela e a ferramenta de desenvolvimento escolhida. Abraços
  15. Micheus

    Links

    Alguns Links da minha lista de favoritos... Relatório com Fortes Report - Fortes Report - Tutorial (ref. Linha de Código) Controle de acesso às opções de menu do programa - Delphi: Controle de Acesso - TreeView para gerenciamento de usuários (ref. Linha de Código) Delphi "falando a lingua do Windows Messenger" - MSN Messenger in delphi (ref. HowToDoThings.com) Explorando o DBGrid - Adding components to a DBGrid (ref. About.com) - Using the TDBGrid component (ref. About.com) Delphi "falando" (Speech) - Installing the Microsoft SAPI speech SDK in Delphi (ref. ExceleTel) - [o código continua no link ao final da página] - Texto to Speech (ref. Delphi for Fun) - Use the Microsoft Speech API (ref. DelphiTricks.com) - [simples, apenas usando OLE] Controle de instâncias abertas do programa - Como detectar se a sua aplicação está rodando sobre WTS e saber qual é a ID da sessão (ref. Marcos Dellantonio) - Controlling the number of application instances (ref. About.com) - [post baseado neste artigo] Variados - Delphi tips and FAQs (ref. Scalabium Software) - [173 dicas classificadas]
  16. James Morais, desde que você saiba qual(is) o(s) campo(s) de relacionamento, não deve ser problema fazer esta ligação.Dê uma olhada nos links que mencionei neste post - acredito que esta deverá ser a sua abordagem ao usar componentes query. Abraços
  17. cristofermartins, voce consegue entender o que você está perguntando? :unsure: Tente ser claro em seus questionamentos para aumentar suas chances de obter ajuda e a resposta certa. ;) Imagino que você esteja querendo saber como declarar a classe TClass2 de modo que você já possa utilizá-la na definição da propriedade Backpack da classe TClass1 que é declarada antes dela. Se for isto, a resposta é declará-la por antecipação, ou seja, você declara apenas o cabeçalho dela antes da classe que fará seu uso e depois seque com a declaração normalmente. Exemplificando: Type TClass2 = Class; // <<< AQUI está a declaração por antecipação TClass1 = Class procedure TesteClass; public Backpack :TClass2; end; TClass2 = Class // <<< AQUI segue a declaração normalmente procedure Teste; end; var Class:TClass1; ...obs.: por uma questão de convenção de nomenclatura, não é apropriado que você use como nome da variável TClass - use Class ou Class1. Veja se era isto. Abraços
  18. Estas "reclamações" evitam muitos erros de execução que em VB podem ocorrer (dependendo do programador). Voce não disse o que queria resolver. Então, sabendo que a condição está correta e que o then "deveria" ser executado, imagino que você esteja depurando o programa e percebeu algo de "errado". Vejamos, basicamente o código Delphi: procedure TForm1.Button10Click(Sender: TObject); var X, Y, a,b,D,e: Integer; begin x := 3; y := 2; If (X > Y) {Condição - SE X for maior que Y} Then Begin a := 1; b := 1; d := 2; ShowMessage('Teste'); End { Repare que não tem ponto e vírgula por que "End" está antes do "Else"} Else Begin d := 1; e := 2; End; end; é o mesmo do código VB (ele não deixa colocar o then abaixo do if): Sub Botão1_Clique() Dim x, y, a, b, d, e As Integer x = 3 y = 2 If (x > y) Then ' {Condição - SE X for maior que Y} a = 1 b = 1 d = 2 End ' { Repare que não tem ponto e vírgula por que "End" está antes do "Else"} Else d = 1 e = 2 End If End Sub Aqui acho que chegamos a uma boa diferença entre os dois. Eu diria que a m..., quem faz é o VB. Se você olhar para o código, do ponto de vista do resultado final (que será seu executável), o que estará sendo processado de útil a partir das atribuições feitas à a, b e d? A resposta é nada! O Delphi ao otimizar o código, percebe que o "programador" cometeu este deslize e simplesmente ignora esta "coisa sem sentido". Voce deve ter observado que ao compilar o programa (CTRL+F9), aparecem na "régua" à esquerda do editor, pequenas bolinhas azuis as quais representam linhas para as quais foram gerados código. Acrescente, ao final da procedure, a linha: ... End; ShowMessage('Valor da variável "a": ' +IntToStr(a)); // <<< ESTA LINHA end;e compile. Você verá que já teremos uma bolinha azul ao lado da linha de atribuição a := 1;, pois agora, estaremos fazendo uso desta variável. Mas se você achar que realmente fizer questão de gerar código para estas linhas sem finalidade, acesse as opções do projeto e na guia Compiler, no quadro Code Generation, desative a opção Optimization. Abraços
  19. explicando...Este procedimento garante que qualquer conversão de campos tipo data para string seja feito utilizando este formato, ou seja, a data 1/2/2009, será convertida em string 01/02/2009 (usando as funções de formatação). A únit do seu projeto a que o colega se refere é a do seu form principal. Voce pode colocar esta atribuição no evento OnCreate do form (para não complicar muito). realmente paulobergo, é quase impossível a leitura do código :)Também poderíamos sugerir ao colega dan_visualdm que use parametrização (há vários tópicos sobre este assunto). Na verdade não deve ter ficado não.Para modificar a forma como um campo do dataset, do tipo data, é apresentada na tela, voce deve usar a propriedade DisplayFormat do campo (field) em questão e, para este caso, a string de formatação seria: dd/mm/yyyy. Já a propriedade EditMask é uma máscara utilizada para formatar a edição do campo. Vai definir a formatação da entrada de dados, que tipo de caracteres são aceitos e coisas assim (na janela Object Inspetor, tecle F1 nesta propriedade e veja o que mostra o help). Esta aparência é fruto da máscara de edição. Quando você deixa o campo, ele deve estar ficando formatado corretamente.A forma de você contornar isto na sua atribuição (concatenação) é remover estes caracteres através do uso da função StringReplace. Por exemplo, para retornar uma string com o texto do DBEdit2 sem o caracter "_", substituimos ele por um "nada" (ou seja, removê-lo), usariamos assim: texto_sem_sublinha := StringReplace(DBEdit2.Text, '_','', [rfReplaceAll]); Abraços
  20. -= NemesiS =-, ao que me parece você não precisa de nada muito complicado.Basta que você parametrize sua query qrCidades. No SQL você dever ter algo parecido com isto: select id, cidade from tb_cidades where uf = :uf order by cidadeobserve o acréscimo da cláusula where. na propriedade DataSource do dataset qrCidades, você seleciona o datasource dsCidades que é de onde será obtido o valor do parâmetro - uf. Com isto, ao mudar a cidade no combo, o resultado no DBGrid será automaticamente modificado. O princípio é exatamente o mesmo que já tentei detalhar nestes outros dois tópicos: - Selecionar Linhas no DBGrid, Através de seleção em outro DBGrid - somar valores de uma dbgrid, mestre / detalhes Abraços
  21. James Morais, explique melhor o que você está querendo fazer.O que você quer dizer com "linkar os DataSets"? "Linkar" eles a quê exatamente? Abraços
  22. Micheus

    CreateMutex

    Churc, permita-me dar um pitaco por aqui... Este é um efeito colateral bem chato.Um artigo interessante que vi faz pouco tempo, detalha bem as nuances sobre a verificação de instancias do programa em uso: Controlling the number of application instances uma delas é o fato de que esta abordagem mais simples pode não ser segura, pelo fato de eventualmente você ter duas aplicações delphi na máquina e que tenham a classe do form principal com o mesmo nome. Ainda há outra questão a ser lembrada que é quando o programa é executado via terminal server, quando este método não é viável, já que todas as instâncias solicitadas pelos usuários seriam iniciadas na mesma máquina (o servidor). Mas isto é uma situação eventual (imagino que você não se enquadre nesta situação). Voltando a questão, e mantendo o método simples, dá para adaptar uma parte do código citada no artigo onde é criada uma mensagem customizada que será enviada para todas as aplicações e que, conforme programada, no seu código será entendida e utilizada para chamar o método Restore do objeto Application. Código do projeto sugerido pelo amigo Churc ajustado: var hMutex: THandle; begin hMutex := CreateMutex(nil, True, 'TFL'); MyMsg := RegisterWindowMessage(PChar('TFL')); // criação da mensagem customizada if (hMutex <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then begin SendMessage(HWND_BROADCAST, MyMsg, 0, 0); // enviando a mensagem para todas as aplicações Exit; end; Application.Initilize; .... // e lá embaixo na última linha antes do end. CloseHandle(hMutex); //Pra liberar esse Mutex ou seja, o programa foi fechado e pode abrir um outro ... Na unit do form principal: type TFormPrincipal = class(TForm) : private procedure WndProc(var Message: TMessage); override; : end; var FormPrincipal: TFormPrincipal; MyMsg: Cardinal; // handle da mensagem customizada inicizada no projeto : procedure TFormPrincipal.WndProc(var Message: TMessage); begin if Message.Msg = MyMsg then begin Application.Restore; // restaura aplicação Message.Result := 1; // mensagem processada end else Inherited; end; : end. Abraços
  23. Compartilhar o conhecimento é também um exercício solidariedade. No próximo ano, vamos tentar pôr um pouco mais deste sentimento em nossos corações e trazê-lo para o nosso dia-a-dia. (É tempo de solidariedade) Desejo um Feliz Natal e um ótimo Ano Novo a todos os colegas da sessão Delphi/Kylix e que no próximo ano possamos aumentar e estreitar, ainda mais, os laços desta amizade virtual que temos aqui. Grande abraço.
  24. duarte_valente, parece-me que o erro ser refere a esta parte do seu código:... int vit_quadrados(int*tab) { char tab[81]={0}; ... Veja que a função tem como parâmetro tab sendo ponteiro de inteiros, enquanto que ao declarar a variável local tab, você a "redeclara" como sendo um vetor de caracter. Reveja esta parte do código. Abraços
  25. Micheus

    Matriz

    Beraldo, atribuir até que não dá, mas e quanto a copiar?O uso da função memcpy, deveria ter esta finalidade. (considerando duas matriz de igual definição) Abraços
×
×
  • Criar Novo...