Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Giba

comparar valores na DBGRID????

Recommended Posts

estou mondando um sistema que tem uma tabela no excel, onde estou abrindo ela e jogando numa DBGRID. so que o meu problema esta em manipular a DBGRID. Esse sistema tem q fazer o seguinte: O usuario entra com o 20 valores onde tem que ser comparado com os valores que estão na DBGRID.Eu não estou consequindo fazer as comparações, pq não consigo fazer a DBGRID andar em uma linha so e depois na outra.Agora minha duvida é se. tem como comparar valores de um array com o de uma DBGRID ou eu tenho que comparar direto com a tabela do excel.preciso de ajuda, pq não sei mais aonde procurar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui através de um array da seguinte forma:

 

var quant, i, quant_array, j : integer;   texto : array of String;begin   quant_array := 10; //tamanho do array   SetLength(texto, quant_array); //seta o tamanho do array   Dec(quant_array);   for i := 0 to quant_array do   begin      texto[i] := Edit1.Text; //coloca os valores no array, neste caso coloquei os                                       //mesmos valores em todos os elementos   end;   quant := DBGrid1.FieldCount; //quant de linhas no DBGrid   for i := 0 to quant do   begin      for j := 0 to quant_array do      begin         if DBGrid1.Fields[2].AsString = texto[j] Then //se for igual ao elemento do array            [COLOR=red]Label1.Caption := 'ok';[/COLOR]      end;     [COLOR=red] Table1.Next; //passa para o próximo registro do DBGrid[/COLOR]   end;   Table1.First; //volta ao primeiro registroend;
Ainda não sei como fazer com uma planilha do excel, mas quando souber, por favor me ensine.

 

Abraços,

 

Thiago.

<{POST_SNAPBACK}>

amigo TMFERREIA, você me ajudou muito, muito mesmo, so que eu não entendi uma coisa no seu codigo.

 

O "Label1.Caption := 'ok';" vai mudar oq, o Label na DBGRID ou em outro lugar.pq no meu caso, se o valor do array for igual a da DBGRID tera que mudar a cor da fonte e colocar em um contador.

 

E o "Table1.Next;" vai para proxima linha do DBGRID ou do banco de dados. Bom e aqui é que se estiver mudadndo na DBGRID mesmo, beleza ta oq, mas se tiver mudando na tabela ai complica, pq no meu caso como eu disse estou fazendo em uma tabela do excel.

 

Mas fora isso ta tudo certo você me ajudou bastante, a comparação esta dando certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Giba, não entendi muito bem.

 

Você tem uma tabela do excel e quer que os registros dela passem para um DBGrid Vazio? Pelo que tinha entendido, o DBGrid já estava preenchido com os valores de uma tabela e você queria comparar se a linha do excel existia no DBGrid.

 

Se você quiser preencher o DBGrid, você não deverá usá-lo (pelo menos eu acho!), pois o DBGrid é preenchido pelos dados de uma tabela. Não consegui preencher com outros dados. Mas se você usar uma StringGrid (Aba Additional) aí dá para fazer fácil.

 

Responda-me e vamos ver o que conseguimos fazer...

 

Thiago

<{POST_SNAPBACK}>

e mais ou menos isso, eu tenho uma tabela do excel sim e estou abrindo em um DBGRID, normal.

so que eu quero comparar esse falor que eu joguei na DBGRID com os valores que o usuario digitar, onde esse valores serão armazenado em um array.

 

O sistema é um sequinte, o usuario entra com 20 valores que é jogado em um array e tem a tabela do Excel que eu estou abrindo ela na DBGRID, que os valores vao de 1 ate 50 colunas e linha não tem fim.

 

oq é pra fazer: é pra comprarar o primeiro valor do array com os 50 valores q estão nao DBGRID. então, se os valores forem iguais, ele vai pra um contador. e se entende que o valor estava certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abrir com excelNo form você coloca um DBGRID, um componente ADOTABLE e DATASOURCE.ai glica no DBGRID e va no objeto inspector / data source, você faz referencia com o seu DATASOURCE1.Agora clica no seu DATASOURCE1 e va no objecto inspector/data set você faz referencia com to componente ADOTABLE1.Agora você clica no ADOTABLE1 e va no object inspector/ConnectionString, abrirá um form, va em Build e na primeira aba, que é Provedor, selecione e de um duplo click no Microsoft jet 4.0 OLE DB Provider, altomaticamente vai para a segunda aba, que é conexão, ai você vai colocar o caminho da tabala excel, na senha você pode colocar a opção de senha em branco. Seguindo para terceira aba, que é o avançado você tem que colocar a opção q você desejar "read", "write".E terminando na quarta aba que é, Todas, você da dois clicks em Extended Properties e escre isso aqui "excel 8.0". ai é so dar ok.bom e pra terminar de vez, va em object inspector/ TableDirect/ True,,object inspector/ TableNeme/nome da tabela -> na verdade aqui é o nome da folha do excel.é so isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é isso mesmo, grande, ta fazendo a verificação certa, so que ainta ta com problema. eu dei um debug watch no codigo, e parece que ele esta passando do numero que tinha que ferificar.

 

na tabela do excel são 50 valores, so que meu For vai do 0 ao 50, isso daria 51.

ai eu to degrementando 1 , mas mesmo assim ele vai ate 50

 

o certo é pra ir de 0 a 49, pra fechar 50, mas nao ta dando

 

FOR VL:= 0 TO 19 DO

begin

FOR DB:= 0 TO Form2.AdoTable1.RecordCount - 1 DO

begin

if valores_array[VL] = Form2.DBGrid1.Fields[DB].AsInteger Then

Form2.DBGrid1.Columns[DB].Font.Color:= ClRed;

end;

Form2.ADOTable1.Next;

end;

Form2.AdoTable1.First;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom esse lançe ja consequi resolver, so que agora descobri que falta mais uma condição antes do FOR.nao sei se ta certo fazer assim ??While Form2.ADOtable1.EOF do fOR VL = ...queria que o FOR continuace ate que o ADOtable chegace no final.acho que para isso preciso usar o WHILE, so que nao sei se esta certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta, mas quero saber como eu posso usa-lo.while recordcount.eof do "ta certo isso"como que é a condição pra chegar no final do recordcont.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.