Написал код. Вначале, по нажатию кнопке, данные добавляются в один 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;
|
Только не ругайте и не бейте ногами за такой код )))) Лучше помогите материально, в смысле советом ))) |