Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: CL | DM;

Вниз

Настройки БатчМув   Найти похожие ветки 

 
barakuda ©   (2006-05-30 10:03) [0]

есть две таблицы, одинаковые по типу и по структуре
нужно быстро перебросить некоторые поля из табл1 в табл2
если делаю через цикл
то прога работает медленно локально а по сетке вообще виснет

может както через батчмув можно выборочные поля перекинуть
в базе около 1000 записей

Заранее благодарен


 
mr.il ©   (2006-05-30 10:08) [1]

через SQL.


 
barakuda ©   (2006-05-30 10:11) [2]

к сожалению про SQL знаю только то что его название состоит из 3-х букв
может есть другие методы


 
Sergey13 ©   (2006-05-30 10:15) [3]

2[2] barakuda ©   (30.05.06 10:11)
Попробуй программу с циклом переписать нормально. 1000 записей как угодно тормозить не должны.
Кроме того - задача у тебя какая-то странная "поля перебрасывать".


 
mr.il ©   (2006-05-30 10:16) [4]

Значит самая пора познакомиться, чем раньше тем лучше.


 
barakuda ©   (2006-05-30 10:30) [5]

вот код
procedure tform10.adding;
var i:integer;
begin
i:=0;
if form1.Table11.RecordCount<>0 then
begin
form1.Table11.First;
while not form1.Table11.Eof do
begin
form1.Table11.Delete;
end;
end;
form1.Table1.First;
while not form1.Table1.Eof do
begin
form1.Table11.Append;
form1.Table11.FieldByName("klient").AsString:=form1.Table1.FieldByName("klient") .AsString;
form1.Table11.FieldByName("city").AsString:=form1.Table1.FieldByName("boold").As String;
form1.Table11.FieldByName("otrasl").AsString:=form1.Table1.FieldByName("otrasl") .AsString;
form1.Table11.FieldByName("type").AsString:=form1.Table1.FieldByName("boold1").A sString;
form1.Table11.FieldByName("spesial").AsString:=form1.Table1.FieldByName("spesial ").AsString;
form1.Table11.FieldByName("harka").AsString:=form1.Table1.FieldByName("harka").A sString;
if form1.Table2.RecordCount<>0 then
begin
form1.Table2.Last;
form1.Table11.FieldByName("data").AsString:=form1.Table2.FieldByName("data_per") .AsString;
end;
form1.Table11.Post;
form1.Table1.Next;
i:=i+1;
form1.Caption:=inttostr(i);
end;
end;


 
mr.il ©   (2006-05-30 10:46) [6]

if form1.Table11.RecordCount<>0 then
begin
Можно убрать, если там еоф, то в цикл и не зайдет

я так понимаю? из Table2 всегда берется последнее значение
if form1.Table2.RecordCount<>0 then
begin
form1.Table2.Last;
form1.Table11.FieldByName("data").AsString:=form1.Table2.FieldByName("data_per")  .AsString;
Если за время цикла оно не изменяется, имеет смысл вынести действие за цикл, в начало. Вообще RecordCount - долгая процедура.
Может так:
form1.Table2.Last;
if not form1.Table2.Eof then
 form1.Table11.FieldByName("data").AsString:=form1.Table2.FieldByName
("data_per") .AsString;


 
Sergey13 ©   (2006-05-30 10:48) [7]

2[5] barakuda ©   (30.05.06 10:30)

if form1.Table11.RecordCount<>0 then
begin
form1.Table11.First;
while not form1.Table11.Eof do
begin
form1.Table11.Delete;
end;
end;


Легко заменяется на

form1.Table11.EmptyTable;

ЗЫ: Странные у тебя таблицы - ключей не видно.


 
barakuda ©   (2006-05-30 10:51) [8]

Смысл конечно есть

но не думаю что это существенно повысит скорость


 
mr.il ©   (2006-05-30 10:51) [9]

для EmptyTable; нужно чтоб она была в эксклюзиве, т.о. если Table11 еще ктонибудь юзает, надо пересмотреть. А так конечно быстрее.


 
Sergey13 ©   (2006-05-30 10:54) [10]

2[8] barakuda ©   (30.05.06 10:51)
>Смысл конечно есть
А есть ли он вообще в такой программе? Почему нельзя просто скопировать файл?


 
evvcom ©   (2006-05-30 10:54) [11]


> form1.Table11.FieldByName("klient").

тоже хорошо притормаживает. Прикинь в цикле каждый раз искать кучу полей. Зачем, если от прохода до прохода они не меняются? Создаешь 2-мерный массив или 2 одномерных для хранения полей источника и приемника. Перед всеми циклами заполняешь его (их) указателями-полями, а в цикле добираешься быстро до данных через указатели из массива(-ов).


 
barakuda ©   (2006-05-30 10:57) [12]

Sergey13 © какой файл?


 
barakuda ©   (2006-05-30 10:59) [13]

срок до обеда, некогда вносить глобальные изменения и тестировать


 
Sergey13 ©   (2006-05-30 11:08) [14]

2 [12] barakuda ©   (30.05.06 10:57)
> какой файл?
Парадоксовский, какой же еще.


 
barakuda ©   (2006-05-30 11:12) [15]

я бы вообще не делал вторую таблицу, еслибы не нужно было брать последнюю записть из таблицы №2, может можно както создать в табл1 дополнительное поле и чтобы последняя запись табл2 туда копировалась ?????


 
Sergey13 ©   (2006-05-30 11:19) [16]

2 [15] barakuda ©   (30.05.06 11:12)
Без знания задачи никто тебе не посоветует как можно (и нужно). А с твоими знаниями SQL и подавно.


 
barakuda ©   (2006-05-30 11:24) [17]

ЗАДАЧА
Есть табл1 (инфа о клиенте), есть связанная с ней табл2 (контакты с клиентом)

Нужна выборка табл1 + последняя запись из табл2 (дата контакта)
Всё


 
Sergey13 ©   (2006-05-30 11:33) [18]

2[17] barakuda ©   (30.05.06 11:24)
>ЗАДАЧА
>Есть табл1 (инфа о клиенте),
О клиентах наверное?

>есть связанная с ней табл2 (контакты с клиентом)
С клиентами наверное?

>Нужна выборка табл1 + последняя запись из табл2 (дата контакта)
Какой в этом смысл? Всех клиентов и какой то непонятный контакт с кем то случайным?

Похоже у тебя и алгоритм копирования неправильный.


 
barakuda ©   (2006-05-30 11:40) [19]

для каждого клиента свои контакты

выборка это отчет директору

с какими клиентами и когда был последний контакт

но не в этом дело

я пробывал вообще не копировать контакты - скорость та же :(


 
Sergey13 ©   (2006-05-30 11:45) [20]

2 [19] barakuda ©   (30.05.06 11:40)
У тебя странный подход ИМХО. Тебя интересует скорость, но не интересует направление движения. Директор тебя не похвалит, я думаю.


 
barakuda ©   (2006-05-30 11:49) [21]

Наш директор никого никогда не хвалит!

а по делу что скажешь


 
evvcom ©   (2006-05-30 11:53) [22]

Ты случаем при приеме на работу себя в грудь кулаком не бил? Ну, мол, я такой крутой перец, берите меня не пожалеете. Если бил, тебе не повезло, если не бил, то что, круче тебя там вообще в конторе никого нет?
В результате тебе нужен несложный SQL-запрос, хотя понятие "несложный" - весьма относительное. :o)


 
Sergey13 ©   (2006-05-30 11:53) [23]

2[21] barakuda ©   (30.05.06 11:49)
А чего тебе сказать? Судя по тому коду, что я вижу, и твоим описаниям задачи тебя не скорость должна волновать.


 
barakuda ©   (2006-05-30 11:57) [24]

В общем по делу ничего!

Ладно, всем спасибо,

Тема закрыта



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.042 c
3-1149163023
Hadroran
2006-06-01 15:57
2006.08.06
Динамические LookUp поля


2-1153045175
Ильдар
2006-07-16 14:19
2006.08.06
Добавление файлов из подкаталога


8-1139150998
guitarist
2006-02-05 17:49
2006.08.06
ScreenMate


2-1153132968
Megabyte
2006-07-17 14:42
2006.08.06
Непонятки в 3-хзвенке


4-1145148582
Ку Ку
2006-04-16 04:49
2006.08.06
Консольное приложение, глюки с кодировкой