Fórum Array #234501
26/05/2004
0
:cry: :cry:
Flavia_mococa
Curtir tópico
+ 0Posts
26/05/2004
Jc
Té +
Gostei + 0
26/05/2004
Flavia_mococa
Eu gostaria de utilizar arrays nas consultas ao banco de dados.
Como quase 90¬ das tabelas deste banco tem um numero elevado de registro acho que seria mais conveniente trabalhar com arrays já que o acesso a memoria é bem mais rápido do que o acesso ao banco.
Meu problema é que eu tenho uma boa noção em array simples sem utilização de banco, mais agora array dinamico com acesso a banco eu não tenho nenhuma noção.
Voce poderia me ajudar?
Procurei alguns tutoriais na net mais achei apenas artigos sobre array simples, que não me ajuda neste caso.
:wink:
Gostei + 0
26/05/2004
Rômulo Barros
Utilizando DBX, você também poderá trabalhar em cache... ... ...
Utilize o método [color=red:31c83ebf8e]SetLength(MeuArray,Query.RecorCount -1)[/color:31c83ebf8e] para criar dinamicamente os seus arrays.
Gostei + 0
26/05/2004
Flavia_mococa
Gostei + 0
26/05/2004
Vinicius2k
Um exemplo do que o UI lhe falou, só não tenho certeza se é exatamente o que vc pretende...
procedure TForm1.Button1Click(Sender: TObject); var nome, email: Array of String; i,n: integer; begin // Determinando o tamanho dos Arrays... n:= ADOQuery1.RecordCount; SetLength(nome, n); SetLength(email, n); // Loop na Query... i:= 0; with ADOQuery1 do begin First; while not Eof do begin nome[i]:= FieldByName(´nome´).AsString; email[i]:= FieldByName(´email´).AsString; Next; inc(i); end; end; // Como exemplo : colocando o Array num Memo... for i:= 0 to (n-1) do Memo1.Lines.Add(nome[i] + ´ - ´ + email[i]); end;
Espero ter ajudado...
T+
Gostei + 0
26/05/2004
Flavia_mococa
Vc´s poderiam me ajudar? :wink:
Gostei + 0
26/05/2004
Vinicius2k
1 - declara o array sem determinar tamanho...
2 - já dentro do procedimento ou função vc determina o tamanho com a função SetLenght()... é vc que vai dizer qual o tamanho e como vc quer atribuir a eles um recordset, a quantidade de elementos do array vai ser a quantidade de registros do recordset...
3 - para atribuir o recordset ao array vc move o cursor para o primeiro registro e faz o loop até q seja final atribuindo o valor do campo do recordset ao array... para saber a qual elemento do array vou atribuir o valor usei um contador ´i´ que é incrementado a cada passagem de registro...
essa é a explicação do código... eh isso q vc quer?
Gostei + 0
26/05/2004
Chico Gois
Ps. Texto retirado da net
Gostei + 0
27/05/2004
Flavia_mococa
procedure TFrmCaixa.Edit3Change(Sender: TObject);
var fornecedor, RazaoSocial, TIPODOCRF, NUMDOCRF, Fantasia: Array of String;
f,r: integer;
begin
f:= DModul.QForn.RecordCount;
SetLength(fornecedor, f);
SetLength(RazaoSocial, f);
SetLength(Fantasia, f);
SetLength(TIPODOCRF, f);
SetLength(NUMDOCRF, f);
//Loop na ADOQuery
r:=0;
DModul.QForn.First;
while not eof do
Begin
fornecedor[f]:=DModul.QForn //meu problema foi exatamente aqui
Nao consegui achar a propriedade FieldByName para seguir com o código...
E depois que eu terminar esta parte do codigo posso fazer uma consulta neste array ? Como proceder?
Desculpe postar estas perguntas bovas, mais é que tenho duvidas...
:roll: :wink:
Gostei + 0
27/05/2004
Vinicius2k
Não se preocupe em perguntar, é assim q aprendemos... :wink:
Não vejo muita lógica em vc não encontrar a propriedade FieldByName... se vc estiver tendo alguma mensagem de erro do compilador é um problema e postar aqui a mensagem vai ajudar-nos a entender, mas se vc só está preocupada por ela não ter aparecido no CodeCompletion do Delphi, não se preocupe, isso as vezes acontece dependendo de qual o tipo de variável vc está atribuindo o valor... pode seguir seu código que vai dar certinho...
Após montado o Array vc pode efetuar a consulta, jogando os dados numa TStringList (no exemplo q lhe passei joguei num memo)... Apenas sugiro que vc pesquise, talvez aqui mesmo, sobre StringLists pq desta classe eu não entendo quase nada, então não devo poder ajudar muito...
Qualquer problema poste novamente !
T+
Gostei + 0
28/05/2004
Bacalhau
type forn = record
fornecedor : String;
RazaoSocial : String;
TIPODOCRF : String;
NUMDOCRF : String;
Fantasia : String;
end; // fim da definição de registo
var F : array of forn;
A partir daqui, fica mais fácil visualizarmos o nosso trabalho. Espero ter ajudado e não complicado... :oops:
Gostei + 0
28/05/2004
Aroldo Zanela
Qual é o propósito de se utilizar arrays no seu caso agora? Ou seja, quais são os requisitos funcionais que você precisa satisfazer? Dependendo do que você precisa resolver em termos de negócio, acredito que o Delphi permite utilizar formas mais simples e de melhor performance.
Gostei + 0
28/05/2004
Nildo
Você quer um acesso rápido ao banco de dados e por isso quer salvar tudo na memória né? Ok, não se esqueça que você vai ter que ler todo o banco pra poder jogar nessa Array... Ahh e não se esqueça que pode acabar a memória disponível, sendo que você vai colocar Todo o banco lá...
Gostei + 0
28/05/2004
Flavia_mococa
Como no banco de dados que uso as tabelas tem um numero elevado de registro uma consulta utilizando a adoquery fica muito lenta. Entao eu queria que na criação do form (no evento oncreat do form) fosse ´criada´ a array com todos os dados da tabela que vou usar para fazer as consultas, depois no evento onexit do form eu iria ´destruir´ esse array liberando a memoria para ser usada novamente.
Voces estao sendo o maximo em me ajudar.
Desculpe estar fazendo tantas perguntas, mais é que tive apenas uma pequena noção de delphi na escola onde estudo, gostei e agora estou tentando me aprofundar nesta linguagem.
Muito obrigada mesmo pela força que estao me dando :wink:
Gostei + 0
28/05/2004
Nildo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)