Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Livio Neiva, este local poderia se o evento OnCreate do seu DataModule (DM)
  2. Micheus

    Relatórios

    VDLR, o que você quer é algo parecido com este relatório do robinhocne, não é?
  3. robinhocne, observe que na banda detalhe, que normalmente corresponde a uma linha de registro do resultado de sua consulta, você terá que apresentar na verdade mais que uma já que você quer apreseentar vários dias.Resumindo, você quer apresentar uma matriz, enquanto o usual (normal) é um vetor. Tem como fazer no quick, mas estou meio sem tempo para detalhar isto hoje. Se ninguém se habilitar, então tem que esperar um pouquinho. ;)
  4. Guinho.TI, acho que foi só uma distração sua. Na chamada a função você está passando a variável TextFile (arq) ao invés da string (linha). Então, troque: aff:=ansicontainstext(arq,'error'); por aff:=ansicontainstext(linha,'error'); Outra coisa, ao chamar Readln antes de entrar no while, você está jogando fora a 1ª linha lida, porque logo que entra no while, você chama novamente o Readln. A menos que você queira ignorar a 1ª linha, você dever remover o 1° Readln. Abraços
  5. Ok. Bom, está meio estranho, mas vamos ver se chegamos a algum lugar. A instrução SQL aparentemente não teria algum problema. Mas eu lhe sugeriria alterar esta parte: de: Sql.Add('where (Data >= :dt1) and (Data <= :dt2)'); para: Sql.Add('where Data between :dt1 and :dt2'); (* onde tem dt1 e dt2, ignore o "t" - coloquei porque senão aparece esta carinha -> :D) e de: ParambyName('d1').value := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtDtIni.Text)); ParambyName('d2').value := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtDtfin.Text)); para: ParambyName('d1').AsDateTime := StrToDate (TxtDtIni.Text); ParambyName('d2').AsDateTime := StrToDate (TxtDtfin.Text); A quetão de datas em queries é sempre problemática, porque há diferenças entre os vários bancos de dados. Por isso vivo dizendo que a melhor opção é utilizar a parametrização. Você até está utilizando este método, mas não da forma como "prego". Voce está convertendo a data digitada (string) para o tipo TDate e em seguida convertendo novamente para uma String formatada "dd/mm/yyyy", passando para o parâmetro através de Value (variant). Seria equivalente a dizer que você quer substituir os parâmetros pelo texto formatado - e isto não é o desejável. Por ex., observe que no MySQL você deveria passar a data do tipo string com o formato yyyy-mm-yy, do contrário não funciona. O lance é utilizar parâmetros e passá-los no tipo que eles realmente são, no seu caso Date ou DateTime. Se o problema for fruto do que expliquei aqui, então agora deverá estar resolvido seu problema. Verifique. ============================================ robinhocne, visualizando o lay-out do relatório, vem então algumas perguntas: - Como você definiu a estrutura de bandas do seu relatório? - Você está utilizando a propriedade Colunms? - Você está controlando a impressão na mão?
  6. Luiz Ahumada, o que seria este não está funcionando? Não está compilando? Ocorre algum erro de execução? Não acontece nada? É muito importante que você seja o mais claro possível. Mesmo assim, desde que a propriedade Lines (TMemo) e Items (TComboBox) são exatamente da mesma classe, você deveria poder usar das seguintes maneiras: memo.Lines.Assign(combobox.Items); ou memo.Lines.Text := combobox.Items.Text; sem a necessidade de qualquer uso de for - simplesmente atribuição direta.
  7. Livio Neiva, voce não citou que banco está utilizando mas, (indiferente a isto) que eu me lembre, não seria possível acrescentar a informação "ASC" ou "DESC" ao campo a ser utilizado como índice. A propriedade IndexFieldNames requer apenas nome de campos existentes no dataset. Em tabelas Paradox, por exemplo, esta propriedade aceita estritamente campos compatíveis com os índices criados para a tabela em questão, porém usando SQLServer, lembro-me que isto era indiferente (aparentemente o driver BDE criava uma consulta SQL ordenando de acordo com o campo informado). Uma alternativa que pode ser estudada é a utilização de queries, onde então você poderia utilizar o sufixo de ordenação. Se for o caso, veja se este post lhe ajuda (alta adicionar o texto ASC ou DESC conforme sua variável) Abraços
  8. robinhocne, ficamos na mesma <_< Veja o que eu postei antes: A questão é: lá na propriedade DataSet do seu componentes Quickrep1, localizado no seu form FrmPraticaSemanal, você selecionou a query qryIza proveniente do datamodule DtmIza?
  9. robinhocne, pelo resultado parece que seu dataset não está sendo movido. Se você está utilizando quickreport, você por acaso não esqueceu de ligar sua consulta a propriedade DataSet do seu QuickRep?
  10. Principalmente quando você cria units, é conveniente lembrar que devem ser introduzidas as units conforme necessário. Neste caso a função StrToInt está declarada na unit SysUtils, devendo esta ser adicionada na cláusula uses da sua unit. Na dúvida, coloque o cursor sobre a função e tecle F1 (ajuda), serão mostrados da função bem como em que unit ela está declarada. Abraços
  11. No artigo Exportar dados de um DBGrid para o Excel existente em Tutoriais & Dicas, tem um exemplo bem simples que poderia ter sido utilizado como referência para localização do problema - se observado com cuidado. Ocorre que faltou criar a planilha (WorkBook):
  12. Pirambu!, está quase certa. Voce tem que usar o UPPER na cláusula WHERE e passar o parâmetro já em upper também: sql.add('select campo from tabela where UPPER(campo) like :A'); parambyname('A').value:= '%' + AnsiUpperCase(edit.text) +'%';
  13. Micheus

    Conexões Com Oracle

    aparentemente sim, desde que que na lista da propriedade Drivers do TSQLConnection apareça Oracle.
  14. fernandopiccini, aparentemente sua procedure deveria por padrão gerar uma exception no Delphi, utilizando o dialogo padrão, mas como a mensagem é mostrada com ShowMessage, então você deve estar tratando a exceção. A título de teste, deixe a exceção padrão mostrar a mensagem (não use o ShowMessage) e observe se ela também está com a falta de 1 caracter.
  15. Não dá para fazer o trabalho por você ;) Tente implementar alguma coisa e coloque aqui suas dúvidas, daí o pessoal vai ajudando... Abraços
  16. felipe, qual a versão do InterBase que você está utilizando? Se você tiver acesso ao código fonte dos programas, uma possível solução poderia ser o uso de ALIAS. A versão 7.5 tem o recurso, que utilizo com o FireBird. Você define num arquivo de configuração do banco, chamado "aliases.conf" (localizado do diretório de instalação do banco) um apelido para seu banco de dados e o caminho onde ele se encontra (localmente - no servidor). Por ex. em meu caso, o FireBird foi instalado em C:\FreeWare\Firebird\Firebird_1_5 e nesta pasta está o tal arquivo com o seguinte conteúdo: Daí na conexão do banco de dados, no delphi, no local do caminho completo do arquivo você usa este ALIAS. Dei uma pesquisada para ver se achava alguma explicação mais apropriada a seu caso, e encontrei dois posts que talvez possam ser útil neste caso: Utilizando Database Alias no InterBase 7.5 e no FireBird 1.5 (ref. DevMedia) Consigo ler e escrever no servidor Linux, o samba está ativo e o Interbase também. Alguém pode me ajudar? (ref. VivaLinux) Mas se a questão ficar restrita a configurações no Linux, talvez seja o caso de mover este tópico para a seção GNU/Linux Abraços
  17. Boa Churc. Talvez o que ainda possa "pegar" é ter que esperar o serviço encerrar, daí teria que verificar a conclusão do encerramento serviço. (apesar que normalmente não é demorado) Pode não ser o caso do nosso colega Pedro. Pedro, vale ainda a observação que você só vai encerrar o serviço, se tiver direitos de adiminstrador, já que este é um processo é startado pelo sistema. Abraços
  18. Pirambu!, desculpe a demora. Eu não achei um meio de lhe explicar como fazer, então implementei a rotina. Não sei se é a melhor ou se é 100% infalível (tem que testar), mas funciona de acordo com o "figurino". O fato de você utilizar uma estrutura diferente daquela inicialmente comentada, dificultou um pouco as coisas. Quanto a consulta SQL, utilizando as 4 tabelas, a que você apresentou não retorna o resultado adequadamente. Pelo menos com a base que montei e os testes que fiz. Ela ficou assim: select T1.Her1ID, T2.Her2ID, T3.Her3ID, T4.Her4ID, Nome1, Nome2, Nome3, Nome4 from Tabela4 T4 left join Tabela3 T3 on (T4.Her3ID = T3.Her3ID) left join Tabela2 T2 on (T3.Her2ID = T2.Her2ID) left join Tabela1 T1 on (T2.Her1ID = T1.Her1ID) order by T1.Her1ID, T2.Her2ID, T3.Her3ID, T4.Her4ID Com os dados que coloquei nas tabelas, este é o resultado:1|1|1|1|Raimundo (Diretor) |Pedro (Gerente) |Francisco (Supervisor) |Soares (Encarregado) | 1|1|1|2|Raimundo (Diretor) |Pedro (Gerente) |Francisco (Supervisor) |Antônio (Encarregado) | 1|1|3|4|Raimundo (Diretor) |Pedro (Gerente) |Jacinto (Supervisor) |Dionísio (Encarregado)| 2|2|2|3|Tonico (Diretor) |Mário (Gerente) |Tonico (Supervisor) |Josefina (Encarregada)| O código está logo abaixo. Eu utilizei uma função com recursividade para fazer a navegação entre os "ramos da árvore". Veja se com os comentários no código, você consegue entender o funcionamento. procedure TForm1.Button1Click(Sender: TObject); // a função "InsertNode" retorna o nó recém inserido function InsertNode(NodeLevel :Integer; // indica o nível a ser avaliado ParentNode :TTreeNode; // nó pai NodeName :string) :TTreeNode; // nome do nó var LocalNode :TTreeNode; begin // utilizamos uma variável local para não // manipularmos o parâmetro passado LocalNode := ParentNode; if LocalNode <> nil then begin // se o nível do nó é inferior ao desejado if LocalNode.Level < NodeLevel then begin // verificamos se o próximo nível ainda não existe if LocalNode.GetFirstChild = nil then // não existindo, inserimos o novo nó Result := TreeView1.Items.AddChild(ParentNode, NodeName) else // existinhdo, chamamos recursivamente o procedimento // passando o primeiro nó do próximo nível Result := InsertNode(NodeLevel, LocalNode.GetFirstChild, NodeName); end else begin // salvamos em result o conteúdo do nó antes // de buscarmos o próximo Result := LocalNode; // buscamos os próximo nó "irmão" (no mesmo nível) LocalNode := LocalNode.GetNextSibling; if (LocalNode <> nil) and (LocalNode.Text = NodeName) then begin // há um nó com o texto encerramos a procura e saímos Result := LocalNode; Break; end; end; // se não há nó com o nome, adiciona ele if (LocalNode = nil) and (Result.Text <> NodeName) then Result := TreeView1.Items.Add(Result, NodeName); end; end else if NodeLevel = 0 then // adiciona o nó pai na raiz Result := TreeView1.Items.Add(nil, NodeName); end; var NodeAnt :TTreeNode; begin NodeAnt := nil; TreeView1.Items.Clear; TreeView1.Items.BeginUpdate; QryHierarquia.Open; while not QryHierarquia.EOF do begin // começamos sempre pela raiz -> GetFirstNode NodeAnt := InsertNode(0, TreeView1.Items.GetFirstNode, QryHierarquiaNome1.Value); // após inserido o nó no 1º nível, inserimos o 2º a partir deste -> NodeAnt NodeAnt := InsertNode(1, NodeAnt, QryHierarquiaNome2.Value); // após inserido o nó no 2º nível, inserimos o 3º a partir deste -> NodeAnt NodeAnt := InsertNode(2, NodeAnt, QryHierarquiaNome3.Value); // após inserido o nó no 3º nível, inserimos o 4º a partir deste -> NodeAnt InsertNode(3, NodeAnt, QryHierarquiaNome4.Value); // avançamos para a próxima linha no resultado QryHierarquia.Next; end; QryHierarquia.Close; TreeView1.FullExpand; TreeView1.Items.EndUpdate; end; Espero que funcione corretamente para o que você quer fazer. Fica aqui anexo as tabelas teste e o código fonte. Abraços Project1.zip
  19. pedro, falando sobre o FIREBIRD, se o servidor do banco de dados está executando como um serviço em um servidor com SO de tecnologia NT (como Win2K, XP, ...), este procedimento só poderá ser executado por um administrador. Excluído este entrave, você poderia executar o utilitário "instsvc.exe" que está localizado na pasta bin no local onde foi instalado o servidor. A pasta de instação do servidor firebird você pode obter do registro do windows, abrindo a chave "HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances" e lendo o valor de "DefaultInstance". Bastaria então concatenar a pasta bin. Por ex., minha instalação está na pasta "C:\Arquivos de programas\Firebird\Firebird_1_5\"; concatenando "bin" e o nome do programa "instsvc.exe", teríamos a linha de comando a ser executada: "C:\Arquivos de programas\Firebird\Firebird_1_5\Bin\instsvc.exe" os parâmetros seriam: start (iniciar serviço) ou stop (parar o serviço) É o que eu poderia lhe sugerir sobre a questão. Abraços
  20. Samuelsjn, Temos alguns problemas aqui. Vejamos: 1) A mensagem reclama da inexistência de um parâmetro chamado "nome". Porém, vê-se que você tenta passar um parâmetro chamado "cidade" (ver em ParamByName); 2) Usando um parâmetro "nome" ou "cidade", um deles deveria estar declarado na cláusula "where", a qual não foi utilizada em sua consulta; 3) Uma instrução do tipo SELECT é executada em um componente query através do método "Open". Utiliza-se "ExecSQL", para comandos SQL que não retornem linhas (resultado da consulta), ou seja, UPDATE, DELETE, CREATE, DROP, ... ; 4) Como esta instrução SQL é adicionada a propriedade SQL da query em tempo de execução, você não pode deixar de limpá-la antes de fazer a nova atribuição. Resumindo, antes de chamar o método SQL.Add(..) você deve chamar SQL.Clear. como deveria ficar: DataModule1.Query.Close; DataModule1.Query.SQL.Clear; DataModule1.Query.SQL.Add('select * from fornecedores where cidade = :cidade'); DataModule1.Query.Parameters.ParamByName('cidade').AsString := edtNome.Text; DataModule1.Query.Open; Observe que na cláusula "where", testar com "=" significa que deverá haver na tabela uma cidade "escrita" exatamente como o parâmetro informado. Pode haver necessidade de converter para upcase os valores a serem testados ou, se for uma pesquisa parcial, ser utilizado o LIKE. Abraços
  21. Micheus

    Conexão Gprs

    Caso alguém queira saber do que se trata: GPRS - General Packet Radio Service (ref. Wikipedia) outro GPRSHelp Tópico que pode ser acompanhado: GPRS Setup Programaticaly (ref. OpenNETCF)
  22. este tipo de consulta não resultaria no que você procura? SELECT compara_email_novos.email FROM compara_email_novos WHERE not exists(select 1 from compara_email_geral where compara_email_geral.email = compara_email_novos.email);
  23. é isto mesmo que o Jhonas disse. Mas, só para ter certeza do que você quer, qual seria o objetivo de executar uma função em tempo de compilação?Por acaso estaria querendo se referir a inclusão de algum "plugin" ao delphi?
  24. Veja o exemplo que o felipe citou: s:='update estoque set qtd=qtd-'+dm.VendaQuery.fields[1].asstring+' where cod_mercadoria='+dm.VendaQuery.fields[0].asstring; dm.auxquery.sql.clear; dm.auxquery.sql.add(s); Percebeu? Uma instrução UPDATE atribuida a propriedade SQL da sua query. sintax da instrução UPDATE: UPDATE nome_table // ** esta indica em que tabela ocorre o update (atualização) SET nome_campo1 = novo_valor1[, nome_campoN = novo_valorN] // ** esta faz a atribuição. WHERE nome_campo = algum_valor //** esta linha limita a ação do update
×
×
  • Criar Novo...