![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копирование из локала на сервер [D6, IB6.x, Paradox]
MVVD © (2004-08-06 10:50:00)Можно ли сделать запрос вида Insert into T1 Select * From T2.
T1 - серверная таблица, а Т2 - локальная?
Соловьев (2004-08-06 13:05:00) [1]
> try
> DMod.Database1.Commit;
> except
> DMod.Database1.Rollback;
> Showmessage('Rollback');
> end;
try надо вынести за Dmod.Tcredit.DisableControls;
Rule (2004-08-06 12:48:00) [2]MVVD © (06.08.04 12:21) [22]
Ого, так что ты хочешь с таким набором данных то делать, конечно у тебя будет тормозить и никуда не денешься :(
MVVD (2004-08-06 12:21:00) [3]procedure TfplanN.sbCopyClick(Sender: TObject);
var
d3,d4,d9,d13,d23,d24,d50,d51,d52,d53,d65,ds,ddd:Tdate;
s0,s2,s10,s12,s14,s16,s17,s18,s19,s20,s21,s22,s27,s28,s29,s33,s36,s37,s38,
s39,s64,s66,s67,pp,sw: string;
f1,f5,f6,f7,f8,f11,f15,f25,f26,f30,f31,f32,f34,f35,f40,f41,f42,f43,
f44,f45,f46,f47,f48,f49,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,pz,prrvps,
gr : double;
pu : boolean;
ln : integer;
begin
if (not DMod.Database1.InTransaction) then DMod.Database1.StartTransaction;
Dmod.Tcredit.DisableControls;
Dmod.TDBF.First;
While (not Dmod.TDBF.Eof ) do begin
s0:= Dmod.TDBF.Fields[0].AsString;
f1:= Dmod.TDBF.Fields[1].AsFloat;
s2:= Dmod.TDBF.Fields[2].AsString;
d3:= Dmod.TDBF.Fields[3].AsDateTime;
d4:= Dmod.TDBF.Fields[4].AsDateTime;
f5:= Dmod.TDBF.Fields[5].AsFloat;
f6:= Dmod.TDBF.Fields[6].AsFloat;
f7:= Dmod.TDBF.Fields[7].AsFloat;
f8:= Dmod.TDBF.Fields[8].AsFloat;
d9:= Dmod.TDBF.Fields[9].AsDateTime;
s10:=Dmod.TDBF.Fields[10].AsString;
s12:=Dmod.TDBF.Fields[12].AsString;
sw :=Dmod.TDBF.Fields[13].AsString;
d13:= Dmod.TDBF.Fields[13].AsDateTime;
s14:=Dmod.TDBF.Fields[14].AsString;
f15:=Dmod.TDBF.Fields[15].AsFloat;
s16:=Dmod.TDBF.Fields[16].AsString;
s17:=Dmod.TDBF.Fields[17].AsString;
s18:=Dmod.TDBF.Fields[18].AsString;
s19:=Dmod.TDBF.Fields[19].AsString;
s20:=Dmod.TDBF.Fields[20].AsString;
s21:=Dmod.TDBF.Fields[21].AsString;
s22:=Dmod.TDBF.Fields[22].AsString;
d23:=Dmod.TDBF.Fields[23].AsDateTime;
f25:= Dmod.TDBF.Fields[25].AsFloat;
f26:= Dmod.TDBF.Fields[26].AsFloat;
s27:= Dmod.TDBF.Fields[27].AsString;
s28:= Dmod.TDBF.Fields[28].AsString;
s29:= Dmod.TDBF.Fields[29].AsString;
f30:= Dmod.TDBF.Fields[30].AsFloat;
f31:= Dmod.TDBF.Fields[31].AsFloat;
f32:= Dmod.TDBF.Fields[32].AsFloat;
s33:= Dmod.TDBF.Fields[33].AsString;
f34:= Dmod.TDBF.Fields[34].AsFloat;
s36:= Dmod.TDBF.Fields[36].AsString;
s37:= Dmod.TDBF.Fields[37].AsString;
s38:= Dmod.TDBF.Fields[38].AsString;
s39:= Dmod.TDBF.Fields[39].AsString;
f44:= Dmod.TDBF.Fields[44].AsFloat;
f45:= Dmod.TDBF.Fields[45].AsFloat;
f47:= Dmod.TDBF.Fields[47].AsFloat;
d50:= Dmod.TDBF.Fields[50].AsDateTime;
d52:= Dmod.TDBF.Fields[52].AsDateTime;
d53:= Dmod.TDBF.Fields[53].AsDateTime;
sw :=Dmod.TDBF.Fields[58].AsString;
s64:= Dmod.TDBF.Fields[64].AsString;
d65:= Dmod.TDBF.Fields[65].AsDateTime;
s66:= Dmod.TDBF.Fields[66].AsString;
s67:= Dmod.TDBF.Fields[67].AsString;
DMod.spIPLAN.UnPrepare;
DMod.spIPLAN.ParamByName('KID').Value:=s0;
DMod.spIPLAN.ParamByName('NUM').Value:=f1;
DMod.spIPLAN.ParamByName('Y').Value:=s2;
DMod.spIPLAN.ParamByName('DATAPOL').Value:=d3;
DMod.spIPLAN.ParamByName('DATAOPL').Value:=d4;
DMod.spIPLAN.ParamByName('Y').Value:=;
DMod.spIPLAN.ParamByName('S').Value:=f5;
DMod.spIPLAN.ParamByName('T').Value:=f6;
DMod.spIPLAN.ParamByName('I').Value:=f7;
DMod.spIPLAN.ParamByName('SUMMA').Value:=f8;
DMod.spIPLAN.ParamByName('DATA').Value:=d9;
DMod.spIPLAN.ParamByName('CLIENT').Value:=s10;
DMod.spIPLAN.ParamByName('N').Value:=0;
DMod.spIPLAN.ParamByName('DOGOVOR').Value:=s12;
DMod.spIPLAN.ParamByName('DDATA').Value:=d13;
DMod.spIPLAN.ParamByName('TIP').Value:=s14;
DMod.spIPLAN.ParamByName('R').Value:=f15;
DMod.spIPLAN.ParamByName('DOKPOL').Value:='';
DMod.spIPLAN.ParamByName('DOKOPL').Value:='';
DMod.spIPLAN.ParamByName('SCHET').Value:='';
DMod.spIPLAN.ParamByName('A').Value:=s20;
DMod.spIPLAN.ParamByName('USEROPEN').Value:='';
DMod.spIPLAN.ParamByName('USERCLOSE').Value:='';
DMod.spIPLAN.ParamByName('OPENDATE').Value:=d23;
DMod.spIPLAN.ParamByName('CLOSEDATE').Value:=d9;
DMod.spIPLAN.ParamByName('COUN_').Value:=f25;
DMod.spIPLAN.ParamByName('PART').Value:=f26;
DMod.spIPLAN.ParamByName('D').Value:=s27;
DMod.spIPLAN.ParamByName('K').Value:=s28;
DMod.spIPLAN.ParamByName('O').Value:=s29;
DMod.spIPLAN.ParamByName('BEZNAL').Value:=StrToFloat(COMM_M.MYOKR(f30,2));
DMod.spIPLAN.ParamByName('NALOG').Value:=f31*100;
DMod.spIPLAN.ParamByName('VGNI').Value:=StrToFloat(COMM_M.MYOKR(f32,2));
DMod.spIPLAN.ParamByName('PLATEL').Value:='КС';
DMod.spIPLAN.ParamByName('OKRUGL').Value:=f34;
DMod.spIPLAN.ParamByName('CIC').Value:=0;
DMod.spIPLAN.ParamByName('PAGE1').Value:='';
DMod.spIPLAN.ParamByName('PAGE3').Value:=s38;
DMod.spIPLAN.ParamByName('PAGE4').Value:=s39;
DMod.spIPLAN.ParamByName('N2').Value:=0;
DMod.spIPLAN.ParamByName('N5').Value:=f44;
DMod.spIPLAN.ParamByName('N6').Value:=f45;
DMod.spIPLAN.ParamByName('N7').Value:=0;
DMod.spIPLAN.ParamByName('N8').Value:=0;
DMod.spIPLAN.ParamByName('N9').Value:=0;
DMod.spIPLAN.ParamByName('N10').Value:=0;
DMod.spIPLAN.ParamByName('DATE1').Value:=d52;
DMod.spIPLAN.ParamByName('DATE2').Value:=d50;
DMod.spIPLAN.ParamByName('DATE3').Value:=0;
DMod.spIPLAN.ParamByName('DATE4').Value:=d53;
DMod.spIPLAN.ParamByName('W1').Value:=0
DMod.spIPLAN.ParamByName('W3').Value:=0;
DMod.spIPLAN.ParamByName('N1').Value:=gr; DMod.spIPLAN.ParamByName('W5').Value:=prrvps;
DMod.spIPLAN.ParamByName('W6').Value:=0;
DMod.spIPLAN.ParamByName('W7').Value:=0;
DMod.spIPLAN.ParamByName('W8').Value:=0;
DMod.spIPLAN.ParamByName('W9').Value:=0;
DMod.spIPLAN.ParamByName('W10').Value:=0;
DMod.spIPLAN.ParamByName('IDNAME').Value:=s64;
DMod.spIPLAN.ParamByName('IDDATE').Value:=d65;
DMod.spIPLAN.ParamByName('IDTIME').Value:=s66;
DMod.spIPLAN.ParamByName('IDRIGHTS').Value:=NameRM;
DMod.spIPLAN.ParamByName('CRF').Value:=pp;
DMod.spIPLAN.ParamByName('KIDO').Value:=0;
DMod.spIPLAN.Prepare;
try
if not (DMod.TCredit.Locate('Y;NUM;TIP;DOGOVOR;D;CRF;DATAOPL',
VarArrayOf([wst,f1,s14,s12,s27,'R',ds]),[]))
then
DMod.spIPLAN.ExecProc
else begin // yes
Dmod.TCredit.Edit;
Dmod.TCredit.FieldByName('S').AsFloat:=f5;
Dmod.TCredit.FieldByName('SUMMA').AsFloat:=f8;
Dmod.TCredit.FieldByName('N1').AsFloat:=gr;
Dmod.TCredit.FieldByName('W5').AsFloat:=prrvps;
Dmod.TCredit.Post;
except
on EDBEngineError do
fplanN.RichEdit1.Lines.Add('KEY '+s0+' '+FloatToStr(f1)+' '+ s2+' '+
DateToStr(d3)+' '+DateToStr(d4)+' '+FloatToStr(f5)+' '+FloatToStr(f6)+
FloatToStr(f7)+' '+FloatToStr(f8)+' '+DateToStr(d9)+' '+s10+' '+s14+' '+s27+' '+pp);
else fplanN.RichEdit1.Lines.Add('Другая ошибка');
end; {try}
end; {pz}
Dmod.TDBF.Next;
fplanN.Gauge1.Progress:=fplanN.Gauge1.Progress+1;
end; {i}
try
DMod.Database1.Commit;
except
DMod.Database1.Rollback;
Showmessage('Rollback');
end;
Rule (2004-08-06 12:20:00) [4]а--аа, ещё забыл одну вешч, попробу сбекаписть и восстановить базу
Rule (2004-08-06 12:07:00) [5]вопрос в том, сколько полей и какие они, какие компоненты доступа используются, и собственно код этой самой вставки путем перебора (ну как на допросе надо)
Johnmen (2004-08-06 11:51:00) [6]>MVVD © (06.08.04 11:47) [18]
>Вот собственно и весь вопрос
Где ?
"Поднимите мне веки" (с) Н.Гоголь, "Вий"
MVVD (2004-08-06 11:47:00) [7]В таблице несколько десятков тысяч записей. Вставка или редактирование до 1000 записей, процесс идет минут 15. Вот собственно и весь вопрос
Соловьев (2004-08-06 11:45:00) [8]
> записей не более 1000
приведи таблицы, комопненты
Johnmen (2004-08-06 11:43:00) [9]>MVVD ©
Может уже хватит рассказывать про то, как у тебя всё плохо ?
И пора НОРМАЛЬНО задать вопрос ?
MVVD (2004-08-06 11:43:00) [10]записей не более 1000
Соловьев (2004-08-06 11:42:00) [11]
> Процесс идет минут 15.
коммит через сколько делаешь? рекомендуется через 500 записей
Johnmen (2004-08-06 11:41:00) [12]>Rule © (06.08.04 11:38) [11]
Быстрее он не сделает.
MVVD (2004-08-06 11:40:00) [13]Данные обновляются 2-3 раза в день. Процесс идет минут 15.
Rule (2004-08-06 11:38:00) [14]Johnmen © (06.08.04 11:30) [8]
Это можно рассматривать, как для "однократного" применения.
если автора интересует скорость выполнения то наверное это не для "однократного" применения (под словом "однократное" я понимаю как редко исоплозуемая процедура для какихто вспомогательных целей, в частности администрирования, репликации и т.д.)
Val (2004-08-06 11:37:00) [15]>[2] Rule © (06.08.04 11:22)
категоричность не есть хорошо :) варианты есть варианты.
см. SQL.RU "Oracle / Создание гетерогенного сервиса с использованием ODBC в Oracle для Windows на примере Excel."
MVVD (2004-08-06 11:33:00) [16]IF LOCATE() THEN SP.EXECPROC ELSE EDIT
Johnmen (2004-08-06 11:30:00) [17]>Rule © (06.08.04 11:24) [3]
Это можно рассматривать, как для "однократного" применения.
>MVVD © (06.08.04 11:25) [4]
>...жуткий тормоз.
Значит неверно сделано...
MVVD (2004-08-06 11:29:00) [18]Если запись не найдена, то вставляется, а если найдена - редактируется
Соловьев (2004-08-06 11:29:00) [19]
> Проблема как раз в том, что на сервер записываю с сотню
> записей,
> но при построчной записи жуткий тормоз.
выгружаешь в скрипт вида insert into и шлеш его на выполение isql.exe
Rule (2004-08-06 11:27:00) [20]MVVD © (06.08.04 11:25) [4]
через бде будет ещё хуже, а у меня допустим переберало вот так 35 тысяч записей, что заняло не более 25 секунд, и то из-за большой заргужености сервера, поэтому особых тормозов я тут не вижу