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
for döngüsü ile kayıt ekleme
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.
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.