![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Настройки БатчМув [D7, Paradox]
barakuda © (2006-05-30 10:03:00)есть две таблицы, одинаковые по типу и по структуре
нужно быстро перебросить некоторые поля из табл1 в табл2
если делаю через цикл
то прога работает медленно локально а по сетке вообще виснет
может както через батчмув можно выборочные поля перекинуть
в базе около 1000 записей
Заранее благодарен
barakuda (2006-05-30 11:57:00) [1]В общем по делу ничего!
Ладно, всем спасибо,
Тема закрыта
Sergey13 (2006-05-30 11:53:00) [2]2[21] barakuda © (30.05.06 11:49)
А чего тебе сказать? Судя по тому коду, что я вижу, и твоим описаниям задачи тебя не скорость должна волновать.
evvcom (2006-05-30 11:53:00) [3]Ты случаем при приеме на работу себя в грудь кулаком не бил? Ну, мол, я такой крутой перец, берите меня не пожалеете. Если бил, тебе не повезло, если не бил, то что, круче тебя там вообще в конторе никого нет?
В результате тебе нужен несложный SQL-запрос, хотя понятие "несложный" - весьма относительное. :o)
barakuda (2006-05-30 11:49:00) [4]Наш директор никого никогда не хвалит!
а по делу что скажешь
Sergey13 (2006-05-30 11:45:00) [5]2 [19] barakuda © (30.05.06 11:40)
У тебя странный подход ИМХО. Тебя интересует скорость, но не интересует направление движения. Директор тебя не похвалит, я думаю.
barakuda (2006-05-30 11:40:00) [6]для каждого клиента свои контакты
выборка это отчет директору
с какими клиентами и когда был последний контакт
но не в этом дело
я пробывал вообще не копировать контакты - скорость та же :(
Sergey13 (2006-05-30 11:33:00) [7]2[17] barakuda © (30.05.06 11:24)
>ЗАДАЧА
>Есть табл1 (инфа о клиенте),
О клиент ахнаверное?
>есть связанная с ней табл2 (контакты с клиентом)
С клиент аминаверное?
>Нужна выборка табл1 + последняя запись из табл2 (дата контакта)
Какой в этом смысл? Всех клиентов и какой то непонятный контакт с кем то случайным?
Похоже у тебя и алгоритм копирования неправильный.
barakuda (2006-05-30 11:24:00) [8]ЗАДАЧА
Есть табл1 (инфа о клиенте), есть связанная с ней табл2 (контакты с клиентом)
Нужна выборка табл1 + последняя запись из табл2 (дата контакта)
Всё
Sergey13 (2006-05-30 11:19:00) [9]2 [15] barakuda © (30.05.06 11:12)
Без знания задачи никто тебе не посоветует как можно (и нужно). А с твоими знаниями SQL и подавно.
barakuda (2006-05-30 11:12:00) [10]я бы вообще не делал вторую таблицу, еслибы не нужно было брать последнюю записть из таблицы №2, может можно както создать в табл1 дополнительное поле и чтобы последняя запись табл2 туда копировалась ?????
Sergey13 (2006-05-30 11:08:00) [11]2 [12] barakuda © (30.05.06 10:57)
> какой файл?
Парадоксовский, какой же еще.
barakuda (2006-05-30 10:59:00) [12]срок до обеда, некогда вносить глобальные изменения и тестировать
barakuda (2006-05-30 10:57:00) [13]Sergey13 © какой файл?
evvcom (2006-05-30 10:54:00) [14]
> form1.Table11.FieldByName('klient').
тоже хорошо притормаживает. Прикинь в цикле каждый раз искать кучу полей. Зачем, если от прохода до прохода они не меняются? Создаешь 2-мерный массив или 2 одномерных для хранения полей источника и приемника. Перед всеми циклами заполняешь его (их) указателями-полями, а в цикле добираешься быстро до данных через указатели из массива(-ов).
Sergey13 (2006-05-30 10:54:00) [15]2[8] barakuda © (30.05.06 10:51)
>Смысл конечно есть
А есть ли он вообще в такой программе? Почему нельзя просто скопировать файл?
mr.il (2006-05-30 10:51:00) [16]для EmptyTable; нужно чтоб она была в эксклюзиве, т.о. если Table11 еще ктонибудь юзает, надо пересмотреть. А так конечно быстрее.
barakuda (2006-05-30 10:51:00) [17]Смысл конечно есть
но не думаю что это существенно повысит скорость
Sergey13 (2006-05-30 10:48:00) [18]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;
ЗЫ: Странные у тебя таблицы - ключей не видно.
mr.il (2006-05-30 10:46:00) [19]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;
barakuda (2006-05-30 10:30:00) [20]вот код
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;