for döngüsü ile kayıt ekleme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

for döngüsü ile kayıt ekleme

Mesaj gönderen ademcicek »

herkse kolay gelsin
(ihale programı yapıyorum.)
benin piyasa fiyat araştırması diye bir tablom var. piyasa fiyat araştırması yapabilmek için öncelikle ihtiyaç listesi ve bu ihtiyaçlara fiyat veren firmalar.

aşağıdaki kodlarda firmaları alıp ihtiyaç listesini alıp her firma için bütün ihtiyaç listesini girdiriyorum. yani 7 firma 20 malzeme olunca toplam 140 tane kayıt insert ediyorum. normalde aşağıdaki kodlar çalışıyordu.
yani 4 fimaya 8 kalem malzeme olunca.

bugün ilk defa 20 kalem malzemeye 7 firma ekleyince program çaktı. daha doğrusu kayıtları 5 dakika gibi bir süre de ekleyebildi.


ben bunu daha hızlı nasıl bir döngü kurarak eklettirebilirim.

veya niye kayıtları geç insert etmiş olabilir.

procedure TForm_Piyasa_Fiyat_Arastirmasi.PageControl_Piyasa_Fiyat_ArastirmasiChange(
Sender: TObject);
var IhaleId, i, j: integer;
FirmaStr: string;
begin
if PageControl_Piyasa_Fiyat_Arastirmasi.ActivePage = TabSheet_Piyasa_Fiyat_Arastirmasi then
begin
with DataModule1 do
begin
IhaleId := ADOQuery_Ihaleid.AsInteger;
FirmaStr := '';
for i := 0 to ListBox_Sag.Items.Count - 1 do
FirmaStr := FirmaStr + #39 + ListBox_Sag.Items + #39 + ',';
if FirmaStr <> '' then
FirmaStr := Copy(FirmaStr, 1, length(FirmaStr) - 1);
ADOQuery_GenelSorgu.Close;
ADOQuery_GenelSorgu.Sql.Clear;
if FirmaStr <> '' then
ADOQuery_GenelSorgu.Sql.Add('delete from Piyasa_Fiyat_Arastirmasi where (id=' +
inttostr(IhaleId) + ') and not (firma_Adi in (' + FirmaStr + '))')
else
ADOQuery_GenelSorgu.Sql.Add('delete from Piyasa_Fiyat_Arastirmasi where (id=' +
inttostr(IhaleId) + ')');
ADOQuery_GenelSorgu.ExecSQL;
ADOQuery_Piyasa_Fiyat_Arastirmasi.Requery();
for i := 0 to ListBox_Sag.Items.Count - 1 do
begin
ADOQuery_GenelSorgu.Close;
ADOQuery_GenelSorgu.Sql.Clear;
ADOQuery_Malzeme.First;
ADOQuery_GenelSorgu.Sql.Add('select count(*) from Piyasa_Fiyat_Arastirmasi where (id=' +
inttostr(IhaleId) + ') and firma_Adi=' + #39 + ListBox_Sag.Items + #39);
ADOQuery_GenelSorgu.Open;
if ADOQuery_GenelSorgu.Fields[0].AsInteger = 0 then
for j := 1 to ADOQuery_Malzeme.RecordCount do
begin
ADOQuery_Piyasa_Fiyat_Arastirmasi.Insert;
ADOQuery_Piyasa_Fiyat_Arastirmasiid.AsInteger := IhaleId;
ADOQuery_Piyasa_Fiyat_ArastirmasiFirma_Adi.AsString := ListBox_Sag.Items;
ADOQuery_Piyasa_Fiyat_ArastirmasiMalzeme_Adi.AsString := ADOQuery_Malzememalzeme.AsString;
ADOQuery_Piyasa_Fiyat_ArastirmasiMiktar.AsFloat := ADOQuery_Malzememiktar.AsFloat;
ADOQuery_Piyasa_Fiyat_ArastirmasiBirimi.AsString := ADOQuery_Malzemebirim.AsString;
ADOQuery_Piyasa_Fiyat_Arastirmasi.Post;
ADOQuery_Malzeme.Next;
end;

end;
end;
end;


çok teşekür ederim..

kolay gelsin
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

bunun için pek çok neden olabilir. Ama en büyük yavaşlık nedenlerinden biri yanlış Index kullanımı veya gerekli gereksiz tüm tabloyu "Select *" ile açmaktır.

* Çok kullandığınız alanları indeksleyin.
* büyük tabloları select * ile açmaktan kaçının. sadece gerekli alanları ve sadece gerekli kayıtları seçin.

Ayrıca kodu INSERT INTO şeklinde SQL koduna çevirip, AdoCommand ile işlerseniz hızlanacaktır.

Kolay gelsin.
Cevapla