
DanielR
Membros-
Total de itens
50 -
Registro em
-
Última visita
Tudo que DanielR postou
-
Boa noite Pessoal! Bom tenho duas aplicações uma roda o sistema administrativo e a outra é o sistema de Faturamento com Emissão de Nota Fiscal Eletronica. O banco de dados é o mesmo para as aplicações. No banco tenho diversas tabelas entre elas a tabela DOCUMENTO e DOCUMENTO_ITENS. Essa ultima tem uma trigger que ajusta o estoque. Na aplicação 1 quando faço um movimentos de estoque beleza. Otimo Funciona! Na aplicação 2 o documento eo itens são gravados porém a trigger não dispara. Estou pesquisando o porque da trigger não disparar, mas até agora nada! Se encontrar algo, posto aqui na sequencia. Obrigado pela ajuda
-
Bom dia pessoal. Bom ao executar nosso aplicativo este erro esta acontecendo 'Sem disco' (titulo da caixa) 'exception processing message c00013 ...' (msg) . O Engraçado é que nas pesquisas de internet temos muitas soluções diferentes para o mesmo problema. O Curioso é que se nós tiramos um 'determinado' cd da unidade de disco da maquina do cliente o sistema NÃO funciona e se colocarmos o tal 'CD' o nosso sistema funciona. Fasculhamos o cd por arquivos dos mais diversos e encontramos um MIDAS.DLL o qual nosso sistema tb utiliza, porém na pasta windows\system 32 o midas tb esta lá , logo não 'estaria em falta'. Bom se alguém passou por algo parecido e poder poder ajudar a solucionar agradeço, de qualquer forma estou no garimpo a procura do ouro, assim q achar eu posto aqui! Obrigado!
-
Me perdoe esqueci de te mandar isso aqui ainda para completar. 5º quando você chama o metodo na persistencia é esse que é executado ( um exemplo) function TClientesPst.SQL(filtro: string): OleVariant; var query : TIBDataSet; begin query := TIBDataSet.Create(nil); try try Query.database := self.conn; // Query.Close; Query.SelectSQL.Clear; // aqui você coloca o seu Select generico Query.SelectSQL.Add('SELECT pessoas.*, clientes.* '); Query.SelectSQL.Add(' FROM '); Query.SelectSQL.Add(' PESSOAS '); Query.SelectSQL.Add(' INNER JOIN CLIENTES ON (PESSOAS.ID=CLIENTES.ID)'); Query.SelectSQL.Add('WHERE '); Query.SelectSQL.Add(' (1 = 1) '); // aqui ele verifica se o filtro é vazio ou não para então executa-lo if filtro<>'' then query.SelectSQL.Add('and '+ filtro); query.Open; result := Tutil.DataSetToOleVariant(query); except on e: exception do begin Assert(false,''); Tutil.doTrataException('',E); raise; end; end; finally; Query.Close; Query.Free; end; end; { eu tenho uma classe de utilidades gerais quando preciso dessas utilidades posso estar chamando diretamente } class function Tutil.DataSetToOleVariant(DS: TIBDataSet): OleVariant; var loProvider : TProvider; begin loProvider := TProvider.Create(nil); try loProvider.DataSet := DS; Result := loProvider.Data finally loProvider.Free; end; end;
-
Ao que observei sua dbgrid já esta no formulario. Tche eu faria um pouco diferente, como você disse que esta fazendo uma programação Orientada a Objeto eu criaria uma classe base e nela colocaria a conexão com o banco de dados, as outras classes seriam filhas da classe base, assim você esquece deter problemas com conexão. Outra coisa, o dbgrid ta ligado a um DataSouce que esta ligado a um ClientDataSet ai eu criaria dentro do obejeto cliente uma consulta generica sem filtros no banco de dados (podendo é claro a aplicação do filtro quando quiser , assim poderei usar minha consulta qtas vezes quiser e em diversos casos, com filtros diferentes) vamos imaginar 1º crio minha classe base - com uma propriedade do tipo da minha conexão com o banco TBaseClass = Class private fConn: TIBDataBase; function get_conn: TIBDatabase; protected public constructor create(loconn:TIBDataBase); virtual; property conn:TIBDatabase read get_conn; end; 2º crio minha classe de controle filha da classe base // classe de controle TBaseControl = class(TBaseClass) protected function Incluir:integer; virtual; abstract; function Alterar:integer; virtual; abstract; function Excluir:integer; virtual; abstract; end; 3º Crio minha classe Cliente filha de TBaseControl que é filha de Tbaseclass o proposito de você usar objetos é justamente você poder utilizar informações comuns a todos logo minha classe TCliente já terá os metodos Incluir, alterar e excluir NÃO implementados mas a disposição e tb a coneção com o meu Banco TCLiente = Class(TBaseControl) private Fiid : integer ; Fcnome : string ; protected function get_id: integer; function get_nome: string; procedure set_id(const Value: integer); procedure set_nome(const Value: string); public constructor create(loconn:TIBDataBase); override; (veja que para chamar essa classe o construtor pede uma conexão sempre) destructor destroy; override; property id : integer read get_id write set_id ; property nome : string read get_nome write set_nome ; // metodos function Incluir:integer; override; function Alterar:integer; override; function Excluir:integer; override; function getContatos: OleVariant; procedure doValida; virtual; (Aqui q queria chegar. observe este metodo, ele vai para a classe de persistencia e executa a consulta no banco retornando um olevariant) function sql(filtro:string):OleVariant; published end; implementation // olha como fica a chamada da consulta no banco // não estou falando da camada de persistencia onde esta a consulta genérica // o resultado disso é um dado olevariant; function TCLiente.sql(filtro: string): OleVariant; var loCliente: TCLientePst; //pst vem de pesistencia begin loCliente:= TCLientePst.create(self.conn); try result := loCliente.SQL(filtro); finally loCliente.free; end; end; 4º Ta, agora você volte para a tela de onde você quer chamar a consulta e fassa assim;: Function TfrmCompraVenda.doClientDataSet (filtro,filtro2:string):OleVariant; var loCliente : TCliente; begin locliente := TCliente.Create(conexao); try ClientDataSet .Close; ClientDataSet.data := doClientDataSet (' cliente = 10'); (Veja que é só mudar o filtro e teremos novos dados) ClientDataSet .Open; finally loCliente.free; end; end; // se teu DBGrid já esta ligado a um DS e o DS ligado ao CDS, pronto os dados já estarão sendo exibidos. // sobre a conexão, você deve ter instanciado um objeto para fazer a conexão e atrazves de um arquivo ini ou direto você configurou. pronto // agora quando você abre o sistema você deve setar a conexão dizendo para a tua classe base quem é tua conexão Cara espero ter ajudado indiretamente, como derrepente você esta no começo do sistema , então quem sabe vale a pena pensar um pouco sobre o que falei.
-
Bom pessoal foi cruel mas o resultado foi positivo. Pra quem esta acostumado com um componente de impressão so texto como o rdprint, logo um quick report da um pouco de medo, mas nada como umas aulas, dedicação e muita horas para testar e tirar todas as suas duvidas. Bom vou tentar ser breve. 1. o quick report nos oferece bandas para impressão de dados basicas: pageheader, pagefooter, columnheader, title, detail e sumary 2. Na solução do meu problema usei apenas duas delas (pageheader, pagefooter) 3. o quick report nos oferece uma banda na paleta chamada qrsubdatail ( no meu caso usei duas tb) 4. Para cada uma banda qrsubdetail você pode ter um cabeçalho e um rodapé (usei o recurso) 5. a chave começa aqui. a ) você deve ter uma query com os dados do pedido e itens do pedido b ) você deve ter uma outra query com os dados das parcelas do pedido c ) você deve definir o quickrepor.dataset := nil ( como nulo ) pois teu condutor de dados são varias tabelas d ) você deve definir no primeiro qrsubdetail quem é o condutor de dados e quais dados (aqui no exemplo é o pedido e seus itens) QRSubDetail1.Master := suaquerydepedido QRSubDetail1.DataSet := suaquerydepedido e ) você deve definir o segundo qrsubdetail quem é o condutor de dados dele e quais dados serão impressos nele QRSubDetail2.Master := suaquerydepedido ( para que a cada termino de imp de pedido as parcelas deverão ser impressa) QRSubDetail2.DataSet := suaquerycomParcelas pronto. é isso (basicamente) meu relatorio ficou assim Cabeçalho do Relatorio Titulo do Relatorio==== ==Pedido1====== ===Item 1 do pedido ==== ===Item 2 do Pedido ==== ===Item 3 do Pedido ==== ===Total============ ==Formas de Pgto === parcela 1========= === parcela 2========= === parcela 3========= ==Pedido2====== ===Item 1 do pedido ==== ===Item 2 do Pedido ==== ===Item 3 do Pedido ==== ===Item 4 do Pedido ==== ===Total============ ==Formas de Pgto === parcela 1========= === parcela 2========= Rodapé do Relatório=== Sua query de pedido poderá comportar todos os pedidos por um determinado periodo, um unico pedido, e ai va depender dos filtros que você deseja aplicar. Bom pessoal espero ter ajudado! Daniel
-
Pessoal já fiz diversas tentativas e nada. vou tentar explicar se estiver fazendo algo de errado deem uma luz. esse é meu select principal: SELECT DOCUMENTOS.EMPRESA, DOCUMENTOS.CODIGO, DOCUMENTOS.TIPO_DOC, DOCUMENTOS.NUMDOC, DOCUMENTOS.TIPO_CUSTO, DOCUMENTOS.VALORTOTAL, DOCUMENTOS.DATA_INCLUSAO, DOCUMENTOS_ITENS.ITEM, DOCUMENTOS_ITENS.LOCAL, DOCUMENTOS_ITENS.QTD, DOCUMENTOS_ITENS.VALOR_DESCONTO, DOCUMENTOS_ITENS.VALOR, DOCUMENTOS_ITENS.VALOR_TOTAL, CIDADES.NOME as NOME_CIDADE, UF.SIGLA, PESSOAS.NOME as NOME_PESSOA, PESSOAS.ENDERECO, PESSOAS.NUMERO, PESSOAS.BAIRRO, PESSOAS.CEP, PESSOAS.P_REFERENCIA, ITENS.NOME as DESCRICAO FROM DOCUMENTOS INNER JOIN DOCUMENTOS_ITENS ON (DOCUMENTOS.EMPRESA=DOCUMENTOS_ITENS.EMPRESA) AND (DOCUMENTOS.CODIGO=DOCUMENTOS_ITENS.DOCUMENTO) INNER JOIN DOC_RECEBER ON (DOCUMENTOS.EMPRESA=DOC_RECEBER.EMPRESA) AND (DOCUMENTOS.CODIGO=DOC_RECEBER.CODIGO) INNER JOIN PESSOAS ON (DOC_RECEBER.CLIENTE=PESSOAS.ID) INNER JOIN UF ON (PESSOAS.ID_UF=UF.ID) INNER JOIN CIDADES ON (PESSOAS.ID_CIDADE=CIDADES.ID) INNER JOIN ITENS ON (DOCUMENTOS_ITENS.ITEM=ITENS.CODIGO) WHERE (1 = 1) AND DOCUMENTOS.EMPRESA = idempresa AND DOCUMENTOS.CODIGO = codigo ok, aqui tenho a pessoa, o seu pedido, os itens do pedido e tudo funciona tranquilo. O relatorio sai a mil maravilhas. Agora desejo colocar neste mesmo relatorio as parcelas deste documento. Para isso coloquei um qrband como rsDetail linkado com outro cds que contem a seguinte instrução. SELECT PARCELAS.PARCELA, PARCELAS.DT_VCTO, PARCELAS.VALOR, PARCELAS.STATUS FROM DOCUMENTOS INNER JOIN PARCELAS ON (DOCUMENTOS.EMPRESA=PARCELAS.EMPRESA) AND (DOCUMENTOS.CODIGO=PARCELAS.CODIGO) WHERE (1 = 1) AND DOCUMENTOS.EMPRESA = idempresa AND DOCUMENTOS.CODIGO = codigo e ai começa os problemas, nada é impresso, testei por curiosidade todas as bandas disponiveis no qreport, só uma funcionou a qrSubDetail, porém o resultado não é bom, pois ele imprime todas as parcelas a cada detail do relatorio principal. (já tentei fazer uma unica instrução, porém não deu certo pois para cada parcela um conjunto de itens é gerado na consulta. um pedido com 2 itens e 2 parcelas, são gerados 4 linhas de resultado na query). Vejam a instrução: SELECT * FROM DOCUMENTOS INNER JOIN DOCUMENTOS_ITENS ON (DOCUMENTOS.EMPRESA=DOCUMENTOS_ITENS.EMPRESA) AND (DOCUMENTOS.CODIGO=DOCUMENTOS_ITENS.DOCUMENTO) INNER JOIN PARCELAS ON (DOCUMENTOS.EMPRESA=PARCELAS.EMPRESA) AND (DOCUMENTOS.CODIGO=PARCELAS.CODIGO) WHERE (1 = 1) AND AND DOCUMENTOS.EMPRESA = idempresa AND DOCUMENTOS.CODIGO = codigo Fato: Devo estar errando em algum lugar na hora de definir as bandas, podem me ajudar a descobrir? Obrigado!
-
Boa tarde pessoal, estou me quebrando com quick report (trabalho com o rdprint) e devo passar os relatorios todos para o quick report. Help! Problema: devo fazer um rel de pedidos onde tenho a pessoa o pedido os itens e as parcelas. A pessoa, o pedido e os itens beleza sem problemas. Porém mas as parcelas ta dificil. já coloquei banda de tudo quanto é jeito mas nada. ps. A tabela parcelas faz referencia a tabela documentos, logo se fizer um join tenho um registro de item para a mais para cada parcela. obrigado!
-
Inserindo dados numa tabela mysql via delphi
pergunta respondeu ao Ricardo25 de DanielR em Delphi, Kylix
Tche! Bom dia, tudo bom? quando temos um sistema com banco de dados firebird por exemplo você inevitalmente tera que fazer a conexão a este banco pelo aplicatvo que você esta criando. Então dentro do aplicativo você deve instanciar um componente de conexão (ele procura o banco e abre o banco para o uso) e outro componente para poder fazer os inserts, updates, selects e delets. Eu utilizo Interbase ( no delphi você encontra uma pelata interbase e lá tem esses componentes que estou te falando) ibdatabase (componente de conexão) ibtransaction (componente para abrir e fechar uma transação) ibquery (componente para fazer os inserts, delets e updates) Esses componetes recebem um nome dentro da sua aplicação e quando usado você coloca o nome de seu componente no lugar ''componentedeconexao'' o mesmo procede para o outros componentes. Sobre o tamanho do codigo para a inserção na minha opinião é minimo possivel, ali temos a conexão com o banco (necessario) a Instrução sql(necessario) os parametros (necessario) e a execução da instrução no banco(necessario) o retorno (para saber se deu certo). Daniel ps. Se você precisar de ajuda para dar-lhe mais detalhes me contate pelo email daniel@rodriza.com.br -
Inserindo dados numa tabela mysql via delphi
pergunta respondeu ao Ricardo25 de DanielR em Delphi, Kylix
Aqui vai um modelo basico para você gravar algo no banco de dados. espero ter ajudado. (Codigo no botão Incluir) AbreUmaTransação try componentequery.database := componentedeconexão; componentequery.sql.clear; componentequery.sql.add('insert campo1, campo2, campo3'); componentequery.sql.add('values'); componentequery.sql.add(':valor1,:valor2,:valor3'); componentequery.parambyname('valor1') := edt1.text; componentequery.parambyname('valor2') := edt2.text; componentequery.parambyname('valor3') := edt3.text; componentequery.prepare; componentequery.execsql; if componenteQuery.RowsAffected = 1 then comitaTransação else raise; except on e: exception do begin RollbackTransação showmessage('Impossivel Incluir ' + e.message); end end -
Calculando Valor Total em um ClientDataSet
pergunta respondeu ao DanielR de DanielR em Delphi, Kylix
Bom pessoal, como precisamos concluir determinadas tarefas, não tive escolha a não ser ir na base de dados e mudar o campo para um data normal e fazer o calculo dentro do delphi mesmo e depois jogar a informação pro banco normalmente. Porém a duvida persiste, estarei pesquisando e assim que tiver um retorno positivo postarei, assim como alguém de vocês souber, poste ai. Valeu T+ -
Como faço uma consulta com DbCombobox mostrando dados em DbGrid
pergunta respondeu ao Soninhamax de DanielR em Delphi, Kylix
Tche, eu faria um pouco diferente da forma que você fez hj. 1. criaria uma property publica no seu form onde esta o dbgrid chamada filtro :string; 2. criaria um metodo protected ou private chamado sql ou pesquisa neste metodo colocaria: function TSeuForm.SQL(filtro: string): OleVariant; var query : TIBDataSet; begin query := TIBDataSet.Create(nil); try try Query.database := seucomponenteDeAcesso Query.Close; Query.SelectSQL.Clear; Query.SelectSQL.Add(' select * from SuaTabela '); Query.SelectSQL.Add(' where 1=1 '); if filtro<>'' then query.SelectSQL.Add('and '+ filtro); query.Open; result := DataSetToOleVariant(query); // essa função você tem que criar except on e: exception do raise; end; finally; Query.Close; Query.Free; end; end; 4. cada vez que você escolhe o item no segundo form você monta uma string com o filtro que deve ser aplicado exemplo: você clicou no item 1 da lista do combo (que significa que codigo=1) então você vai alimentar a propriedade filtro que criamos no inicio com esse valor, assim: Seuform1.filtro := 'codigo = 1' (apenas exemplificando) logo abaixo você faz o seguinte: Seuform1.Seuclientedataset.close; Seuform1.seuclientedataset.data := SQL(Seuform1.filtro); Seuform1.seuclientedataset.open; pronto! toda vez que você clicar em pesquisar e depois escolher um cara na lista e clicar em ok a grid é fechada e aberta com os novos dados já filtrados. 5. função que você vai precisar function TSeuForm.DataSetToOleVariant(DS: TIBDataSet): OleVariant; var loProvider : TProvider; begin loProvider := TProvider.Create(nil); try loProvider.DataSet := DS; Result := loProvider.Data finally loProvider.Free; end; end; 6. adicionar as units Provider; IBCustomDataSet; Ps. Esse formato que te apresentei é melhor aplicado em uma programação Orientada a Objeto, onde você centraliza todas as ações bases em classes e formularios base, ajuda muito no rendimento da produção de um aplicativo novo principalmente. Se quiser ajuda posso estar te ajudando com aulas particulares. ou se preferir na net tem muito material de cursos gratuitos de POO (programação Orientada a Objetos). ex: www.istudar.com.br -
Banco de dados que não precisa instalar
pergunta respondeu ao danielrgoes de DanielR em Delphi, Kylix
tche não entendi bem o que você deseja fazer, se o pessoal estiver fora e precisam acessar uma base de dados, então deve banco deve estar em servidor e atraves da internet a tua aplicação irá salvar, buscar e excluir dados no banco. Daniel -
tche utilize o after open do clientdataset, ou seja depois de aberto você formata. exemplo: CDS.FieldByName(campo).DisplayFormat := 'R$ #,##0.00';
-
Tche, tu és obrigado a utilizar um banco de dados access? pergunto pois existe alternativas melhores no mercado para você trabalhar.
-
Boa tarde a todos! Pessoal é o seguinte. Tenho uma tabela no banco onde a cada linha tenho que calcular o valor total, bom defini que esta coluna sera calculada, ou seja cada insert, ou update o proprio banco de dados faz o calculo (funciona perfeitamente). Bom, na minha aplicação tenho um ClientDataSet que recebe as colunas da tabela e as exibe, porém não obtenho o calculo (mesmo colocando no evento oncalcfield a instrução) o ClientDataSet informa que o campo Valor_Total não pode ser modificado. Alguma idéia de como calcular no meu cliente data set sem ter que mexer no banco de dados? Obrigado pela ajuda!
-
Sim jonas, quando não se tem o formulario, não foi instaciado, etc.., etc.. Mas quando o formulario esta bem na sua frente e a um minuto atraz o programa rodou, e somento apos a inclusao de uma nova property na minha classe o sistema resolve me dizer 'Resource TfrmModalSaldosLocais Not Found''? Essa classe esta pronta desde ontem e funcionando, apenas estava agregando funcionalidades a ela, quando derrepente a mensagem. Bom pessoal o problema foi resolvido do jeito mais cruel que pode que pode exisitir, fazer tudo de novo. De qualquer forma Jonas o meu agradecimento pela sua explicação que é válida. pressionei adionar resposta antes de conluir. Como disse sua explicação esta correta é isso mesmo, mas como o meu formulário 'desapareceu' dos olhos do delphi em menos de 60s foi tempo em que fechei a aplicação publiquei uma nova property atribui um valor e dei F9 de novo. Sinceramente fiquei muito bolado com isso e com medo até de perder mais alguma coisa, na mesma hora o backup entrou em trabalho. Valeu Jonas
-
O que existe é uma fasta de recurso para abri-lo porem a classe exception ERESNOTFOUND não informa qual é o recurso que o sistema esta precisando. Fizemos os testes em todos os outros formularios modais e tudo funciona normalmente, excluimos esse form modal do projeto, criamos um novo (mesmo nome), o problema persiste. Que barra! Vamos continuar as pesquisas...
-
Bom dia a todos! Tchê a um minuto atraz tudo ok, rodando o projeto, abrindo o janelinha modal com os saldo solicitados etc, etc. Precisei adicionar uma propriedade publica a minha classe. Simples! Vou rodar o projeto e então o erro: 'Resource TfrmModalSaldosLocais Not Found'. Galera sinceramente eu não entendi nada, de onde partiu esse erro. Vou iniciar minhas pesquisas a respeito, se alguém souber e quiser compartilhar o conhecimento agradeço. Daniel code: var loOrdemBaixa : TOrdem_Producao_baixa; loSaldoEstoque : TSaldoInicial; frmModalSaldos : TfrmModalSaldosLocais; begin loOrdemBaixa := TOrdem_Producao_baixa.create(Tutil.GetConn); loSaldoEstoque := TSaldoInicial.create(Tutil.GetConn); frmModalSaldos := TfrmModalSaldosLocais.Create(self); o erro aconteceu aqui try with cds_produtosDaOrdem do begin self.OP := FieldByName('OP').AsInteger; self.produto:= FieldByName('produto').AsInteger; self.ordem := loOrdemBaixa.ProximaOrdem(loOrdemBaixa.GetEmpresa,FieldByName('OP').AsInteger,FieldByName('produto').AsInteger); self.qtd := FieldByName('qtd').AsFloat; self.fator := doCalculaMaxBaixadoOP(loOrdemBaixa.GetEmpresa,FieldByName('OP').AsInteger,FieldByName('produto').AsInteger, (FieldByName('qtd').AsFloat * FieldByName('fator').AsFloat)); edt_OP_baixa.Text := inttostr(self.OP); edt_produto.Text := inttostr(self.produto); edt_Ordem.Text := inttostr(self.ordem); edt_qtd.Text := floattostr(self.qtd); loSaldoEstoque.EMPRESA := loSaldoEstoque.GetEmpresa; loSaldoEstoque.PRODUTO := self.produto; loSaldoEstoque.MES := Tutil.doMes; loSaldoEstoque.ANO := Tutil.doAno; frmModalSaldos.Saldo := loSaldoEstoque; frmModalSaldos.SaldoNecessidade := self.fator; if frmModalSaldos.ShowModal = mrOk then begin edt_local.Text := inttostr(frmModalSaldos.Local); edt_fator.Text := floatTostr(frmModalSaldos.saldoAserUtilizado); self.NomeLocal := frmModalSaldos.NomeLocal; self.saldoDisponivel := frmModalSaldos.saldoAserUtilizado; end; edt_fator.SetFocus; edt_fator.SelectAll; end; finally frmModalSaldos.Free; loOrdemBaixa.Free; loSaldoEstoque.Free; end; end;
-
Bom dia Carlos tche tu já ouviu falar em OOP ou POO (programação orientada a Objeto)? Trabalho assim e funciona muito bem, dando maior rendimento para todo mundo (o desenvolvedor, o sistema e o usuario pega um sistema padronizado) posso te ajudar se você quiser. daniel@rodriza.com.br
-
no teu caso faria o seguinte clientedataset.first; try while not clientedataset.eof do clientedataset.delete except on E: Exception do end; o next você não pode dar por que o registro já saiu da sua lista, logo o proprio clientedataset seposiciona no seguinte, como next ele pula 1, por isso ta ficando coisas sem deleção.
-
Bom dia todos Bem tenho que um relatorio base e o mesmo cria um ClietDataSet em tempo de execução, preciso definir que apos a abertura do ClientDataSet (AfterOpen) um metodo seja carregado. Fiz assim (mas ta dando o seguinte erro: left side cannot be assigned to'): procedure TfrmBaseReport.doAbreDados; begin cdsDados.AfterOpen(cdsDados) := depoisDeAbrir; // o erro esta nesta linha cdsDados.Close; cdsDados.Data := dadosole; cdsDados.Open; cdsDados.RecordCount; end; procedure TfrmBaseReport.DepoisDeAbrirCds; begin // falta fazer o código end; Desde já agradeço. Valeu!
-
explica melhor. os dados do cabeçalho estão aonde? os itens estão onde? você busca no banco e joga dentro de um clientDataSet? esse cabeçalho e itens é referente ao que? se puder explicar melhor fica mais facil te ajudar. Daniel
-
QuickReport - Formulário de Projeto na Visualização
pergunta respondeu ao DanielR de DanielR em Delphi, Kylix
ok. obrigado novamente. irei testar a opção e postarei minha opinião mais adiante. me parece q no delphi 2007 não temos essa opção (estou vasculhando). T+ -
QuickReport - Formulário de Projeto na Visualização
pergunta respondeu ao DanielR de DanielR em Delphi, Kylix
Jonas, você é muito ativo no forum(acompanho o forum a algum tempo), parabéns a comunidade ganha com isso, faz 10min que postei e já tenho uma resposta. Legal! Bom acho que não expliquei direito, o que aparece de fundo é o form do projeto do relatorio como ele foi feito e isso não poderia acontecer. Daniel -
O componente QuickRep é visual e aparece num formulário em tempo de projeto. No entanto, esse formulário não é mostrado ao usuário, mas apenas usado internamente pelo programa. Para imprimir o relatório, usa-se o método Print do componente. Para ver uma prévia de impressão numa janela, usa-se o método Preview. legal é isso mesmo que fiz vejam: procedure TfrmCadastroUF.doInternalImprimir; var loUf : TUF; loUFReport : TfrmUFReport; begin loUFReport := TfrmUFReport.create(self); loUf := TUF.create(Tutil.GetConn); try loUFReport.NomeEmpresa := Tutil.GetEmpresaNOme; loUFReport.Endereco := 'jkjksjdksjk '; loUFReport.bairro := 'sjkjkdjskjd '; loUFReport.cidade := 'sdjdksjdksjkj'; loUFReport.UF := 'jjjj'; loUFReport.logo := ExtractFilePath(Application.ExeName) + 'logo.jpg'; loUFReport.cdsUFReport.Close; loUFReport.cdsUFReport.Data := louf.sql('',''); loUFReport.cdsUFReport.Open; loUFReport.doPreview; finally loUFReport.Free; loUf.Free; end; end; Bom, depois disso o QuickReport mostrou sim a visualização do relatorio, porem de fundo (atras da tela de visualização) tenho o meu form do projeto. Alguém tem alguma idéia a respeito disso, esqueci de algo? Podem me ajudar? Obrigado!