Ir ao conteúdo
  • Cadastre-se

Percorrer banco de dados com lazarus


Posts recomendados

Olá,

Estou fazendo uma aplicação e to com uma dúvida, tenho um banco de dados (MySQL) e nele uma planilha dentro do banco e queria, através do Lazarus (Delphi), percorrer essa planilha campo por campo e contabilizar quantas vezes seu conteúdo aparece, exemplo:

 

           A     B     C     D

100     1     1     2      3

101     1     2     2      3

 

Quero percorrer a linha 100 e contar quantas vezes cada número aparece. Aqui o 1 aparece 2 vezes, o 2 aparece 1 vez e o 3 aparece 1 vez tb.

depois quero que aconteça o mesmo na linha 101, e no fim terei o resultado:

 

1: aparece 3 vezes

2: aparece 3 vezes

3: aparece 2 vezes

 

É como percorrer uma matriz no pascal, isso eu sei, só não sei fazer isso no banco de dados (MySQL).

Se alguém puder me ajudar a pegar essas informações e colocar numa matriz (array, dentro do Lazarus), aí fica fácil a parte da contagem através dos loops.

 

Uma forma resumida de encarar o problema é: como transformo uma planilha de um banco de dados em uma matriz no pascal?

Obrigado.

Link para o comentário
Compartilhar em outros sites

Olá Fazzioni,

Estou utilizando o Zeos.

O que seria o simples? Eu não sei muito de linguagem de banco de dados, só o básico (criar, apagar, modificar). Entendo mais de pascal, por isso queria pegar as informações contidas nos campos do banco e colocar numa matriz em pascal, assim fica mais fácil manipular e quantificar as coisas.

Por exemplo, tenho um banco de dados com 100 linhas e cada linha tem 4 colunas ( A, B, C e D) e existem valores nesses campos.

Eu quero que o sistema vá até a linha que eu determinar, por exemplo a linha 10, e pegue cada valor de cada campo de cada coluna e monte uma matriz no pascal (Lazarus ou Delphi) com esses valores. Claro que tudo isso automatizado, com um click só, como se fosse um loop.

Também gostaria de determinar a linha onde ele vai parar, por exemplo a linha 15.

Assim o sistema percorre 5 linhas do banco de dados, apenas copiando as informações do banco e colando em uma matriz 5x4 no pascal.

Então resumindo fica assim, eu determino as linhas inicial e final e o sistema percorre essas linhas em cada campo, montando uma matriz em pascal idêntica ao banco.

Obrigado!

                                     

 

Link para o comentário
Compartilhar em outros sites

Bom, eu nunca trabalhei com lazarus nem com Zeos,

 

Você ja fez a conexão? está listando os registros em um dbgrid?

 

Coloque um botão e teste estes códigos:


var
  i : integer;
  TBL : TDataSet;
begin

 

//Variavel para receber a tabela, apenas para facilitar

TBL := TABELA;

 

// procura a o registro

if TBL.Locate( /'FIELDNAME/', /VALORDOREGISTRO  ,[]) then

ShowMessage('Reg encontrado');

 

// Percorre os fields e traz os valores

for i := 0 to TBL.Fields.Count -1 do
ShowMessage(TBL.Fields[i].FieldName+#13+TBL.Fields[i].AsString);
 

 

Link para o comentário
Compartilhar em outros sites

Está conectado sim

Os registros aparecem no dbgrid sim

Tentei o código que você fez e deu muitos erros, nem vou listá-los. =(

Tem outras idéias?

Assunto difícil de pesquisar esse...

Tenho uma tabela num banco de dados. Como passo (copio) ela para uma matriz no pascal?

Fica a dúvida.

 

Link para o comentário
Compartilhar em outros sites

tente agora:

 

Adicione a unit: DB


 var
  i : integer;
  TBL : TDataSet;
begin

//Variavel para receber a tabela, apenas para facilitar
TBL := DBGrid1.DataSource.DataSet;

// procura a o registro
// verificando se existe um field chamado "CODIGO"
if tbl.Fields.FindField('codigo') = nil then
  ShowMessage('Campo "Codigo" não existe')
else // Field existe
if TBL.Locate( 'codigo', 10  ,[]) then //Vai para o registro com codigo = a 10
  showMessage('Reg 10 encontrado')
else
  ShowMessage('Reg 10 não encontrado');


//Percorre os fields e traz os valores
for i := 0 to TBL.Fields.Count -1 do
ShowMessage('Field '+IntToStr(i)+': '+TBL.Fields[i].FieldName+#13+' Valor: ' +TBL.Fields[i].AsString);
 

 

Link para o comentário
Compartilhar em outros sites

@Fazzioni

Teve 7 erros...

Esses 2 em relação ao TDataSet.

Error: Identifier not found "TDataSet"

Error: Error in type definition

No caso do Zeos é "ZDataset", eu mudei e deu os mesmos erros.

 

os outros erros é em relação as propriedades da variável TBL.

Error: Illegal qualifier 

ele se refere as palavras Fields e Locate (TBL.Fields e TBL.Locate) toda vez que elas aparecem.

 

 

Link para o comentário
Compartilhar em outros sites

@Fazzioni

A versão é ZeosDBO 7.1.4 stable

A classe do componente é TZQuery

 

Na unit, onde declara os Types ele lista até as colunas da planilha assim

type

  { TTabGlobal }

  TTabGlobal = class(TDataModule)               // coloquei a conexão, query e datasounce num data module.
    dtsResultadoslf: TDataSource;
    conexao: TZConnection;
    qryResultadoslf: TZQuery;
    qryResultadoslfConcurso: TLongintField;  // a partir daqui são as colunas que vai até 25.
    qryResultadoslfdz1: TLongintField;
    qryResultadoslfdz2: TLongintField;
    qryResultadoslfdz3: TLongintField;     

 

A ideia é fazer o sistema percorrer essas 25 colunas e copiar seu conteúdo num Array.

Link para o comentário
Compartilhar em outros sites

@Fazzioni

Não deu não..

Não consigo nem pegar uma informação do banco e colocar numa variável? digamos sem percorrer, mas diretamente, assim:

a1:= "informação da linha 1 coluna a";

b1:= "informação da linha 1 coluna b";

c1:= "informação da linha 1 coluna c";

...

 

tem como?

 

Link para o comentário
Compartilhar em outros sites

Deu certo! Alterei algumas coisas e consegui. Ficou assim:

procedure TForm1.btnTransfClick(Sender: TObject);
Const
  //Tab character
  Delim = CHR(5);
var
 j,x,c : integer;
  TBL : TDataSet;
  S: String;


begin
 TBL := DBGrid1.DataSource.DataSet; //Variavel para receber a tabela, apenas para facilitar.
 c:= StrToInt(edConcurso.text);            //Variavel q incrementa em cada loop passando para próxima linha.


for x:= 1 to 10 do  //Percorre 10 linhas.
begin

// verificando se existe um field chamado "concurso"
if TBL.Locate('concurso', edConcurso.Text  ,[]) then   //Vai para o registro com codigo = a "edConcurso"
  showMessage('Concurso '+edConcurso.text+' encontrado')
else
  ShowMessage('Concurso '+edConcurso.text+' não encontrado');


//Percorre os fields e traz os valores
  for j := 0 to TBL.Fields.Count -1 do
   S:= S + TBL.Fields [j].AsString + Delim;


   Memo1.Lines.Add(S);  
   c:=c+1;
   edConcurso.Text:= IntToStr(c);
   S:='';
end;
end;
end.

 

Agora que consigo listar essas informações, é só colocar elas num Array, como eu queria!

Obrigado Fazzioni.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...