Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация кода 
:(
    Опции темы
MrDmitry
Дата 23.6.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Написал код. Вначале, по нажатию кнопке, данные добавляются в один StrinGrid затем, по нажатию второй кнопки добавляются в базу (MSSQL) затем читается последний id в базе (Чтоб id норм добавился во второй StringGrid) И по udp добавляется во второй StrinGrid. Вообще код готов, но мне кажется что все можно было(или даже нужно) написать по другому. Поэтому прошу, кто нибудь посмотрите мой код и скажите как сделать лучше )

Код

//Добовляем данные 
procedure TMain.Start_KaptClick(Sender: TObject);
begin
 //Сверяем введенные данные
 Zayvki_string.Cells[0,Str_inc]:='Действие Начальная точка: ';
  if (Start_corp.text='') or (Start_corp.text='0')
   then Start_corp.text:=''
  else
 Start_corp.text:='\'+Start_corp.text;
  if (Start_pod.text='') or (Start_pod.text='0')
   then Start_pod.text:=''
  else
 Start_pod.text:='Подьезд '+Start_pod.text;
  if (End_korp.text='') or (End_korp.text='0')
   then End_korp.text:=''
  else
 End_korp.text:='\'+End_korp.text;
  if (end_pod.text='') or (end_pod.text='0')
   then end_pod.text:=''
  else
 end_pod.text:='Подьезд '+end_pod.text;
 Zayvki_string.Cells[1,Str_inc]:=Start_kart.text+' '+Start_home.text+' '+Start_corp.text+' '+Start_pod.text;
 inc(Str_inc);
 Zayvki_string.RowCount:=Str_inc+1;
 Zayvki_string.Cells[0,Str_inc]:='Действие Конеченая точка: ';
 Zayvki_string.Cells[1,Str_inc]:=End_kapt.text+' '+end_home.text+' '+End_korp.text+' '+end_pod.text;
 inc(Str_inc);
 Zayvki_string.RowCount:=Str_inc+1;
  If (Prime.lines[0]='Примечание') or (Length(Prime.Text)=0) then
   else
    begin
     Zayvki_string.Cells[0,Str_inc]:='Действие Примечание: ';
     Zayvki_string.Cells[1,Str_inc]:=Prime.lines.Text;
     inc(str_inc);
    end;
   Start_add.Enabled:=true;
end;

procedure TMain.Start_addClick(Sender: TObject);
 var
  str_out, str_final, col_final:integer; //Кол-во столбцов в stringgrid2
  start, the_end, times:string; //Строки
begin
 //Сортируем таблицу с заявками по умолчанию
 Main_string.Sort(0,sdAscending);
 //Записываем данные в БД
 start:=Start_kart.text+' '+Start_home.text+' '+Start_corp.Text+' '+Start_pod.Text;
 the_end:=End_kapt.text+' '+end_home.Text+' '+End_korp.Text+' '+end_pod.Text;
 times:=DateToStr(date)+' '+TimeToStr(time);
 inc(number_click);
 DataModule1.Query.Active:=false;
 DataModule1.Query.SQL.Clear;
 DataModule1.Query.SQL.Add('INSERT INTO zayavki (otkyda,kyda,prinyal,km,cena,data) values ('''+start+''','''+the_end+''','''+Logon.Login.text+''',''0'',''0'','''+times+''')');
 DataModule1.Query.ExecSQL;
//Передаем серверу пакет с данными
str_out:=Main_string.RowCount;
str_final:=0;
col_final:=1;
 while Str_inc>str_final do
  begin
   stringer:=Zayvki_string.Cells[col_final,str_final]+'|  ';
   inc(str_final);
   stringer:=stringer+Zayvki_string.cells[col_final,str_final];

   inc(str_final);
   inc(str_out);
   Main_string.RowCount:=str_out;
   col_final:=1;
  end;
  DataModule1.UdpClient.Send(stringer);
  Start_add.Enabled:=false;
  Zayvki_string.Clear;
  Zayvki_string.RowCount:=2;
 sTabSheet1.Show

procedure TMain.FormShow(Sender: TObject);
var j:integer;
begin
number_click:=0;
j:=1;
while not DataModule1.ADOTable2.Eof Do
 begin
     inc(i);
     Main_string.Cells[0,i]:=DataModule1.ADOTable2.FieldByName('id').AsString ;
     Main_string.Cells[7,i]:=DataModule1.ADOTable2.FieldByName('otkyda').AsString;
     Main_string.Cells[8,i]:=DataModule1.ADOTable2.FieldByName('kyda').AsString;
     Main_string.Cells[9,i]:=DataModule1.ADOTable2.FieldByName('prinyal').Asstring;
     Main_string.Cells[11,i]:=DataModule1.ADOTable2.FieldByName('km').AsString;
     Main_string.Cells[12,i]:=DataModule1.ADOTable2.FieldByName('cena').AsString;
     Main_string.Cells[13,i]:=DataModule1.ADOTable2.FieldByName('data').Asstring;
     DataModule1.ADOTable2.Next;
     Inc(j);
     Main_string.RowCount:=j;
  end;
  ado_id:=DataModule1.ADOTable2.FieldByName('id').AsInteger;
 ShowMessage(IntToStr(ado_id));
if DataModule1.ADOTable1.FieldByName('type').AsString=inttostr(0) then
    Begin
      N13.Enabled:=false;
      n12.Enabled:=false;
    end;
  end;

procedure TDataModule1.StringerUdpUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
  var
   pole1: TStringStream; //Передаем данные по UDP в сеть
   s,data,delet: String; //Работаем со строками
   position_data: integer; //Позиция подстроки
   rows_table, i:integer; //Работа со StringGrid
  begin

   pole1 := TStringStream.Create(''); //Обнуляем память
   pole1.CopyFrom(AData, AData.Size); //копируем в буфер данные переданные клиентом

   data:=pole1.DataString;  //Присваиваем строке пакет от клиента
   ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s)); //Определяем от кого пришол пакет
   pole1.Free;
   main.Main_string.RowCount:=main.Main_string.RowCount+1;
   rows_table:=main.Main_string.RowCount-2;
   {В полученной строке исчем первое вхождение подстроки |
    после найденого вхождения копируем все что после в переменную
    удаляем из всей строки данные остовляя остовляя только нужное
    возвращаем строке первичное состояние без символов найденых
    в первом запросе }
   main.Main_string.Cells[0,rows_table]:=inttostr(ado_id+1);
   //1 запрос
   position_data:=Pos('|',data);
   delet:=Copy(data,position_data+3,Length(data));
   Delete(data,position_data,Length(data));
   main.Main_string.Cells[7,rows_table]:=data;
   data:=delet;
   position_data:=Pos('|',data);
   delet:=Copy(data,position_data+3,Length(data));
   Delete(data,position_data,Length(data));
   //Добовляем данные в StringGrid по Udp порту
   main.Main_string.Cells[8,rows_table]:=data;
   main.Main_string.Cells[9,rows_table]:=logon.login.text;
   main.Main_string.Cells[11,rows_table]:='0';
   main.Main_string.Cells[12,rows_table]:='0';
   main.Main_string.Cells[13,rows_table]:=DateToStr(Date)+' '+TimeToStr(time);
end;


Только не ругайте и не бейте ногами за такой код )))) Лучше помогите материально, в смысле советом )))
PM MAIL   Вверх
Akella
Дата 24.6.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(MrDmitry @  23.6.2010,  20:51 Найти цитируемый пост)
Вначале, по нажатию кнопке, данные добавляются в один StrinGrid затем, по нажатию второй кнопки добавляются в базу (MSSQL)

А зачем StrinGrid? Я понимаю, что нагляднее для тебя. Но лучше бы убрать StrinGrid и отправлять в базу напрямую. При чём так, если много записей:
1. стартуем пишущую транзакцию
2. добавляем записи (если очень много, то порциями по 2000-5000) с периодическим подтверждением транзакции.
3. Окончательное подтверждение транзакции.

Цитата(MrDmitry @  23.6.2010,  20:51 Найти цитируемый пост)
затем читается последний id в базе (Чтоб id норм добавился во второй StringGrid) И по udp добавляется во второй StrinGrid.

это вообще не понял зачем

Добавлено через 34 секунды
Цитата(MrDmitry @  23.6.2010,  20:51 Найти цитируемый пост)
Только не ругайте и не бейте ногами за такой код ))))

код разбирать не стал smile 
PM MAIL   Вверх
CodeMonkey
Дата 24.6.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(Akella @  24.6.2010,  10:40 Найти цитируемый пост)
код разбирать не стал   

...это, как-бы, намёк на то, что код надо было отформатировать, прежде чем постить...


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 24.6.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Нет, не намёк. Просто нет желания и времени разбирать столько кода.
PM MAIL   Вверх
MrDmitry
Дата 25.6.2010, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Во StrinGrid'ы отправляется не для наглядности. Так нужно по условию программы. 
Цитата


это вообще не понял зачем

А это чтоб номер последней записи в StrinGrid должен быть на 1 больше чем id в базе )))
PM MAIL   Вверх
MrDmitry
Дата 28.6.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Блин так не кто и не посмарел (( Я там даже коменты добавил чтоб легче было понять ((((((((
PM MAIL   Вверх
DarkProg
Дата 28.6.2010, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(MrDmitry @  28.6.2010,  15:45 Найти цитируемый пост)
Блин так не кто и не посмарел (( Я там даже коменты добавил чтоб легче было понять (((((((( 

Сложно оптимизировать, потому что очень много кода и его для наала нужно разобрать, а потом понять, и только потом подумать а как оно лучше будет.
Мой вам совет, если программа укладывается в приемлемые временные рамки выполнения, то не парьтесь по поводу оптимизации, через пол года вы сами снесете этот код и напишите его более эффективно(сам так делал не раз)


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
MrDmitry
Дата 2.7.2010, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Цитата(DarkProg @ 28.6.2010,  20:02)
Цитата(MrDmitry @  28.6.2010,  15:45 Найти цитируемый пост)
Блин так не кто и не посмарел (( Я там даже коменты добавил чтоб легче было понять (((((((( 

Сложно оптимизировать, потому что очень много кода и его для наала нужно разобрать, а потом понять, и только потом подумать а как оно лучше будет.
Мой вам совет, если программа укладывается в приемлемые временные рамки выполнения, то не парьтесь по поводу оптимизации, через пол года вы сами снесете этот код и напишите его более эффективно(сам так делал не раз)

Ок, хорошо, тогда мб кто нибудь кинет полезные ссылки на маны по работе с UDP?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.