Текущий архив: 2004.08.29;
Скачать: CL | DM;
Вниз
Копирование из локала на сервер Найти похожие ветки
← →
MVVD © (2004-08-06 10:50) [0]Можно ли сделать запрос вида Insert into T1 Select * From T2.
T1 - серверная таблица, а Т2 - локальная?
← →
Johnmen © (2004-08-06 10:56) [1]http://www.ibase.ru/devinfo/bde.htm
Гетерогенные запросы.
← →
Rule © (2004-08-06 11:22) [2]Однако, пусть даже и таким жутким способом, но BDE умеет выполнять гетерогенные запросы. Благодаря Local SQL и тому, что BDE умеет работать с локальными таблицами (которые он использует для хранения промежуточных данных таких запросов). Ни IBObjects, ни fibc/IBX, ни IB API не имеют таких возможностей, и соответственно, не могут выполнять гетерогенные запросы.
Это просто жуть, вообще по определению SQL не может выполнять такие запросы, все запросы ограничиваются базой данных в которой это происходит и возможность БДЕ такое делать - это просто ужас и рассматривать как нормально функциоанльную функцию даже не решусь ....
Я лично такие вот проблеммы решал с помощью стандартных переборов из под Делфи ....
← →
Rule © (2004-08-06 11:24) [3]Johnmen © (06.08.04 10:56) [1]
Я думаю это можно рассматривать как определенный вариант работы, но не как решение проблеммы, поставленой автором "во избежании дальнейших казусов" © Johnmen :)
← →
MVVD © (2004-08-06 11:25) [4]Проблема как раз в том, что на сервер записываю с сотню записей,
но при построчной записи жуткий тормоз.
← →
Rule © (2004-08-06 11:27) [5]MVVD © (06.08.04 11:25) [4]
через бде будет ещё хуже, а у меня допустим переберало вот так 35 тысяч записей, что заняло не более 25 секунд, и то из-за большой заргужености сервера, поэтому особых тормозов я тут не вижу
← →
Соловьев © (2004-08-06 11:29) [6]
> Проблема как раз в том, что на сервер записываю с сотню
> записей,
> но при построчной записи жуткий тормоз.
выгружаешь в скрипт вида insert into и шлеш его на выполение isql.exe
← →
MVVD © (2004-08-06 11:29) [7]Если запись не найдена, то вставляется, а если найдена - редактируется
← →
Johnmen © (2004-08-06 11:30) [8]>Rule © (06.08.04 11:24) [3]
Это можно рассматривать, как для "однократного" применения.
>MVVD © (06.08.04 11:25) [4]
>...жуткий тормоз.
Значит неверно сделано...
← →
MVVD © (2004-08-06 11:33) [9]IF LOCATE() THEN SP.EXECPROC ELSE EDIT
← →
Val © (2004-08-06 11:37) [10]>[2] Rule © (06.08.04 11:22)
категоричность не есть хорошо :) варианты есть варианты.
см. SQL.RU "Oracle / Создание гетерогенного сервиса с использованием ODBC в Oracle для Windows на примере Excel."
← →
Rule © (2004-08-06 11:38) [11]Johnmen © (06.08.04 11:30) [8]
Это можно рассматривать, как для "однократного" применения.
если автора интересует скорость выполнения то наверное это не для "однократного" применения (под словом "однократное" я понимаю как редко исоплозуемая процедура для какихто вспомогательных целей, в частности администрирования, репликации и т.д.)
← →
MVVD © (2004-08-06 11:40) [12]Данные обновляются 2-3 раза в день. Процесс идет минут 15.
← →
Johnmen © (2004-08-06 11:41) [13]>Rule © (06.08.04 11:38) [11]
Быстрее он не сделает.
← →
Соловьев © (2004-08-06 11:42) [14]
> Процесс идет минут 15.
коммит через сколько делаешь? рекомендуется через 500 записей
← →
MVVD © (2004-08-06 11:43) [15]записей не более 1000
← →
Johnmen © (2004-08-06 11:43) [16]>MVVD ©
Может уже хватит рассказывать про то, как у тебя всё плохо ?
И пора НОРМАЛЬНО задать вопрос ?
← →
Соловьев © (2004-08-06 11:45) [17]
> записей не более 1000
приведи таблицы, комопненты
← →
MVVD © (2004-08-06 11:47) [18]В таблице несколько десятков тысяч записей. Вставка или редактирование до 1000 записей, процесс идет минут 15. Вот собственно и весь вопрос
← →
Johnmen © (2004-08-06 11:51) [19]>MVVD © (06.08.04 11:47) [18]
>Вот собственно и весь вопрос
Где ?
"Поднимите мне веки" (с) Н.Гоголь, "Вий"
← →
Rule © (2004-08-06 12:07) [20]вопрос в том, сколько полей и какие они, какие компоненты доступа используются, и собственно код этой самой вставки путем перебора (ну как на допросе надо)
← →
Rule © (2004-08-06 12:20) [21]а--аа, ещё забыл одну вешч, попробу сбекаписть и восстановить базу
← →
MVVD © (2004-08-06 12:21) [22]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:48) [23]MVVD © (06.08.04 12:21) [22]
Ого, так что ты хочешь с таким набором данных то делать, конечно у тебя будет тормозить и никуда не денешься :(
← →
Соловьев © (2004-08-06 13:05) [24]
> try
> DMod.Database1.Commit;
> except
> DMod.Database1.Rollback;
> Showmessage("Rollback");
> end;
try надо вынести за Dmod.Tcredit.DisableControls;
Страницы: 1 вся ветка
Текущий архив: 2004.08.29;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.042 c