
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
Não deveria ser algo complexo não. Dê uma olhada neste tópico e veja se ajuda.
-
Acho estranho que esteja. Com esta consulta alterada, voce estará apenas listando os produtos no seu relatório - sem as quantidades daqueles produtos que tenham sido pedidos. :blink: Desculpe, mas acho que faltou explicar o que é que tem que ser resolvido - não conseguir entender qual é o problema. Abraços
-
Se a querie estiver deste jeito, realmente não retornará correto. Por acaso, esta consulta não deveria trazer todos os produtos e informações daqueles que foram incluídos no pedido (os itens)? E sendo assim, o Numero do Pedido não deveria ser parametrizado? Então, onde estão os ":" depois do sinal de "=" e antes do nome do parâmetro? Para ser mais específico: left outer join Itens I on (I.NumeroPedido= : NumeroPedido and P.CodigoProduto = I.CodigoProduto) Estes aliases não seriam necessários, já que você dá o mesmo nome dos campos: I.Tamanho As Tamanho, I.Quantidade As Quantidade, I.NumeroPedido As NumeroPedido Carlos Rocha, a querie produtos, como foi montada, justamente estará listando todos os produtos no seu cadastro. Além disto, para os produtos que foram refenciados nos itens do pedido, estará buscando as informações como quantidade, valor unitário e outros. Como resultado, haverão no relatório, linhas (produtos) onde haverão as colunas quatidade, valor, ... preenchidos e outras que ficarão em branco. A questão é, que para o que você está querendo como relatório final, você está querendo utilizar uma consulta só nos itens (QryItens) que não tem a menor necessidade de existir (neste caso específico). Você precisará apenas mostrar os dados do Pedido (QryPedidos) e associado a ele os produtos e itens (QryProdutos - onde há um join de produtos e itens do pedido). Para que você possa eventualmente utilizar este relatório para imprimir uma lista de pedidos (vários, e não um só de cada vez), sugiro que você utilize uma banda Detail para os dados do pedido, logo, neste caso, você definiria como dataset do seu quickrep a QryPedidos. E para listar os produtos/itens, você usaria uma banda SubDetail, onde a propriedade dataset dela seria definida com QryProdutos e nesta banda, você colocaria os campos deste dataset. Informe-me, se o pedido a ser impresso será filtrado, ou seja, o usuário seleciona um determinado pedido ou se será impresso o pedido que está correntemente selecionado em um DBGrid. Uma vez definido na QryProdutos o parâmetro NumeroPedido, este dataset deve ter sua propriedade DataSource ligado a um componente datasource que tenha como dataset a consulta QryPedidos. Assim, os itens do produto serão filtrados de acordo com o NumeroPedido na consulta QryPedido. Abraços
-
Aprendendo, para esta situação em específico (tamanho customizado), faça os cálculos para achar o valor em polegadas e use esta opção nas propriedades da impressora quando definir seu tamanho customizado. Eu lembro que há algum tempo, quando trabalhava com um colega, foi necessário fazer deste modo. Por algum bug no driver da impressora, ele não usa a configuração quando definida em mm ou cm - apenas polegadas. Tente isso aí e veja se é o seu caso.
-
Evandro, acredito que uma boa opção seria o uso de polimorfismo. Como não programo em C++, busquei um exemplo em C++ que demonstrasse o uso de métodos virtuais (Ref. Exemplos de Polimorfismo em C++), tal como podemos implementar em Delphi e montei este exemplo. Caso não esteja correto, por favor, me desculpe, mas a idéia continua valendo. Com este tipo de implementação, passa a ser indiferente saber de que classe você deverá chamar o método desejado (nada de type-cast), já que cada qual "responderá" de acordo com sua implementação. Vamos ao exemplo: class Base { public: virtual void Quem(void) { cout << "Base\n"; } virtual void Exemplo(void) { cout << "Exemplo na classe Base\n"; } }; class Primeira:public Base { public: void Quem(void) { cout << "Primeira\n"; } }; class Segunda:public Base { public: void Quem(void) { cout << "Segunda\n"; } void Exemplo(void) { cout << "Exemplo na classe Segunda\n"; } }; void ShowWho(Base *base) { base->Quem(); base->Exemplo(); } main (void) { Primeira primeira; Segunda segunda; ShowWho(&primeira); ShowWho(&segunda); return 0; }Observe que a declaração dos métodos utilizados nas classe filhas, deverá ser definido como virtual na classe base (mãe). Nas classes filhas, você sobrescreve os métodos necessários para que esta classe responda corretamente à chamada do método (eventualmente, alguma classe não necessitará sobrescrever um determinado método). Quando você define em uma função, como em ShowWho o parâmetro como sendo do tipo da classe mãe, ao chamar a função com uma instância de qualquer das classes filhas, na função o método do objeto que irá ser utilizado é aquele da classe a que o mesmo pertence - no exemplo, primeira e segunda. Acho que há um exemplo que explica melhor este recurso, pode ser visto aqui: Básico de C++: Membros Virtuais. Abstração. Polimorfismo (ref. Linha de Código) Abraços
-
TerminusEst, para você não ficar totalmente sem uma resposta, e levando em conta o que você observou, dá para dizer que eles referem-se ao tipo de dados a que o refereido parâmetro pertence. Em temos de API do Windows, o LPARAM corresponde à um parâmetro cujo tipo é um Inteiro Longo. Veja por exemplo a definição da struct MSG utilizado pelos eventos (mensagens) da API do Windows: typedef struct tagMSG { // msg HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; Já quanto a este RPARAM, eu não poderia arriscar qualquer palpite, exceto o de que pode ser o nome de um parâmetro para uma função qualquer, cujo significado deve estar documentado em algum lugar. Abraços
-
Carlos Rocha, este é o conteúdo de QryProdutos, então? Se é, não seria esta a informação a ser listada no seu quickreport? Sendo as respostas as questões acima - SIM, o dataset de seu Quick deveria ser QryProdutos e não QryItens, e são os campos daquele dataset que devem estar nos QRDBText's. Justamente porque a consulta que você executa no MySQL Front (QryProdutos) não é a que você está utilizando para lista no quick (QryItens) Abraços
-
Pedro Proença, e caso você deseje carregá-los dinamicamente, este post deve servir como ponto de partida. Abraços
-
shelter, a mensagem sugere que na tentativa de importação, o Campo1 tem tamanho maior que o reservado para ele na tabela. Para obter um melhor auxílio (seja meu ou de qualquer outro colega), seria interessante que você: - mencionasse o nome e tipo das colunas de sua tabela para qual os dados serão importados; - pudesse colocar pelo menos esta linha inicial (row 1) reportada no erro; - e a sequência de comandos para "load data infile ...". É que fica difícil opnar sem saber com o que estamos tratando. Abraços
-
não fez não. Observe o que eu escrevi: "Sergio, feito o que o colega sugeriu você acessa o componente (em um form) pelo nome utilizando o método FindComponent do form em questão (...)" Veja que o componente não está em um form, é verdade, mas está no datamodule. Logo, é neste que você dever procurar pelo componente, também usando o mesmo procedimento. procedure TForm1.SpeedButton9Click(Sender: TObject); var tabela :TComponent; begin tabela := DataModule2.FindComponent('ZQueryClientes'); If assigned(tabela) then Begin TZQuery(tabela).Next; end; end; o que é lógico, já que a variável está nula, ou seja, é NIL! Abraços
-
AllNet, você precisará precisar apenas configurar na sua ZConnection as propriedades: HostName (seu servidor de banco de dados), DataBase (nome do banco hospedado) e User (usuário do banco). Pedaço de um código que tenho, onde os valores entre "<>" são lidos de um arquivo de conguração: begin ZDBConnectRemoto.HostName := <DB_Host>; ZDBConnectRemoto.Database := <DB_Name>; ZDBConnectRemoto.User := <DB_User_Name>; try ZDBConnectRemoto.Password := <senha aqui>; // ou solicitada antes e atribuida a propriedade ZDBConnectRemoto.Connect; except on E:Exception do begin E.Message := 'Não foi possível conectar ao banco de dados.'#10#10'Erro: '+ E.Message; end; end; end;
-
Se entendi direito, você configurou a altura da página do quick para 15,40cm (uma folha A4 tem 29,70cm) e criou um tamanho de papel personalizado na sua impressora (através das propriedades da Impressora no painel de controle) e, ao imprimir a página, ela continua pulando para a posição equivalente a A4. É isto? Se for...: - que impressora você está utilizando? - o tamanho do papel customizado, na propriedades da impressora, foi definido em mm, cm ou polegadas? A ejeção é automática, ou seja, após atingido o fim da página do quick ele chama o método NewPage que provoca a ejeção da página. Abraços
-
Vivendo&Aprendendo, o uso de ODBC não é o ideal (perde um pouco em performance), mas considerando que você já tem o programa funcionando com uso de ADO, acho que seria a forma mais rápida de você por sua aplicação para funcionar. Acredito que você não tenha grandes problemas para fazer a configuração da string de conexão. Como eu não uso esta abordagem, dei uma pesquisada e apareceu este artigo: How to set up the dbGo (ADO) ConnectionString for mySQL database Com o tempo, talvez fosse interessante você substituir por componentes como os da paleta ZeosLib que possibilitam acesso nativo ao banco MySQL (entre outros). Abraços
-
Gerar relatorio com quebra de paginas a partir de txt
pergunta respondeu ao fajo de Micheus em Delphi, Kylix
fajo, como você disse que este relatório foi criado por outro programa (aparentemente com formatação no estilo dos arquivos DOS), por acaso você não observou se há após a numeração da pagina algum caracter estranho? Era comum gerar este tipo de arquivo que poderia ser mandado direto para impressora, e o caracter de salto de página era inserido neles. Ainda com relação a formatação já presente (provavelmente colunas, também), vale lembrar que você deverá utilizar uma fonte de tamanho fixo, como o Courier, para que ela seja respeitada. Bom, em se tratando de quickreport, não poderia deixar de dar mais uma opção ainda não citada aqui. ;) Caso você opte por remover do texto a numeração de página. Utilizando o quick, você poderia fazer uso da banda TQRStringsBand em combinação com o componente TQRExpr. Procedimento: 1 - no seu relatório, apenas com a banda PageHeader, onde você botará o logo, adicione uma TQRStringsBand; Não há necessidade de ajustar nada nela; 2 - com ela selecionada, adicione um TQRExpr a esta banda e inicialize as propriedades: a. Autosize = False; b. AutoStretch = True; c. Expression = click no totãozinho [...] e selecione a opção (botão) Variable. Na lista localize e selecione a banda TQRStringsBand (p.e. QRSTRINGSBAND1); d. Width = ajuste para a largurada banda; 3 - na codificação, antes de mostrar seu relatório (via Preview), carregue o arquivo texto na propriedade Items da TQRStringsBand. Se for carregar direto, pode fazer assim: QRStringsBand1.Items.LoadFromFile(<nome do arquivo txt>); caso, você carregue o arquivo para uma variável TStringList de modo a processar as linhas e remover alguma coisa, após isto feito, você pode atribuir o conteúdo desta variável para a banda da seguinte forma: QRStringsBand1.Items.AddStrings(<variável stringlist processada>); 4 - agora é só chamar o método Preview para visualizar o relatório. Observe, que ser você tiver sorte, de o relatório estiver bem formatado e couber na sua página do quickreport (com as margens definidas para o mínimo possível), pode ser até que você mantendo o texto da página, a mesma possa ser impressa corretamente. O espaçamento que o QRStringsBand vai usar será fixo, mas você poderá manipular as margens de modo a tentar enquadrar a página do arquivo na página do quick. Abraços -
Carlinhos, este não e o tipo de coisa comum de ser implementada. E não há suporte pelo quick para isto. Os componentes visuais (que não sejam da sua paleta) não são mostrados pelo quick, simplesmente porque todos os componentes que você utiliza na confecção do relatório (design-time) são tratados para fins de desenho no canvas da área onde você visualiza o seu relatório (um componente TQRPreview, colocado no form de preview padrão do quick) - eles não estão programados para interagir da forma como você está tentando. O que ele mostra, é apenas o resultado de um arquivo wmf (criado na pasta temporária) que foi criado quando você processou o relatório. Normalmente você tem parte do seu resultado (mostrado no relatório) em um DBGrid e a partir deste disponibiliza a opção do relatório. Nesta situação, a visualização dos detalhes poderia facilmente ser feita através de um botão, onde o funcionário visualizado atualmente, no DBGrid, seria usado como referência para apresentação de um form ou relatório que mostraria esta informação extra. Abraços
-
Vivendo&Aprendendo, por acaso você já tem alguma experiência com o MySQL? Se sim, esta não seria um opção melhor para seu caso? Levando em consideração que você venha a depender da assinatura de um provedor, para hospedar seu banco de dados, MySQL seria a melhor opção por ser o mais encontrado nas ofertas dos sites. Mas, se você conseguir montar um VPN (particular), então não fará a menor diferença a escolha do banco - poderia ser o Firebird sem qualquer transtorno. Você pode dar uma olhada nestes tópicos do Eder, também: - Banco De Dados Aprender, Dúvida quanto a escolha - Firebird - Primeiros passos Abraços
-
Eder, você ainda usa este procedimento citado há um tempo neste outro seu post?
-
(Resolvido) Campo time no mysql retorna zero
pergunta respondeu ao Denis Courcy de Micheus em Delphi, Kylix
eu já imaginava, mas nunca dá para estar 100%certo... acho que pode ser um problema com o driver ODBC.Eu fui dar uma conferida, e há uma versão fresquinha 5.1.2 liberada 13/02/2008 (Changes in MySQL Connector/ODBC 5.1.2). Houveram alguns bugs corrigidos (não conferi se este) - talvez fosse o caso de atualizá-lo e tentar. Abraços -
(Resolvido) Campo time no mysql retorna zero
pergunta respondeu ao Denis Courcy de Micheus em Delphi, Kylix
Denis Courcy, a título de teste, você poderia colocar um TTable para ver o que o ocorre (se seria algum detalhe associado ao TQuery - pouco provável, mas...) Abraços -
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de Micheus em Delphi, Kylix
Então, parece que você tem um problema sério! Não tenho como lhe ajudar. Abraços -
Cleber, você deve manter apenas um tópico sobre o mesmo assunto. Se não lhe respondem é porque não sabem ou não querem. Fiz uma busca no Google para você: a resposta para o Skype pode estar no uso da tag callto: Veja esta página: Callto: Linkify (for Skype) Segundo este outro site, haveria a opção específica para o Skype, onde você faz uso da tag <a href> </a>. Veja exemplo: <A href="callto://tdavid/">call me using Skype</A> (onde tdavid é o ID Skype) Já para o messenger, este eu nunca ví em página alguma. Exceto pelo uso de mailto:, o que promoverá a tentativa do envio de um e-mail caso o outlook esteja instalado e configurado para envio de mensagens. Abraços
-
Acho que o caminho passa pelo que está citado neste post do Jhonas (VPN). Dê uma avaliada, sobre no assunto.
-
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de Micheus em Delphi, Kylix
Robinhcne, este erro você vai ter que tentar verificar por si só. Coloque um break-point antes de a sua procedure LeRegistro abrir a query, de modo que você possa inspecionar o conteúdo da propriedade SQL. Se há um erro na query durante a execução, este erro estará na cláusula sql montada e inserida nesta propriedade. (já lhe expliquei como fazer isto, há um tempinho) Abraços -
(Resolvido)Conexão com Banco de dados
pergunta respondeu ao João Paulo Taraciuk de Micheus em Delphi, Kylix
Que bom que conseguiu resolver deste modo. Realmente funciona, mas eu sugeriria a você que, quando tivesse um tempinho, desse uma olhada na forma como exemplifiquei (e comentei) no source do projeto (conectmysql.dpr). Faz uso de arquivo .ini - é o mais usual e você ainda poderá colocar mais informações nestes arquivo, bem como, recuperá-las de forma mais simples e segura. Abraços -
Para quem não sabe do que se trata: Web Services (ref. Wikipedia-pt) Tutorial com exemplo: Criando um WebService em Delphi 7.0 (ref. Ramos da Informática) Artigo bastante interessante: Integração de Sistemas em PHP e Delphi usando WebServices (ref. PlugMasters) Abraços