Форум: "Базы";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизНастройки БатчМув Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.012 c