Gravar conteúdo de um array via SQL

Delphi

13/05/2004

Olá!

A minha dúvida é a seguinte.
Eu tenho uma lista (array) e preciso, após o click em um botão, transferir o conteúdo deste array para uma tabela via SQL. Qual a melhor maneira de fazer isso?

Eu tentei executar essa tarefa utilizando um DataSet do meu Datamodule, simplesmente fazendo um loop, e em cada volta do loop, alterando o valor da propriedade InsertSQL, e em seguida chamando os métodos OPEN, INSERT, POST e CLOSE. Mas não deu certo.

Alguma idéia?


Yankleber

Yankleber

Curtidas 0

Respostas

Cabelo

Cabelo

13/05/2004

Caro colega

Os campos deste vetor na tabela são fixos, isto é, sempre será inserido os dados do vetor nos mesmos campos da tabela, se forem, é simples..

primeiro dê um select na tabela que será inserido os campo..

query.sql.add(´select <campos> from <tabela>´);
query.open;
for v_i := 0 to length(<vetor>) - 1 do
begin
query1.sql.clear;
query1.sql.add(´insert into <table>(<campos>) values (<valor do campo 1 no array>, <valor do campo 2 no vetor>, ... , <valor do campo n no vetor>)´;
query1.execsql;
end;

//Não se esuqeça que vc deve utilizar dois DataSets distintos, um vc
//dá um select e outro vc executa os comando de inserção..

sem mais

Cabelo


GOSTEI 0
Yankleber

Yankleber

13/05/2004

Oi cabelo!

Obrigado pela resposta!
Estou contudo, passando por um probleminha ainda a respeito da mesma situação. Quando eu rodo o procedimento pela primeira vez, funciona perfeitamente, mas se eu rodá-lo novamente em seguida ocorre um erro bem na linha onde é executado o open no primeiro dataset. Veja abaixo o fonte:

procedure TFITaxas.BtnGraClick(Sender: TObject);
var z, zz : integer;

begin

  // Deleta todos as taxas referentes ao item selecionado

  DadosSistema.IQryITaxas.SQL.Add(´select * from ITENSTAXAS´);
  DadosSistema.IQryITaxas.Open; ´O erro ocorre aqui, na segunda vez

  with DadosSistema.IQryGen.SQL do
  begin
    Clear;
    Add(´delete from ´);
    Add(´ITENSTAXAS ´);
    Add(´where ORCAMENTO_ID = ´´´ + EdSeq1.Text + ´´´ ´);
    Add(´and ITMITEM_ID = ´´´ + EdSeq2.Text + ´´´ ´);
    Add(´ ´);
  end;

  DadosSistema.IQryGen.ExecSQL;

  if lstSelec.Items.Count <> 0 then
  begin
    for z := 0 to lstSelec.items.count-1 do
    begin
      for zz := 0 to lstDisp.items.count-1 do
      begin
        if lstDisp.items[zz] = lstSelec.items[z] then
        begin
          with DadosSistema.IQryGen.SQL do
          begin
            Clear;
            Add(´insert into ´);
            Add(´ITENSTAXAS ´);
            Add(´(ORCAMENTO_ID,ITMITEM_ID,TIPOTAXA_ID) ´);
            Add(´values (´´´ + EdSeq1.Text + ´´´´ + ´, ´);
            Add(´´´´ + EdSeq2.Text + ´´´´ + ´, ´);
            Add(´´´´ + aDisp[zz] + ´´´´ + ´)´);
            Add(´ ´);
          end;
          DadosSistema.IQryGen.ExecSQL;
        end;
      end;
    end;
    DadosSistema.IBTransaction1.CommitRetaining;
    close;
  end
  else close;
end;


Obrigado pela atenção!


GOSTEI 0
Yankleber

Yankleber

13/05/2004

Oi, sou eu de novo!

Esqueça, já encontrei o erro... é que faltou a seguinte linha antes da mesma onde está dando o erro:

  DadosSistema.IQryITaxas.SQL.Clear;


Valeu!!!


GOSTEI 0
POSTAR