Boş bir veri tabanına 10.000 kaydı çabuk kaydederken kayıdın gere kalan kısmında zorlanıyor. 150.000 kaydı gerçekleştirirken nasıl kayıt yapmalıyız? Forumda arkadaşlar 1 milyon kayıttan bahsetdiyorlar acaba onlar nasıl kayıt yapıyorlar? perfomans kaybı nasıl oluyor?
Ben 100.000 kaydı gerçekleştirdiğimde kayıt o kadar yavaş gerçekleşiyorki bitmek bilmiyor.
Yardımlarınızı ve tecrubelerinizi bekliyorum.
firebird kayıt performans düşüklüğü
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
s.a.
insert yaparken dataset kullanmayın.
query ile kayıtları tek tek insert edin.
biraz karışık oldu sanırım. şöyle açıklayım.
birtane insert sql oluşturun. sonra bunun parametrelerine değer atayarak o insertsql i exec yapın.
birde insert yaptığınız kodları gönderseydiniz bir baksaydık iyi olurdu.
kolay gelsin.
insert yaparken dataset kullanmayın.
query ile kayıtları tek tek insert edin.
biraz karışık oldu sanırım. şöyle açıklayım.
birtane insert sql oluşturun. sonra bunun parametrelerine değer atayarak o insertsql i exec yapın.
birde insert yaptığınız kodları gönderseydiniz bir baksaydık iyi olurdu.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Aslında bu kodu insert yapabilmek için daha önce forumda sordum ama beni tatmin etmedi. Hele full convert programı, benim kullandığım koda göre inanılmaz hızlı atıyor. Ben bir buçuk saate kayıt yaparken full convert 10 dakikada kayıt yapıyor. Bu nedenden dolayı bilgilerinize ihtiyacım var. Daha önce bu kadar yüksek (500.000 kayıt) yapmamıştım.
Full convert programının nasıl kayıt gerçekleştirdiğini merak ediyorum.Benim kullandığım kayıdı forum kopyalıyorum. Yardımcı olursanız çok sevineceğim. component mi kullanmalıyım yoksa önerebileceğiniz yöntemler nelerdir?
Kullandığım kod:
Full convert programının nasıl kayıt gerçekleştirdiğini merak ediyorum.Benim kullandığım kayıdı forum kopyalıyorum. Yardımcı olursanız çok sevineceğim. component mi kullanmalıyım yoksa önerebileceğiniz yöntemler nelerdir?
Kullandığım kod:
Kod: Tümünü seç
sheetcount:=form2.suiListBox3.Items.Count;
form4.suiProgressBar1.Max:=sheetcount;
excel := createOleObject('Excel.application');
book := Excel.WorkBooks.Open(form2.JvFilenameEdit1.Text); //book acılıyor...
sheet := book.worksheets[1];
form4.Label6.Caption:=form2.JvFilenameEdit1.Text;
for i:=1 to sheetcount do
begin
sheetname:=excel.Workbooks[1].sheets[i].Name;
form4.Label3.Caption:=sheetname;
form4.suiProgressBar1.Position:=i;
satir:=excel.Workbooks[1].Sheets[i].UsedRange.Rows.Count;
form4.suiProgressBar2.Max:=satir;
for islem:=1 to satir do
begin
if islem=20000 then
begin
DataModule5.IBQuery1.Active:=false;
DataModule5.IBQuery1.SQL.Text:='select * from TABLO2';
DataModule5.IBQuery1.Active:=true;
satiradi:= islem;
form4.Label4.Caption:=satiradi;
DataModule5.IBQuery1.Append;
for sutun:=1 to 6 do
DataModule5.IBQuery1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
DataModule5.IBQuery1.Post;
form4.suiProgressBar2.Position:=islem;
Application.ProcessMessages;
if durdur=true then break;
end
else
satiradi:= islem;
form4.Label4.Caption:=satiradi;
DataModule5.IBQuery1.Append;
for sutun:=1 to 6 do
DataModule5.IBQuery1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
DataModule5.IBQuery1.Post;
form4.suiProgressBar2.Position:=islem;
Application.ProcessMessages;
if durdur=true then break;
end;
Application.ProcessMessages;
if durdur=true then break;
end;
Excel.quit;
excel:=Unassigned;
end;
hocam böyle yaparsanız tabiki yavaş olur.
önce bir insertsql hazırlayın.
sonra kendi kodlarınızı yazın
burdan sonra querynin parametrelerine değerleri atın.
sonrada queryi exec yapın.
sonrada bitiş kodları
böyle birşey yap hız farkını göreceksin.
kodlar üzerinde düzenleme yapman gerekebilir. ona göre.
kolay gelsin.
önce bir insertsql hazırlayın.
Kod: Tümünü seç
DataModule5.IBQuery1.Active:=false;
DataModule5.IBQuery1.SQL.Text:='insert into tablo2(alan1,alan2...alann) values (:param1,:param2,...:paramn)';
Kod: Tümünü seç
sheetcount:=form2.suiListBox3.Items.Count;
form4.suiProgressBar1.Max:=sheetcount;
excel := createOleObject('Excel.application');
book := Excel.WorkBooks.Open(form2.JvFilenameEdit1.Text); //book acılıyor...
sheet := book.worksheets[1];
form4.Label6.Caption:=form2.JvFilenameEdit1.Text;
for i:=1 to sheetcount do
begin
sheetname:=excel.Workbooks[1].sheets[i].Name;
form4.Label3.Caption:=sheetname;
form4.suiProgressBar1.Position:=i;
satir:=excel.Workbooks[1].Sheets[i].UsedRange.Rows.Count;
form4.suiProgressBar2.Max:=satir;
for islem:=1 to satir do
begin
Kod: Tümünü seç
for sutun:=1 to 6 do
DataModule5.IBQuery1.params[sutun-1].AsString :=sheet.cells[satir, sutun];
Kod: Tümünü seç
DataModule5.IBQuery1.execquery;//execsql de olabilir delphiden yazmıyorum.
Kod: Tümünü seç
Application.ProcessMessages;
if durdur=true then break;
end;
Application.ProcessMessages;
if durdur=true then break;
end;
Excel.quit;
excel:=Unassigned;
end;
kodlar üzerinde düzenleme yapman gerekebilir. ona göre.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim