Fórum Variável não recebe o valor #211691
04/02/2004
0
Query2.SQL.Clear; Query2.SQL.Add(´SELECT Id FROM [dbo].[Movimentos]´); Query2.Open; Query2.Last; if Query2.RecordCount < 1 then IDe := 0; IDe := Query2.FieldByName(´Id´).Value + 1;
Minha variavel IDe é do tipo integer e meu Banco é MS SQL, porém, TODAS as minhas variáveis que deveriam pegar algum valor não só do banco como no programa... não estão pegando os valores... estão zeradas...
Que erro maluco é esse?
Desde já agradeço.
[b:813c22df7b][color=red:813c22df7b]Título editado pelo Moderador (AZ) - Removido: ´Nao acho qual o erro! ! !´[/color:813c22df7b][/b:813c22df7b]
Titanius
Curtir tópico
+ 0Posts
04/02/2004
Aroldo Zanela
Execute a instrução abaixo no Query Analyzer e poste aqui a última linha:
SELECT Id FROM Movimentos
Também há um erro de lógica no fragmento acima. Reveja e se não identificar, avise.
Gostei + 0
04/02/2004
Titanius
0, Deposito, 04/02/2004, Pagamento motorista, 200.0, 1500.0
na ordem dos campos:
Id( inteiro : 8 ) , Historico( char : 30 ) , Data( char : 20 ) , Obs( text ) , Valor( float : 8 ) , ValorAtual( float : 8)
quanto ao erro no código vi qual é, arrumei para o seguinte:
Query2.SQL.Clear; Query2.SQL.Add(´SELECT * FROM Movimentos´); Query2.Open; Query2.Last; if Query2.RecordCount < 1 then IDe := 0; IDe := IDe + 1;
o Delphi, na hora que eu debugo nao entra na parte da variavel IDe := IDe + 1;, estranho d+...
Ainda não consegui arrumar isso de jeito nenhum...
Abraços,
Gostei + 0
04/02/2004
Aroldo Zanela
IDe := 0; // Inicializa com zero Query2.SQL.Clear; Query2.SQL.Add(´SELECT * FROM Movimentos´); Query2.Open; Query2.Last; // Vai para o último registro if Query2.RecordCount < 1 then IDe := 0; // Se não retornar nenhum registro IDe := IDe + 1; // Incrementa com + 1 -> Inc(IDe); ShowMessage(IntToStr(IDe)); // Vai mostrar 1
Por favor, confirma essas informações.
Gostei + 0
05/02/2004
Titanius
Realmente o seu código está mais enxuto... porém continua dando o erro... e é exatamente o que você descreveu que eu quero que faça..
Segue uma imagem da tela do Delphi, na hora de debugar:
[img:490f094c40]http://www.rodoviariolider.com.br/img/imgdelphi.gif[/img:490f094c40]
Como dá pra perceber, ele não entra nas variáveis de jeito nenhum.. acho que meu delphi, meu arquivo.. alguma coisa está errada.. pois nenhuma variavel esta recebendo valores...
Muito estranho isso...
Abraços,
Gostei + 0
05/02/2004
Beppe
Gostei + 0
05/02/2004
Titanius
Abraços,
Gostei + 0
05/02/2004
Beppe
Gostei + 0
05/02/2004
Aroldo Zanela
Teste o seguinte:
With Query2 do Close; SQL.Text := ´SELECT Max(id) FROM Movimentos´; // Pega o maior Open; end; IDe := Query2.FieldByName(´ID´).AsInteger + 1; // Incrementa With Query2 do Close; SQL.Text := ´SELECT Max(id) FROM Contas WHERE descricao = ´ + QuotedStr(ComboBox2.Text); Open; end; IDConta := Query2.FieldByName(´ID´).AsInteger;
Gostei + 0
05/02/2004
Pantoja
Gostei + 0
05/02/2004
Titanius
Valeu pela paciencia de todos e pelas dicas...
Brigadao...
Abraços,
Gostei + 0
05/02/2004
Allen74
Pelo que pude perceber do comentário no seu código na imagem que você postou, o objetivo de sua primeira Query é obter o próximo ID para a tabela de movimentos. Imagino que você queira implementar um tipo de auto-incremento para a mesma. Se for este o caso, o ideal seria avaliar se o banco de dados que você utiliza não fornece este recurso, como os campos AUTO_INCREMENT no MySQL, os GENERATORS no Oracle ou IDENTITY no SQLServer.
Em todo caso, sem a utilização de campos auto-incrementáveis, a melhor forma de fazê-lo seria seguindo a última sugestão do Aroldo, na qual eu faria uma única modificação, acrescentando um nome para o campo, pois dependendo do banco de dados o nome da coluna não permanecerá o mesmo quando é aplicada uma fórmula:
With Query2 do Close; SQL.Text := ´SELECT Max(id) AS valor FROM Movimentos´; // Pega o maior Open; end; IDe := Query2.FieldByName(´valor´).AsInteger + 1; // Incrementa
O seu código original realmente tinha um problema de lógica, se o funcionamento que você deseja é este do código acima, ficou faltando um else na sua primeira versão do código. O correto seria:
if Query2.RecordCount < 1 then IDe := 0 else IDe := Query2.FieldByName(´Id´).Value + 1;
Agora, quanto ao problema que você está tendo com os breakpoints e com a inspeção da variável IDe:
O problema é mais ou menos o que o Beppe te disse. No seu código (pelo menos na parte que está visivel na figura) somente existe uma atribuição e um incremento para a variável IDe, o valor atribuido por ela [i:8e65b9f9a9]aparentemente[/i:8e65b9f9a9] não está sendo utilizado em nenhum outro lugar do código.
Então, o que ocorre é que após a compilação e a posterior linkedição de seu programa, o Delphi, no processo de otimização do córido irá desconsiderar esta parte do código que não será realmente utilizada. Por isso o breakpoint que você colocou nas variáveis ficou inválido (repare no X amarelo no meio do círculo vermelho). Então durante a depuração, seu código não irá parar nestes breakpoints.
Se você reparar bem, o Delphi te indica quais linhas de código são executáveis na janela de edição: são os pequenos pontos azuis no lado esquerdo de cada linha. Qualquer breakpoint que você colocar nesta linha será válido. Para ilustrar melhor o problema, segue um exemplo:
Na figura abaixo, você verá que após a compilação, nenhuma das linhas do código são válidas. Isso porque o conteúdo da variável I não é realmente utilizado para nenhuma operação realmente útil no código.
[img:8e65b9f9a9]http://www.aef.com.br/ide01.gif[/img:8e65b9f9a9]
Já no código abaixo, o simples fato de incluir um IF que irá avaliar o conteúdo desta variável e realizar uma operação ou outra torna as linhas de atribuição válidas.
[img:8e65b9f9a9]http://www.aef.com.br/ide02.gif[/img:8e65b9f9a9]
Portanto, não se trata de nenhum problema no Delphi. Fique tranquilo quanto a isso. Se mesmo assim sua rotina não estiver funcionando da forma que você idealizou, descreve em maiores detalhes o quê ela deve fazer e poste todo o trecho de código para tentarmos te ajudar.
[]s
Gostei + 0
05/02/2004
Allen74
hehe, parece que meu post chegou atrasado. Enquanto estava escrevendo o texto acima não percebi que você já tinha encontrado a solução, mas mesmo assim, fica aí para esclarecer alguns pontos.
Gostei + 0
05/02/2004
Aroldo Zanela
Muito bem observado. Obrigado.
Gostei + 0
05/02/2004
Titanius
obrigado a todos...
[]s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)