ورود

View Full Version : سوال: خواندن تعداد زیاد رکورد از اکسس و نوشتن در دیتابیس دیگر



khorsandreza
شنبه 19 شهریور 1390, 18:15 عصر
سلام دوستان
من با استفاده از SP حدود هفتصد هزار رکورد را از فایل اکسس می خوانم با استفاده از ADO Qurey و رکورد برکورد در دیتا بیس خود ذخیره می کنم ولی یک مشکل عمده برایم پیش آمده و آن این که در رکوردهای اول سرعت انتقال قابل توجه است حال وقتی به رکورد 350000 میرسد سرعت به نصف و در آواخر کاملا کند میشود شاید در هر دقیقه 100 رکورد منتقل مبیشود شکل دستورات

Procedure TConvertDataForm.InserAccessData
Var
ErrNum200,InsNum200:Integer;
Begin
ErrNum200 := 0;
InsNum200 := 0;
ProgressBar_in200.Max := ADO_IN200.RecordCount;
While Not ADO_IN200.Eof DO
Begin
Try
SP_IN200.Params[0].AsString := COPY(ADO_IN200CODP.AsString,1,11);
SP_IN200.Params[1].AsString := ADO_IN200CODC.AsString;
SP_IN200.Params[2].AsString := ADO_IN200CODP.AsString;
SP_IN200.Params[3].AsString := ADO_IN200SERL.AsString;
SP_IN200.Params[4].AsString := ADO_IN200TAR.AsString;
SP_IN200.Params[5].AsString := ADO_IN200CODV.AsString;
SP_IN200.Params[6].AsString := ADO_IN200SHOB.AsString;
SP_IN200.Params[7].AsString := ADO_IN200SHKH.AsString;
SP_IN200.Params[8].AsString := ADO_IN200TARB.AsString;
SP_IN200.Params[9].AsString := ADO_IN200TGHE.AsString;
SP_IN200.Params[10].AsString := ADO_IN200MABG.AsString;
SP_IN200.Params[11].AsString := ADO_IN200MKAS.AsString;
SP_IN200.Params[12].AsString := ADO_IN200KOLB.AsString;
SP_IN200.Params[13].AsString := ADO_IN200ALBV.AsString;
SP_IN200.Params[14].AsString := ADO_IN200CODB.AsString;
SP_IN200.Params[15].AsString := ADO_IN200SHOM.AsString;
SP_IN200.Params[16].AsString := ADO_IN200NKS.AsString;
SP_IN200.Params[17].AsString := ADO_IN200TKS.AsString;
SP_IN200.Params[18].AsString := ADO_IN200OLAV.AsString;
SP_IN200.Params[19].AsString := ADO_IN200VAZE.AsString;
SP_IN200.Params[20].AsString := ADO_IN200SAZM.AsString;
SP_IN200.Params[21].AsString := ADO_IN200CSAB.AsString;
SP_IN200.Params[22].AsString := COPY(ADO_IN200CSAB.AsString,1,2)+'00';
SP_IN200.ExecProc;
ADO_IN200.Next;
ProgressBar_in200.StepIt;
Application.ProcessMessages;
Inc(InsNum200);
Label1.Caption := IntToStr(InsNum200) ;
if ( Thread.Terminated ) then break;
Except
Inc(ErrNum200);
Label2.Caption := IntToStr(ErrNum200) ;
End;
End;

end;

در صورتی که در دستورات خطائی هستد و یا باید تغییراتی داده شود ممنون خواهم شد راهنمائی بفرمائید

khorsandreza
شنبه 19 شهریور 1390, 18:22 عصر
ضمننا شکل دستور SP
INSERT INTO IN_200(CESR,CODC,CODP,SERL,TAR,CODV,SHOB,SHKH,TARB ,TGHE,MABG,MKAS,KOLB,ALBV,CODB,SHOM,NKS,TKS,OLAV,V AZE,SAZM,CSAB,OS_CODE)
Values(:CESR,:CODC,:CODP,:SERL,:TAR,:CODV,:SHOB,:S HKH,:TARB,:TGHE,:MABG,:MKAS,:KOLB,:ALBV,:CODB,:SHO M,:NKS,:TKS,:OLAV,:VAZE,:SAZM,:CSAB,:OS_CODE);
لازم به توضیح میدانم که پایگاه داده من InterBase/FireBerd (اینتر بیس / فایربرد) البته فعلا اینتر بیس و در حال انتقال به فایربرد هستم