
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
Se for sobre o QuickReport, veja este tópico
-
É bem simples José Luiz, sempre que precisar não executar uma validação ao clicar num botão com a função cancelar, você testa se o controle ativo não é ele. Veja o exemplo: procedure TForm1,Edit1Exit(Sender :TObject); begin if ActiveControl = btnCancelar then // supus que seu botão Cancel chame-se btnCancelar Exit; if Edit1.Text = '' then Edit1.SetFocus; end. Abraços
-
Existem vários geradores de relatórios que você poderia utilizar. O gerador que acompanha o Delphi em algumas versões é o QuickReport (até a versão 7 é garantido). Dá uma olhada neste tutorial do colega Progr'amador - Criando Um Relatório no QuickReport Passo a Passo Voce vai achar muita coisa sobre QuickReport aqui no forum - basta utilizar o botão Pesquisar (no início da página). Mas há quem utilize: 1) Rave Report - (Site oficial) veja este post para algumas referências 2) Fast Report (Site oficial) 3) FreeReport (Freeware - Site com info) 4) Crystal Report (Site oficial), tem um forum sobre ele aqui no ScriptBrasil - link 5) Fortes Report (Site oficial) 6) Report Builder (Site oficial) Recomendo que você utilize aquele que acompanha a sua versão de Delphi, qualquer outra normalmente requer sua compra.
-
vms, sinceramente... Não entendi a pergunta e também a resposta - menos ainda a relação entre elas, já que RecordCount é utilizado para varrer todas as linhas no seu dataset - não colunas. :blink: Mas com relação ao título do tópico, tenho a dizer que as colunas do DBGrid já são, de certo modo, numeradas. Basta que você utilize a propriedade Columns. Ela é uma lista de colunas (TColumn). Assim, se você utilizar DBGrid.Columns[indice], você observa que indice já funciona como uma numeração, não?! :huh:
-
Estou de acordo - cansei de corrigir e avisar. robinhotbo, acho que você perdeu esta parte do post do Churc - repeti só para você não dizer que não tinha visto. ;) Eu mesmo já fiz várias correções em seus posts e estava já a me perguntar se não seria um problema com a tecla CAPS LOCK do seu teclado. :blink: Retirado do texto sobre Como fazer perguntas inteligentes (texto muito bom, por sinal e está linkado como Destaque no início do índice do forum) "Soletre, pontue e use maiúsculas e minúsculas corretamente. Não DIGITE TUDO EM MAIÚSCULAS, isto é lido como grito e é considerado grosseria. (Tudo em minúsculas é só um pouco menos chato, pois é difícil de ler)"
-
robinhotbo, você colocou o código errado. <_< Se você quer ajuda no erro relacionado às suas queries, você tem que colocar - principalmente - o código que você utiliza para montá-la, afinal, não dá para adivinhar aonde você está errando sem ver como você o faz. ;) Em algum lugar você dever ter as procedures: AlterarRegistro ('alunos', vCpo, vVlr, 'codigo =' + txtmat.Text);, e até poderia adivinhar o que são os pâmetros (nome tabela, lista de campos, lista de valores e condição), mas como você os utiliza... - só vendo o código. IncluirRegistro('alunos', vCpo, vVlr); ConsultaRegistros ('Cidades', 'CEP' , 'Codigo =' + Copy (cboCida.Text, 1, 4)); Mesmo assim, vou dar uma dica: nestas procedures, verifique se, quando você monta a lista de campos da cláusula SELECT, você não está concatenando os nomes do campos com algo assim: Qry.SQL.Clear; Qry.SQL.Text := 'SELECT '; for I := 0 to vCpo.Count -1 do begin Qry.SQL.Text := Qry.SQL.Text +vCpo.Strings[I] +','; end; Qry.SQL.Add('FROM ' + tab_nome); Qry.SQL.Add('WHERE ' + condicao); ... Se tiver, observe que após adicionar o último campo da lista (vCpo), existirá indevidamente uma vírgula ao final da instrução SELECT. (é erro na certa!) Sugestão? Declare uma variável local (se já a utilizar melhor) e após montar a lista, remova o último caracter da mesma:strSelect := 'SELECT '; for I := 0 to vCpo.Count -1 do begin strSelect := strSelect +vCpo.Strings[I] +','; end; Delete(strSelect, Length(strSelect) -1, 1); Qry.SQL.Add(strSelect); Abraços
-
Há um forum sobre o Crystal Reports aqui na ScriptBrasil. Dê uma olhada...
-
Sonia Didone, melhor seria você postar a parte do código onde você faz as inserções.Já conferiu se a propriedade Size do field está de acordo com o tamanho do campo no banco de dados? já tinha conferido isso, já tinha incluido o campo no componente tquery Fiz a pergunta porque eventualmente você poderia ter aumentado o tamanho do campo no banco de dados e não ter ajustado no componente (apesar que se não estou enganado, resultaria em erro ao abrir o dataset). De qualquer modo, é uma situação muito particular e que não dá para ajudar sem ver (como mencionei antes) parte do código ou todo o form onde estão os componentes. Boa sorte.
-
Como Inverter A Disposiçao De Um Campo No Banco De Dados?
uma questão respondeu Micheus em Delphi, Kylix
Fausto Malheiros, foi por isto que fiz o último comentário. Você cria a trigger para está resolver um problema, sendo que o caminho inverso você não consegue com um procedimento similar. Então, até onde eu sei, não tem jeito não, tem que mexer no código mesmo. -
foi mal, mas dava para sacar... não é Idx, tinha que ser o seu "I" - o do for
-
acontece que eu uso o datasource e não o dataset .. Usa sim!O dataset está ligado ao DataSource, e é dele que as informações utilizadas nos componentes data-aware vem. Quando eu escrevo dataset me refiro a classe do componente de acesso ao banco que você utiliza. Por exemplo, TTable, TQuery, TZTable, TClientDataSet.... Como você's (você não é o único) não informam o que usam para acessar os dados, e eu não sou advinho, então eu uso a classe pai de todos eles (TDataSet). Captou?! ;)
-
Já experimentou definir o formato de apresentação na propriedade DisplayFormat do campo no dataset?Se não, acesse a lista de Fields do dataset - duplo-click no componente dataset), acesse a propriedade DisplayFormat e a defina com dd/mm/yyyy.
-
Como Inverter A Disposiçao De Um Campo No Banco De Dados?
uma questão respondeu Micheus em Delphi, Kylix
Fausto, o NEW se refere ao registro sendo gravado no banco. Você está ciente que este processo irá realmente "Pegar 012007 e gravar 200701", mas se você ler este campo no seu programa ele aparecerá com a nova formatação e não a que você passa na gravação? -
Como Inverter A Disposiçao De Um Campo No Banco De Dados?
uma questão respondeu Micheus em Delphi, Kylix
Tópicos mesclados conforme comunicado por MP a Fausto Malheiros. -
Eder, aquele código lá do post #7 (logo abaixo) não resolveu pelo que você informou: procedure TForm1.Button1Click(Sender: TObject); Var I : Integer; begin for I := 0 to CheckListBox1.Count - 1 do begin DBGrid1.Columns[idx].Visible := CheckListBox1.Checked[idx]; DBGrid1.Columns[idx].Field.Visible := DBGrid1.Columns[idx].Visible; end; end;mas ele deveria funcionar. Você não deu retorno quanto ao meu questionamento no post #9:
-
em teoria (e que me lembro assim está codificado), após você mudar as configurações via botão de configuração da impressora na tela de preview do QuickReport, o código no form atribui as configurações a QRPrinter que é a instância do objeto TPrinter utilizada pelo QuickReport e deveria assim utilizá-la. Como disse, estou sem tempo para fazer uma verificação mais abrangente, mas utilizando uma aplicação que tenho aqui, eu abri a tela de sutup da impressora, alterei de retrato para paisagem. A pré-visualização, realmente não muda (como já havia mencionado no outro post) mas, imprimindo o resultado fica de acordo - imprime em paisagem - logo, está sendo obedecida a minha alteração.
-
Database Server Error: I/o Error For File "c:\windows\temp\fb_sor
uma questão respondeu Micheus em Delphi, Kylix
Veja naquele comentário que fiz sobre a sessão "TempDirectories". Talvez você possa fazer algum tipo de teste, como definir uma outra pasta para que estes arquivos temporários sejam gerados e verificar se continua a mensagem, se ela indica a nova localização...É complicado sugerir algo quando não se está passando pela situação. Inclusive, nesta questão, tenho quase certeza se que o melhor lugar para você procurar auxílio é em foruns de banco de dados - sobre o FireBird. eu não sei muito desta parte não. Mas esse lance de restrição de cota, em algumas empresas os administradores definem o espaço em disco (cota) que determinado usuário (usuários) podem utilizar no disco do servidor. Desculpe não poder ajudar mais. -
Realmente não aparece e não deverá aparecer, por que as alterações serão utilizadas apenas pelo aplicativo. Você não deve ter observado, mas se você tentar fazer a mesma coisa no Word, Internet Explorer, qualquer outra aplicação (eu arriscaria dizer 100% delas) o dito botão não aparecerá, porque as alterações são para aquela aplicação em funcionamento, não para todas como se faz quando utilizando o gerenciador do windows (lá via botão Iniciar...) Eu até acho que deveria ser reformatado o documento (conforme você diz), e isto pode ser um bug (sei lá). O fato é que a pré-visualização foi gerada com a configuração inicial, daí alterando a configuração (acho até que pré-visualização deveria ser refeita automaticamente, mas...) e mandando imprimir o relatório é gerado novamente, sendo que neste caso as novas configurações já deveriam ser utilizadas. Não tenho como conferir agora, vou dar uma olhada com a versão que tenho. Qual a sua versão do QuickReport? Abraços
-
Se você utiliza o componente PageControl, tem uma propriedade relacionada a Multilinhas para as abas - não tenho como ver o nome da propriedade aqui, mas dê uma olhada porque é algo bem óbvio, tipo MultiLine ou algo assim. p.s. Aproveitando, já que você não é registrado não posso lhe mandar uma MP, você poderia dar um retorno nas suas mensagens do dia 31?
-
Mas não tem nada de estranho com o código não. Eu disse que ele utiliza a propriedade Visible do campo na lista de campos do dataset ligado ao seu DBGrid - só isso. Faça uma busca no código (localizar) procurando pelo texto Fields, e você verá que ele aparecerá em vários pontos no processo de impressão e tem como origem RDBGrid.DataSource.DataSet. Voce vai achar sempre antes dele a linha "with FDBGrid.DataSource.DataSet do begin". Daí você comprova o que eu disse e o que você já havia comprovado na prática: a visibilidade da coluna é ignorada, ela vem do DataSet. Por isso que eu disse que as colunas que você não quer que sejam impressas devem ser tornadas visíeis e invisíveis não apenas utilizando a propriedade Columns do DBGrid (esse seria apenas visual na tela), mas também, os campos (Fields) na lista de campos do seu dataset (esse seria apenas utilizado no relatório). Será que agora você entendeu. Foi a modificação que sugeri no código - inclusão do DBGrid.Columns[indice].Field.Visible ou como você mesmo sugeriu dataset.fieldbyname().Visible.
-
não sei se entendi bem mas acho que voce deve deixar a imagem com a propriedade "picture" vazia e quando voce clicar no botao salvar : image1.Picture:= "Caminho da Imagem"; *_Felipe_*, a questão é que os botões Imprimir e Salvar para arquivo estão no form de Preview do QuickReport os quais, se não estou enganado (e não tenho como averiguar por hora), você não tem como acessar - então, não tem como saber qual deles foi pressionado. Supondo que isto seja verdade, o único modo de conseguir ter algum controle sobre o form de pré-visualização, é criando seu próprio e "registrando" ele junto ao QuickReport (isto sim é possível - já utilizei). Abraços
-
fajo, deixando a imagem em seu relatório, bastaria que você habilitasse/desabilitasse o componente de imagem conforme o caso. Então, a questão é: você tem como saber se o relatório está sendo salvo ou impresso?
-
Era bem a resposta que estava esperando. :D Pelo que dá para ver no site da Raize, este seu TRzGroup deve ser um dos componentes similares ao TRadioGroup. Se for isto mesmo, parece-me que estes seu TRzGroupItem devam ser "armazenados" em uma propriedade tipo a Items. Voce já verificou isto? Porque se for, você terá que gravar/procurar no seu controle de acesso, a referência ao TRzGroup e qual o item dele você quer habilitar/desabilitar.
-
[resolvido] Incompatible Types: 'char' And 'shortstring
pergunta respondeu ao *_Felipe_* de Micheus em Delphi, Kylix
Churc, uma forcinha neste sentido... procedure TForm1.Button1Click(Sender: TObject); type TCumulative = record xc, xch:integer; cum,hc1,hc2,hc3:string; fc,ncf,fch1,fch2,fch3:array[0..50] of string; end; TFeeder = record feeder, ofpcb, comment, quant, erros, aproveitamento:string; head1, erros1, head2, erros2, head3, erros3:string; idpcb:integer; end; var Cumulative :array[1..5] of TCumulative; Feeder :array[1..5] of TFeeder; q2, z, z1, ncx, aux :integer; begin FillChar(Cumulative, SizeOf(Cumulative), 0); FillChar(Feeder, SizeOf(Feeder), 0); // valores fixos para a simulação. (lembrando que o erro é de compilação) ncx := 1; // índice de controle dos arrays Feeder e Cumulative aux := 0; // índice de controle do array Cumulative.fch3 Cumulative[ncx].fch3[aux] := 'testando o erro de conversão'; // índice de controle do início de varredura do string Cumulative.fch3[aux] z := 1; // índice da posição inícial da varredura z1 := 15; // índice da posição final da varredura - menor que tamanho do texto for q2:=z to z1 do begin Feeder[ncx].head3[aux] := Feeder[ncx].head3[aux] + Cumulative[ncx].fch3[aux][q2]; end; end; -
"todos os foruns do mundo"? :blink: Olha este em espanhol: http://www.clubdelphi.com/foros/showthread.php?t=10900 McBlade, você está ciente que InsertRecord insere um array que corresponde a cada coluna do registro de seu dataset? Neste caso, parece-me que o array tem sim um tamanho pré-definido, a questão daí seria que campos (posições do array) você vai preencher.Este seu código, parece supor que cada linha do Memo é o valor de um campo já que a cada posição do array você adiciona a linha. Mas isso passa a ser um problema quando você, a cada campo (linha do memo e posição do array), tenta inserir uma linha inteira (registro) em sua tabela. A menos que seu dataset tenha apenas uma coluna, e daí a cada linha do memo, corresponderá a uma linha (registro) no dataset. Mas, mesmo assim, seu array tem tamanho fixo - 1 posição - equivalente a única coluna existente na tabela. Veja este exemplo http://www.guiadodelphi.com.br/ler.php?codigo=312