Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
3-1091711961
Zabludshiy
2004-08-05 17:19
2004.08.29
Проблема с записью в BLOB-поле


14-1092157745
jack128
2004-08-10 21:09
2004.08.29
помогите найти источник варнинга.


6-1088472500
hyper_omsk
2004-06-29 05:28
2004.08.29
(ping) Отсутствует сетевое подключение


14-1092311413
WondeRu
2004-08-12 15:50
2004.08.29
Компоненты для работы с шифрованием по ...


1-1092401649
Nata
2004-08-13 16:54
2004.08.29
Файлы