Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.01 c
2-1153045450
Dyakon_Frost
2006-07-16 14:24
2006.08.06
Количество записей в Memo или RichEdit


15-1152273518
Колдун
2006-07-07 15:58
2006.08.06
Учебная деятельность


15-1151432743
Nic
2006-06-27 22:25
2006.08.06
У кого какая клавиатура?


15-1150462592
blackcrazzy
2006-06-16 16:56
2006.08.06
Сайт Delphimaster.ru


15-1152702450
QuickFinder
2006-07-12 15:07
2006.08.06
Wiki





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский