
robinhocne
Membros-
Total de itens
854 -
Registro em
-
Última visita
Tudo que robinhocne postou
-
Função para checar campos obrigatórios da tabela
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Bom, andei pesquisando muito e me sugeriram um componente chamado Jedi, ai andei vendo umas videos aulas sobre ele, e nele existe na aba JvValidators, ai usando os componentes JvValidators e JvErrorIndicator para ele fazer uma validação se o campo está em branco ou não ai ele mostra uma imagem de alerta ao lado do edit, bom para quem tem esse componente espero ajuda ou aqueles que o conheçam, pois tenho varios campos que são obrigatorios, ai eu coloquei assim no on Exit de um edit: JvValidators1.Validate; Mas tipo ai ele dá o alerta de todos os edits mesmo eu nem chegando nele para preencher, estava olhando, mas será que tem como mostrar que é para ele verficar daquela respectiva propriedade do item(campo) da validaçao o PropertyToValidate. Será quem tem como? -
Função para checar campos obrigatórios da tabela
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
E se fosse feita uma checagem em cada edit que seja obrigatorio tipo assim, só preciso de ajuda para imprementar! If Edit1.Text=''; then ShowMessage ('Campo Obrigatório não preenchido'); else If If Edit.Text=???????? Esse restante que eu não sei, tipo assim, se o Edit estivesse em branco ele retorna a mensagem ou se ele estiver preenchido não retorna mensagem, e se possivel tiver como fazer uma função ou procedimento pra que não precisa fazer isso em cada edit? -
Função para checar campos obrigatórios da tabela
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Essa é a procedure: procedure TFrmCadVeiculos.ValidaCamposObrigatorios; var i: Integer; msg: string; begin msg := ''; for i := 0 to DtmIza.QryIza.Fields.Count - 1 do if DtmIza.QryIza.Fields[i].Required and DtmIza.QryIza.Fields[i].IsNull then begin if msg <> '' then msg := msg + #13 msg := msg + DtmIza.QryIza.Fields[i].DisplayName; end; if msg <> '' then raise Exception.Create('Preenchimento obrigatório!'#13+msg) end; robinhocne, basta você olhar com mais atenção que vai ver que a mensagem se refere a falta do ";" na linha anterior.Este procedimento realmente seria útil, se você estivesse utilizando componentes data-aware ligados ao dataset. Nesta situação, os valores alterados nos DBEdits ficam no buffer deste dataset e antes de você chamar o método Post para gravar os dados no banco, você chamaria este procedimento para validar os valores informados. Apenas se a função não gerasse um raise (tudo ok) é que você chamaria o Post. Mas, você lê os dados em TEdits (não é data-aware), daí você move os valores dos edits para aquela lista de valores Vvlr (um TStringList) que você irá passar para uma função que montará um SQL de UPDATE ou INSERT, cuminando com o uso do método ExecSQL - não é mesmo?! Então, pensa bem... Quando é que o seu dataset QryIza terá estes valores, digitados em edits, colocados no seu buffer para ser utilizada esta função? Eu já havia comentado lá no outro forum que esta solução não vai lhe atender. Mas, se o que eu disse acima estiver errado, então pode tentar implementar e ver no que vai dar. Esta do outro tópico também é interessante, só que está em VB. Basicamente ela varre todo o form validando os Edits. Acho até que seria a abordagem mais adequada ao seu caso. Mas, como vou estar ausente uns dias, não vou nem começar uma explicação. Espero que outro colega o faça. Abraços é Micheus voltei a estaca zero do tópico, como eu poderia fazer nesse caso, retirando tudo o que eu postei, será que tem como? -
Função para checar campos obrigatórios da tabela
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Andei pesquisando mais na net e achei uma procedure, e estou tentado mudar para o que o meu programa necessita, mas está dando esse erro aqui: Essa é a procedure: procedure TFrmCadVeiculos.ValidaCamposObrigatorios; var i: Integer; msg: string; begin msg := ''; for i := 0 to DtmIza.QryIza.Fields.Count - 1 do if DtmIza.QryIza.Fields[i].Required and DtmIza.QryIza.Fields[i].IsNull then begin if msg <> '' then msg := msg + #13 msg := msg + DtmIza.QryIza.Fields[i].DisplayName; end; if msg <> '' then raise Exception.Create('Preenchimento obrigatório!'#13+msg) end; DtmIza é meu DataModule QryIza é a query que eu faço a conexão no banco de dados. O erro que está dando é nessa linha de codigo:= msg!aqui!:= msg + DtmIza.QryIza.Fields.DisplayName; E achei outro aqui no forum mesmo nesseTópico Mas não entendi essa função, será que ela pode me ajudar tbém? -
Olá pessoal preciso fazer uma função dessa maneira: Acho que uma função resolveria, mas vamos lá. Eu uso o Delphi 7 e Firebird, e tenho varias tabelas que tem alguns campos que são Não Nulos, mas é o seguinte, tem algumas pessoas que não preenchem todos os campos que são obrigatórios e ai ele dá erro, então queria uma função que verifica se os campos que vão serem salvos na tabela são os campos não nulos e ai mostrar tipo só uma mensagem de Há campos obrigatorios a serem preenchidos. Para a conexão ao banco de dados eu utilizo uma IbDataBase, IbTransaction e uma IbQuery, alguns acho que já conhece o tipo de conexão eu utilizo. Achei algumas funcoes e alguns metodos, mas tentei e não deu certo, e estou procurando o forum por já ter me ajudado muito em meu projeto! Agradeço a colaboração de todos!
-
Olá amigo Fireboard, bom estou imigrando aos poucos o meu projeto pois atualmente uso a versão do delphi 7 e estou migrando para o delphi 2007 win 32, e tendo um pouco de diferença foi nos componentes que eu tinha instalado e alguns ainda não tem para o delphi 2007, mas você pode ir mudando para o delphi 7 e dando algum erro pode consultar o forum em questão do QuickReport para o delphi 7 ele tem um bpl chamado dclqrt70.bpl dentro das pasta do delphi para instalar, é só você ir em: Componet -> Install Packages, clique em ADD e localize o arquivo c:\arquivos de programas\borland\delphi7\bin\dclqrt70.bpl. (path padrão)
-
(Resolvido) Problema ao mostrar valores monetários em edits...
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Oh my god! :o Vou ter que parodiar o nosso colega Jhonas... Traduzindo a mensagem de erro: Tipos incompatíveis: string e extended (texto e número, para simplificar mais ainda) você não tem que adicionar um string no seu TStringList Vvlr? Para quê que você vai mudar justo esta linha? Esta você não tinha que mexer nada nela!!! <_< Deveria continuar exatamente como estava: um texto numérico, com a vírgula que você substituia por um ponto utilizando a função StrReplace! Era o que já tínhamos corrigido nos outros post's. Abraços Ops, foi a resaca de ontem, mas desculpas, fiz errado mesmo, para salvar no vvlr ficou dessa maneira: Add (AnsiReplaceStr(Format('%.2f',[TxtVal.Value]), ',', '.')); Ok, Resolvido mais uma duvida! -
(Resolvido) Problema ao mostrar valores monetários em edits...
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
E agora? robinhocne, você leu o que eu postei no post#5 ? Bom, eu vou colocar aqui denovo: Sendo mais claro: Você está passando um texto como parâmetro (TxtVal.Text), sendo que a função Format, utilizando o formato "%.2f" (onde f refere-se a float) requer que o parâmetro seja um número! Assim sendo, se este seu TxtVal é um componente TCurrencyEdit também (e eu acho que sim), então você deveria utilizar a propriedade Value. Abraços Ok, eu não estava usando o TCurrencyEdit, mas ai mudei para eles, e então no Vvlr mudei de Text para Value, então ficou dessa maneira: add (Txtval.Value); Mas ai dá esse erro: -
(Resolvido) Problema ao mostrar valores monetários em edits...
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Bom, Resolvido este erro is not a valid integer value Este erro estava dando por eu estar tentado converter um texto numerico (String) para um Float (numero real) nesses códigos: // Para quando for negativo mostrar em vermelho o saldo do dia If StrToInt(TxtTlDia.text) < 0 Then TxtTlDia.font.color := ClRed Else TxtTlDia.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo do Total If StrToInt(TxtSoma.text) < 0 Then TxtSoma.font.color := ClRed Else TxtSoma.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo Anterior If StrToInt(TxtAnterior.text) < 0 Then TxtAnterior.font.color := ClRed Else TxtAnterior.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo do Total do mes If StrToInt(TxtMes.text) < 0 Then TxtMes.font.color := ClRed Else TxtMes.font.color := clBlack; end; Eu Estava usando edits para retornar os dados que queria que mostrasse neles, ai foi mudado para o TCurrencyEdit um componente do pacote do RxLib, onde ele tem uma propriedade chamada Value que já me retorna os dados em real!, pois então não precisaria fazer uma conversão FloatToStr (no caso um ponto flutuante para String), pois sendo que não precisaria checar nada, então os dados ficaria assim: // Para quando for negativo mostrar em vermelho o saldo do dia If TxtTlDia.Value < 0 Then TxtTlDia.font.color := ClRed Else TxtTlDia.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo do Total If TxtSoma.Value < 0 Then TxtSoma.font.color := ClRed Else TxtSoma.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo Anterior If TxtAnterior.Value < 0 Then TxtAnterior.font.color := ClRed Else TxtAnterior.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo do Total do mes If TxtMes.Value < 0 Then TxtMes.font.color := ClRed Else TxtMes.font.color := clBlack; E os codigos que eram para fazer as buscas dos dados e mostrar nos edits: With QryCaixa do Begin QryCaixa.Close; QryCaixa.Sql.Text := 'Select * from lancamento where Pagamento = Current_date'; QryCaixa.Open; end; //Soma o saldo do Dia With QryTotais do Begin QryTotais.Close; QryTotais.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento = Current_date'; QryTotais.Open; end; With QryTotais2 do Begin QryTotais2.Close; QryTotais2.Sql.Text := 'Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = Current_date'; QryTotais2.Open; End; //TxtTlDia.text := ((FloatToStr((QryTotais.FieldByName('+').AsFloat) - (QryTotais2.FieldByName('-').AsFloat)) )); TxtTlDia.Value := QryTotais.FieldByName('+').AsFloat - QryTotais2.FieldByName('-').AsFloat; // Saldo Total With QrySaldo do Begin QrySaldo.Close; QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento is not null'; QrySaldo.Open; end; With QrySaldo2 do Begin QrySaldo2.Close; QrySaldo2.Sql.Text := 'Select sum(Valor)as "-" From Lancamento where tipo = 0 and pagamento is not null'; QrySaldo2.Open; End; // TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) )); TxtSoma.Value := QrySaldo.FieldByName('+').AsFloat - QrySaldo2.FieldByName('-').AsFloat; // Saldo Anterior With QryAnterior do Begin QryAnterior.Close; QryAnterior.Sql.Text := 'select sum(valor)as "+" from lancamento where Tipo = 1' + ' and extract(year from pagamento) = extract(year from current_date)' + ' and extract(month from pagamento) = extract(month from current_date) -1'; QryAnterior.Open; end; With QryAnterior2 do Begin QryAnterior2.Close; QryAnterior2.Sql.Text := 'select sum(valor)as "-" from lancamento where Tipo = 0 and ' + 'extract(year from pagamento) = extract(year from current_date)' + 'and extract(month from pagamento) = extract(month from current_date) -1'; QryAnterior2.Open; End; //TxtAnterior.text := ( (FloatToStr((QryAnterior.FieldByName('sum').AsFloat) - (QryAnterior2.FieldByName('sum').AsFloat)) )); TxtAnterior.Value := QryAnterior.FieldByName('+').AsFloat - QryAnterior2.FieldByName('-').AsFloat; // Saldo Total do Mês With QryMes do Begin QryMes.Close; QryMes.Sql.Text := 'select sum(valor)as "+" from lancamento where Tipo = 1' + ' and extract(year from pagamento) = extract(year from current_date)' + ' and extract(month from pagamento) = extract(month from current_date)'; QryMes.Open; end; With QryMes2 do Begin QryMes2.Close; QryMes2.Sql.Text := 'select sum(valor)as "-" from lancamento where Tipo = 0 and ' + 'extract(year from pagamento) = extract(year from current_date)' + 'and extract(month from pagamento) = extract(month from current_date)'; QryMes2.Open; End; //TxtMes.text := ( (FloatToStr((QryMes.FieldByName('sum').AsFloat) - (QryMes2.FieldByName('sum').AsFloat)) )); TxtMes.Value := QryMes.FieldByName('+').AsFloat - QryMes2.FieldByName('-').AsFloat; Bom a segunda parte esta resolvida mas falta a primeira parte desse Post Pois aqui eu queria salvar e já convertendo para float, mas fazendo o programa ler em vez de "," eu lê ".", fiz dessa maneira: Add (AnsiReplaceStr(Format('%.2f',[TxtVal.Text]), ',', '.')); Mas ai dá esse erro: E agora? -
(Resolvido) Problema ao mostrar valores monetários em edits...
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
É Micheus realmente é também para formatar os Edits são duas coisas que eu não consiguo fazer. 1º Queria ver como eu faço para formatar no Edit e salvar, utilizei daquele jeito que foi feito no Tópico, mas não deu certo ele está dando esse erro. Foi dessa maneira que eu fiz: Add (AnsiReplaceStr(Format('%.2f',[TxtVal.Text]), ',', '.')); Erro Ai... 2º Quando eu abro ele me dá esse erro,'250,50' is not a valid integer value mas pelo que eu vi o erro é onde eu faço as instruções para mostrar nos Edits, mas esse procedimento não estou entendendo mudei algumas coisas do "+" e "-", mas nada como eu prosiguo, dá uma pista para eu tentar desvendar! Então o Problema seria aqui: TxtTlDia.text := ((FloatToStr((QryTotais.FieldByName('+').AsFloat) - (QryTotais2.FieldByName('-').AsFloat)) )); -
Bom vamos para mais um probleminha. No meu formulário do caixa onde faço os lancamentos de entradas e saidas de valores teria que ajustar umas coisas que não estou conseguindo! 1º>Primeiramente, nesse Tópico que foi resolvido eu fiz uma lançamento de por exemplo: 250,50 e na hora que eu abro o formulário do caixa como eu assim que abro ele me mostra os lancamento do dia e somando os valores nos edits abaixo, mas ele dá esse erro: Esse é um procedimento que eu fiz o AtualizaCaixa para me atualizar e mostrar no DbGrid (DbgCaixa) Ligado em um DataSource (DtsCaixa) e IbQuery (QryCaixa): procedure Tfrmcai.AtualizaCaixa; begin With QryCaixa do Begin QryCaixa.Close; QryCaixa.Sql.Text := 'Select * from lancamento where Pagamento = Current_date'; QryCaixa.Open; end; //Soma o saldo do Dia With QryTotais do Begin QryTotais.Close; QryTotais.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento = Current_date'; QryTotais.Open; end; With QryTotais2 do Begin QryTotais2.Close; QryTotais2.Sql.Text := 'Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = Current_date'; QryTotais2.Open; End; TxtTlDia.text := ((FloatToStr((QryTotais.FieldByName('+').AsFloat) - (QryTotais2.FieldByName('-').AsFloat)) )); // Saldo Total With QrySaldo do Begin QrySaldo.Close; QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento is not null'; QrySaldo.Open; end; With QrySaldo2 do Begin QrySaldo2.Close; QrySaldo2.Sql.Text := 'Select sum(Valor)as "-" From Lancamento where tipo = 0 and pagamento is not null'; QrySaldo2.Open; End; TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) )); // Saldo Anterior With QryAnterior do Begin QryAnterior.Close; QryAnterior.Sql.Text := 'select sum(valor) from lancamento where Tipo = 1' + ' and extract(year from pagamento) = extract(year from current_date)' + ' and extract(month from pagamento) = extract(month from current_date) -1'; QryAnterior.Open; end; With QryAnterior2 do Begin QryAnterior2.Close; QryAnterior2.Sql.Text := 'select sum(valor) from lancamento where Tipo = 0 and ' + 'extract(year from pagamento) = extract(year from current_date)' + 'and extract(month from pagamento) = extract(month from current_date) -1'; QryAnterior2.Open; End; TxtAnterior.text := ( (FloatToStr((QryAnterior.FieldByName('sum').AsFloat) - (QryAnterior2.FieldByName('sum').AsFloat)) )); // Saldo Total do Mês With QryMes do Begin QryMes.Close; QryMes.Sql.Text := 'select sum(valor) from lancamento where Tipo = 1' + ' and extract(year from pagamento) = extract(year from current_date)' + ' and extract(month from pagamento) = extract(month from current_date)'; QryMes.Open; end; With QryMes2 do Begin QryMes2.Close; QryMes2.Sql.Text := 'select sum(valor) from lancamento where Tipo = 0 and ' + 'extract(year from pagamento) = extract(year from current_date)' + 'and extract(month from pagamento) = extract(month from current_date)'; QryMes2.Open; End; TxtMes.text := ( (FloatToStr((QryMes.FieldByName('sum').AsFloat) - (QryMes2.FieldByName('sum').AsFloat)) )); // Para quando for negativo mostrar em vermelho o saldo do dia If StrToInt(TxtTlDia.text) < 0 Then TxtTlDia.font.color := ClRed Else TxtTlDia.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo do Total If StrToInt(TxtSoma.text) < 0 Then TxtSoma.font.color := ClRed Else TxtSoma.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo Anterior If StrToInt(TxtAnterior.text) < 0 Then TxtAnterior.font.color := ClRed Else TxtAnterior.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo do Total do mes If StrToInt(TxtMes.text) < 0 Then TxtMes.font.color := ClRed Else TxtMes.font.color := clBlack; //TxtTlCaixa.text := (TxtTlDia.text + TxtSaldo.text); mostrar os resultados de dois em um end;
-
(Resolvido) Como Salvar um campo atribuindo um caption nele e o v
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Ok Resolvido Obrigado pela ajuda e uma aulinha rápida Micheus, acabei aprendendo um pouco mais e o que eu nem sabia! Bom o que foi feito para resolver o problema dê incial do assunto que era o erro: Bom os valores a serem gravados eram separados por "," (Virgula) e então ele estava lendo dessa maneira: Então em 250,00 ele estava lendo essa separação Para resolver foi feito o seguinte fez o programa lê a "," (Virgula) como "." (Ponto), então ficou assim: E foi colocado em uso a unit StrUtils -
(Resolvido) Como Salvar um campo atribuindo um caption nele e o v
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
É que eu fui fazendo uns testes, com o tipo de formatação e assim que você me passou dá aquele mesmo erro do incio: SQL Error code = - 804 Count of columns does not equal count of values Está dizendo que tem mais colunas tipo no vcpo do que no Vvlr, mas já fiz de tudo e nada, se possivel você me ajudar ou analisar on-line, agradeço. :unsure: :huh: -
(Resolvido) Como Salvar um campo atribuindo um caption nele e o v
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
robinhocne, como você pode agora observar, esta mensagem "falando" apenas do caracter "%" pode ficar meio vaga e de difícil auxílio na solução. Mas, com o pouco que avançamos on-line, já deu para perceber que ela deve-se ao fato de na sua string SQL haver a sequência "%.2' como um dos parâmetros. Baseado nisto, e refletindo um pouco sobre a questão, fica logo claro que há algum problema com aquela parte em que o número é formatado utilizando a função Format. Bom, a única possibilidade de esta sequência ter aparecido deste modo é que ela não tenha sido entendida pela função e eu pediria para você confirmar ser acrescentou o "f" após a sequência: Add (Format('%.2f', [tblPar.Fields[02].AsFloat])); A sua ausência seria a primeira explicação para o "problema". Abraços Está sim, esta dessa maneira: Add (FormatFloat('%.2f', tblPar.Fields[02].AsFloat)); -
(Resolvido) Como Salvar um campo atribuindo um caption nele e o v
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Micheus, está dando esse erro: -
(Resolvido) Como Salvar um campo atribuindo um caption nele e o v
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Bom andei pesquisando muito sobre isso e conversei com um amigo meu, e ai ele comentou que no banco ele salva em vez de virgula ponto, e ai para eu fazer uma função que mude a virgula que é gerada da parcela para ser o ponto, achei uma parecida e coloquei algumas coisas, mas não sei como vou usar sobre essa linha: Add (#39 + FormatFloat('#,##0.00', tblPar.Fields[02].AsFloat) + #39); Essa é a função: function StringToFloat(s : string) : Extended; { Filtra uma string qualquer, convertendo as suas partes numéricas para sua representação decimal, por exemplo: 'R$ 1.200,00' para 1200,00 '1AB34TZ' para 134} var i :Integer; t : string; SeenDecimal,SeenSgn : Boolean; begin t := ''; SeenDecimal := False; SeenSgn := False; {Percorre os caracteres da string:} for i := Length(s) downto 0 do {Filtra a string, aceitando somente números e separador decimal:} if (s[i] in ['0'..'9', '-','+',DecimalSeparator]) then begin if (s[i] = DecimalSeparator) and (not SeenDecimal) then begin t := s[i] + t; SeenDecimal := True; end else if (s[i] in ['+','-']) and (not SeenSgn) and (i = 1) then begin t := s[i] + t; SeenSgn := True; end else if s[i] in ['0'..'9'] then begin t := s[i] + t; end; end; Result := StrToFloat(t); end; Como adapto ela sobre essa linha? estou mandando um exemplo do projeto, para alguém poder me ajudar? http://www.4shared.com/file/32007545/c7f05...Lancamentos.htm -
(Resolvido) Ajuda em fazer um Update!
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Consegui resolver, fiz dessa maneira: If (QryPratica.RecordCount > 0) then Begin with DtmIza.QryUpPraticas do Begin Close; SQL.Clear; SQL.Add ('Update Praticas'); SQL.ADD ('Set Observacao = ' + QuotedStr(MemoObs.text)); SQL.Add ('where aluno = '+ QuotedStr(txtmat.Text) + ' and Data = '+ QuotedStr(FormatDateTime('dd.mm.yyyy',(StrToDate(TxtData.Text) ) ) ) + ' and Horario = ' + QuotedStr(TxtHor.Text) ); ExecSQL; Transaction.Commit; Select; end; end; MemoObs.Text := ''; -
(Resolvido) Ajuda em fazer um Update!
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
OBS: o erro pode estar aqui ( SQL.Add ('Update Praticas' ) ) ele pegou a seleção pelo nome ou pela matricula e não pelo dia, por isso ele trocou todas as aulas daquele aluno. SQL.Add('WHERE aluno = '+txtmat.Text); mude esta clausula onde voce seleciona o registro SQL.Add('WHERE (aluno = '+txtmat.Text + ') and (dia = ' + <colocar a data especifica >)'); abraço Jhonas, bom deixei só um up, e fiz dessa maneira: Mas ele continua mudando todas as datas cadastradas pela selecionada e cadastrando em todas com a mesma data. Obs.: Para especificar melhor tipo assim, eu teria que pegar a data e horario dá aula para cadastrar. -
Bom, sei mexer pouco com esse negocio de Update, e tenho que fazer assim em um update. Preciso salvar um campo de Observação que é da tabela de Praticas fazendo isso no form dos Alunos, então fiz assim, eu vizualizo as aulas marcadas dos alunos e tipo assim eu escolho a linha lá dá data e horario dá aula do aluno para colocar a Observação, clicando nessa linha eu mostro os seguinte campo nos edits, o campo do codigo do instrutor, categoria, data e horario da aula, ai escrevo a observação em um memo que coloquei, e salva em um outro botão só para isso, mas primeiro ele salvou em todas as aulas daquele aluno a observação e segundo ele trocou todos os horários pelo um mesmo dia do aluno, esse é o que eu fiz, preciso de ajuda de alguém....! :unsure: Aqui eu fiz um up para cada campo, mas acho que fiz errado :huh: procedure Tfrmalunos.SpbSalvaClick(Sender: TObject); begin If (QryPratica.RecordCount > 0) then Begin with DtmIza.QryUpMemo do Begin Close; SQL.Clear; SQL.Add ('Update Praticas'); SQL.ADD ('Set Observacao = ' + QuotedStr(MemoObs.text)); SQL.Add ('where aluno = '+txtmat.Text); ExecSQL; Transaction.Commit; Select; end; end; If (QryPratica.RecordCount > 0) then Begin with DtmIza.QryUpIns do Begin Close; SQL.Clear; SQL.Add ('Update Praticas'); SQL.ADD ('Set Instrutor = ' + QuotedStr(TxtIns.text)); SQL.Add ('where aluno = ' + txtmat.text); ExecSQL; Transaction.Commit; Select; end; end; If (QryPratica.RecordCount > 0) then Begin with DtmIza.QryUpCat do Begin Close; SQL.Clear; SQL.Add ('Update Praticas'); SQL.ADD ('Set Categoria = ' + QuotedStr(TxtCateg.text)); SQL.Add ('where aluno = ' + txtmat.text); ExecSQL; Transaction.Commit; Select; end; end; If (QryPratica.RecordCount > 0) then Begin with DtmIza.QryUpHora do Begin Close; SQL.Clear; SQL.Add ('Update Praticas'); SQL.ADD ('Set Horario = '+(QuotedStr(FormatDateTime('hh:nn',(StrToDate(TxtHor.Text) ) ))) ); SQL.Add ('where aluno = ' + txtmat.text); ExecSQL; Transaction.Commit; Select; end; end; If (QryPratica.RecordCount > 0) then Begin with DtmIza.QryUpData do Begin Close; SQL.Clear; SQL.Add('UPDATE Praticas'); SQL.Add('SET Data = '+(QuotedStr(FormatDateTime('dd.mm.yyyy',(StrToDate(TxtData.Text) ) ))) ); SQL.Add('WHERE aluno = '+txtmat.Text); ExecSQL; Transaction.Commit; Select; end; end;
-
só para não gerar confusão para o robinhcne, vamos esclarecer que o relevante no exemplo é o SELECT, ou seja fazer um SUM na tabela em questão, com os campos desejados e filtrando na cláusula WHERE as informações necessárias como a data desejada. É que commandtext é propriedade dos componente TClientDataSet e TADOCommand (por exemplo) e o robinhocne utiliza componentes ZeosLIb. Abraços Eu Utilizo os componentes do InterBase. Consegui resolver! Fiz dessa maneira: Coloquei para vizualizar no edit mesmo: With QryTotais do Begin QryTotais.Close; QryTotais.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento = Current_date'; QryTotais.Open; end; With QryTotais2 do Begin QryTotais2.Close; QryTotais2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = Current_date'; QryTotais2.Open; End; TxtTlDia.text := ( (FloatToStr((QryTotais.FieldByName('+').AsFloat) - (QryTotais2.FieldByName('-').AsFloat)) )); // Saldo Total With QrySaldo do Begin QrySaldo.Close; QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 '; QrySaldo.Open; end; With QrySaldo2 do Begin QrySaldo2.Close; QrySaldo2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0'; QrySaldo2.Open; End; TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) )); // Para quando for negativo mostrar em vermelho o saldo do dia If StrToInt(TxtTlDia.text) < 0 Then TxtTlDia.font.color := ClRed Else TxtTlDia.font.color := clBlack; // Para quando for negativo mostrar em vermelho o saldo do Total If StrToInt(TxtSoma.text) < 0 Then TxtSoma.font.color := ClRed Else TxtSoma.font.color := clBlack; Mas gostaria de atribuir mais duas vizualizações para o Usuário, só preciso de ajuda para terminar! Pois queria mostrar em outro edit o saldo do mes anterior o saldo total do mes anterior, sei que mais ou menos fica assim, só preciso de ajuda para que como eu faço para ele somar só o do mes anterior: No bando de dados eu tenho o campo pagamento que me fala qual o dia do que foi pago ou quitado! With QrySaldo do Begin QrySaldo.Close; QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento = ....?'; QrySaldo.Open; end; With QrySaldo2 do Begin QrySaldo2.Close; QrySaldo2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = ....?'; QrySaldo2.Open; End; TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) )); E também para somar o total do mes que já foi lancado, tipo somar o do decorrente mes: With QrySaldo do Begin QrySaldo.Close; QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento = ....?'; QrySaldo.Open; end; With QrySaldo2 do Begin QrySaldo2.Close; QrySaldo2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = ....?'; QrySaldo2.Open; End; TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) )); Resolvido
-
Ok, Erso: Fiz dessa maneira: procedure Tfrmcai.TotalCaixa; Var Valor : Real; begin Valor := 0; DtmIza.QryIza.First; While not DtmIza.QryIza.Eof Do Begin Valor := Valor + DtmIza.QryIza.FieldByName('Valor').AsFloat; DtmIza.QryIza.Next; End; TxtTlDia.Text := FormatFloat('##0.00',Valor); end; Fiz uma procedure para total de caixa. No Banco de dados na tabela de lancamentos só tenho o campo valor, que assimfica armazenado os valores lançados e baixados. O DtmIza é o meu banco de dados e a QryIza e minha IbQuery que faço a conexão com o banco de dados, e o TxtTlDia é o Edit para mostrar o valor somado do dia: Agora como eu vou fazer a soma dos valores lançados do dia: Coloquei três campos que queria retorna para o usuário seria o: Saldo do Dia > no caso as somas de lancamento que foi feito no dia Saldo Anterior > no caso o saldo do dia Anterior Saldo Total do Caixa > no caso o saldo somado do Saldo do Dia e Do anteiror Preciso de ajudas!? :unsure:
-
Tenho um formulário de libro caixa que mostra os dados que foram lançados do dia, mas gostaria de colocar no fim do DbGrid que mostra os valores creditados a soma total do dia no caso somar o que está lancado no dia atual e mostrar o saldo total do caixa do respectivo mês. MAs ai eu queria saber como posso fazer, se eu coloco um outro dbgrid mostrando ou coloco edits para mostrar esses resultados, e como eu faço isso quer dizer os dados?
-
(Resolvido) Consulta com Radiogroups
pergunta respondeu ao Walter Gazzarrini Neto de robinhocne em Delphi, Kylix
Cara eu vou Te passar como eu faço: Eu uso o Firebird 2.0.3 E a conexão eu uso os Componentes: IbTransaction IbDataBase IbQuery > 1º Você faz essa função de Consulta Registro (em uma unit de funcoes se caso você não tiver) O DtmIza é o meu DataModule, aqui se caso você tiver o seu é só mudar o nome e o QryIza é a minha Query resposanvel pela a minha conexão com o banco de dados ai aqui você coloca do jeito que você faz a conexão. function consultaregistros (ptabela, pcampos, pcondicao :string) : boolean; var instrucaosql :string; begin instrucaosql := 'select ' + pcampos + ' from ' + ptabela; if (pcondicao<>'') then begin instrucaosql := instrucaosql+' where ' + pcondicao; end; //showmessage (instrucaosql); with dtmiza.qryiza do begin close; sql.Clear; sql.add (instrucaosql); open; end; result := (not dtmiza.qryiza.IsEmpty); end; > 2º Ai você vai fazer um formulario só de pesquisa padrão! Aqui eu vou colocar o nome dos meus componentes que eu coloquei para você saber quais são. Primeiramente: No Form (Formulário) Name = frmpesquisa Unit = FPesquisa No Fomulário você colocará: TRadioGroup = RboIdx // Caption = Chave Label // Caption = Pesquisar Por: TEdit = TxtLoc DbGrid = DbgPes DataSource = DtsPes TSpeedButton = SpbOk // Caption = Ok TSpeedButton = SpbFec // Caption = Fechar Agora o que tem que fazer com os codigos: Primeiramente Declare na Public e Private igual abaixo: private indice : integer; public tabela, camporetorno : string; end; E coloque em uso abaixo daquele: {$R *.dfm} a unit de funcoes onde foi feito a função de consultaregistro e também coloque o DataModule. Uses Funcoes, FdtmIza Faça uma procedure normal com o nome de: procedure efetuaconsulta (); Aperte Crtl+Sfhit+C e ai coloca os seguintes codigos: procedure Tfrmpesquisa.efetuaconsulta; var instrucaosql:string; a:integer; begin indice := rboidx.ItemIndex; instrucaosql:= 'select '; for a:= 0 to vcpo.count -1 do begin instrucaosql := instrucaosql+vcpo[a]+', '; end; instrucaosql:= copy (instrucaosql,1,length(instrucaosql) -2); instrucaosql:= instrucaosql + ' from ' + tabela + ' order by ' + vcpo[rboidx.itemindex]; with dtmiza.qryiza do begin close; sql.Clear; sql.add (instrucaosql); open; end; txtloc.text := ''; txtloc.setfocus; end; No Edit (TxtLoc) clice duas vezes e coloque os seguintes dados if (length (trim(txtloc.Text))=0) then begin dtspes.dataset.First; end; if (dtspes.dataset.Fields[indice].datatype=ftstring) then begin dtspes.DataSet.Locate(dtspes.DataSet.fields[indice].fieldname,txtloc.Text,[lopartialkey, locaseinsensitive]); end else if (((dtspes.dataset.Fields[indice].datatype=ftdatetime) or (dtspes.DataSet.Fields[indice].datatype=ftdate)) and edata(txtloc.Text)) then begin dtspes.dataset.Locate(dtspes.DataSet.Fields[indice].FieldName,strtodate(txtloc.Text),[locaseinsensitive]); end else begin if (enumero(txtloc.Text)) then begin dtspes.DataSet.Locate(dtspes.DataSet.Fields[indice].FieldName,strtofloat(txtloc.Text),[locaseinsensitive]); end; end; No TRadioGroup (RboIdx) clique duas vezes e coloque esses dados procedure Tfrmpesquisa.rboidxClick(Sender: TObject); begin efetuaconsulta(); end; Clique duas Vezes no TSpeedButton (SpbOk) e coloque os seguintes dados: procedure Tfrmpesquisa.SpbOkClick(Sender: TObject); begin retorno := dtmiza.qryiza.fieldvalues [camporetorno]; close; end; No Evento OnDblClick do DbGrid (DbgPes) clique duas vezes e coloque os seguintes dados: procedure Tfrmpesquisa.dbgpesDblClick(Sender: TObject); begin retorno := dtmiza.qryiza.fieldvalues [camporetorno]; close; end; No Evento OnShow do Formulário de Pesquisa (FrmPesquisa) digite: procedure Tfrmpesquisa.FormShow(Sender: TObject); begin with rboidx do begin items.assign (vvlr); itemindex :=0; end; end; Bom esse vvlr é uma StringList: Vai no Formulário Principal seu e declare uam variavel abaixo do name do formulario e declare vcpo, vvlr : tstringlist; Ainda no Formulário de Principal vai em Events e no evento OnCreate digite: procedure Tfrmprincipal.FormCreate(Sender: TObject); begin Vcpo := tstringlist.Create; // alocando memoria para o vcpo e vvlr Vvlr := tstringlist.create; end; Bom Esses são os dados que eu uso para fazer os comando da busca! Agora no Formulário em que você quer fazer as busca no botão de pesquisa digite (Esses é os dados que vão aparecer no formulário de pesquisa, ai peguei um de exemplo:) with vcpo do begin clear; add ('Codigo'); add ('Nome'); add ('Cpf'); add ('Processo'); end; with vvlr do begin clear; add ('Código'); add ('Nome'); add ('Cpf'); add ('Processo'); end; with TFrmPesquisa.create (application) do begin try tabela := 'alunos'; camporetorno := 'codigo'; showmodal; finally free; end; end; if (retorno<> '') then begin inherited; LeRegistro(); end; No Vcpo você vai colocar os dados que você vai querer buscar e no Vvlr são os dados que vão Aparecer no RadioGroup e no DbGrid ai no caso você pode escrever do jeito normal (os nomes) Acho que você vai ter que fazer mais uma função na unit de funcoes, isso é para ler o banco de dados e retornar para o usuario. Function LeDados (Campo : String) : Variant; Function LeDados (Campo : String) : Variant; Var ValorCampo : variant; begin If (Not VarIsNull (dtmiza.qryiza.FieldValues[Campo])) Then begin ValorCampo := dtmiza.qryiza.FieldValues[Campo]; end Else begin ValorCampo := '0'; end; Result := ValorCampo; end; Volte no formulário em que você está efetuando a pesquisa e faz uma procedure LeRegistro e aperte o Crtl+Sfhit+C e digite: Consultaregistros('Alunos', 'Codigo, Categoria, Nome, Rg, Uf_Rg, Emissor','Codigo =' + Retorno); TxtMat.text := Ledados ('Codigo'); TxtCth.Text := LeDados ('Categoria'); TxtNom.text := LeDados ('Nome'); TxtRg.text := LeDados ('Rg'); TxtUf2.text := LeDados ('Uf_Rg'); CboOrg.text := LeDados ('Emissor'); end; end; Então aqui ele retorna os dados que estão salvos para os Respectivos edits (TxtMat, TxtCth etc). No formulário em que você for fazer as busca não esqueça de colocar em uso o Funcoes o Formulário Principal, no caso o nome da unit dele e o de Pesquisa no caso aqui o FPesquisa. Bom é muitas coisas que tem que fazer, mas espero que dê certo, você tem o meu MSN se caso de duvida é só chamar ou postar para todos te ajudar, caso não consigua semana que vem estarei mas tranquilo pois tenho vestibular sabado agora e ai eu mando um exemplo. -
(Resolvido) Como Salvar um campo atribuindo um caption nele e o v
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Fiz varias vezes esse Break- Points e modifiquei umas coisas para ver se era mas nada até agora, será que não tem outra maneira de modificar isso? Quer dizer esse metodo! -
(Resolvido) Como Salvar um campo atribuindo um caption nele e o v
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
aquele com valor fixo, não é?! Se sim, sinal que realmente havia algum problema com todas aquelas funções. Mas utilizando o format, nem será preciso elas. Bom por esse erro que deu, acho que fala que tem mais colunas das quais informada, mais ou menos assim! é isso mesmo, você já passou por este erro anteriormente (se bem me lembro).É interessante, porque desta vez, não estão faltando parâmetros como da outra vez: você adiciona 6 colunas à vcpo e 6 valores à vvlr. :huh: E neste caso, eu diria que: "agora é com voce" Teria que depurar para "ver" o que está acontecendo lá na procedure IncluirRegistro. Verificar como as listas estão quando vão sendo processadas, como fica a string da instrução SQL. Abraços Micheus tentei de tudo aqui mas nada, até para dar a mensagem de erros antes do erro, mas nada, estou lhe passando os dados da função para você vizualizar: procedure incluirregistro (ptabela:string;pcampos, pvalores:tstringlist); var a:integer;instrucaosql:string; begin instrucaosql:='insert into ' + ptabela + ' ('; for a :=0 to (pcampos.Count-1) do begin instrucaoSQL := instrucaosql+pcampos [a] + ', '; end; instrucaosql:= copy (instrucaosql,1,length (instrucaosql)-2) + ') values ('; for a :=0 to (pvalores.Count-1) do begin instrucaoSQL := instrucaosql+pvalores [a] + ', '; end; instrucaosql:= copy (instrucaosql,1,length (instrucaosql)-2) + '); '; showmessage (instrucaosql); with dtmiza.qryiza do begin close; sql.Clear; sql.add (instrucaosql); execsql; end; end;