Fórum Gravar conteúdo de um array via SQL #232089
13/05/2004
0
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
Curtir tópico
+ 0Posts
13/05/2004
Cabelo
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
14/05/2004
Yankleber
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
14/05/2004
Yankleber
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
Clique aqui para fazer login e interagir na Comunidade :)