Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 14:36   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Записать значения в базу отличные от предыдущей записи.

Пишу данные с com порта в базу .
Код:
var str: String;
  S, S1: String;

  f:real;
  s3:real;
  a,b:integer;
  i1,i2: Integer;
    r: Real;
begin
    try
       repeat
         str:=rs232.ReadString();
         if str<>'' then begin
           Memo1.Lines.Add(str);
          s1:=only_numbers(str);
   s1:=StringReplace(s1, '.',',' , [rfReplaceAll]);
 i1:=Pos(',',s1);
  if i1>0 then begin
    i2:=PosEx(',',s1,i1+1);
    if i2>0 then s1:=Copy(s1,1,i2-1)+Copy(s1,i2+1,Length(s1)-i2);
  end;
  r:=RoundTo(StrToFloatDef(s1,0),-2);  //результат
  Edit2.Text:=Floattostr(r);

  if strtofloat(Edit2.Text)>0 then
begin
  edtNotes.Text:=edtNotes.Text+Edit2.Text +#9#9+TimeToStr(now) +#13+#10;
  if strtofloat(Edit2.Text)>0 then
begin
  ADOTable1.Insert;
//MainForm.ADOTable1.Edit;

MainForm.ADOTable1.FieldByName('Massa').Value:=mainform.Edit2.Text;
MainForm.ADOTable1.FieldByName('Com').Value:=mainform.dbcombobox1.Text;
MainForm.ADOTable1.FieldByName('num').Value:='true';
MainForm.ADOTable1.FieldByName('Image').Value:='image';
 MainForm.ADOTable1.FieldByName('BaudRate').Value:= MainForm.ADOTable2.FieldByName('BaudRate').Value;
 MainForm.ADOTable1.FieldByName('Location').Value:= MainForm.ADOTable2.FieldByName('Location').Value;
 MainForm.ADOTable1.FieldByName('IP').Value:= MainForm.ADOTable2.FieldByName('IP').Value;
 MainForm.ADOTable1.FieldByName('Note').Value:= MainForm.ADOTable2.FieldByName('Note').Value;
 MainForm.ADOTable1.FieldByName('Model').Value:= MainForm.ADOTable2.FieldByName('Model').Value;
 MainForm.ADOTable1.FieldByName('Equopment').Value:= MainForm.ADOTable2.FieldByName('Equopment').Value;
 MainForm.ADOTable1.FieldByName('Name').Value:= MainForm.ADOTable2.FieldByName('Equopment').Value+' '+MainForm.ADOTable2.FieldByName('Model').Value;;
 MainForm.ADOTable1.FieldByName('Organization').Value:=mainform.dbcombobox3.Text;
 MainForm.ADOTable1.FieldByName('Date_posting').AsString:=DateToStr(now);
 MainForm.ADOTable1.FieldByName('Time_posting').AsString:=TimeToStr(now);
 MainForm.ADOTable1.Post;

  end;
  end;
         end;
       until str='';
    except
       on E:Exception do begin
         Timer3.Enabled := False;
         ShowMessage(E.Message);
       end;
    end;
Как сделать чтобы записывались данные только отличные от предыдущей записи, т.е. сейчас пишутся
4,4
4,4
4,8
8
8
8
8
9,2
8
8
4
3
а нужно чтобы записались
4,4
4,8
8
9,2
8
4
3
Aleksandr вне форума Ответить с цитированием
Старый 29.03.2013, 14:40   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну так запоминай что записал, и перед записью следующей сравнивай и не пиши, если не изменилось
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.03.2013, 15:40   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Записываю в f:=strtofloat(Edit2.Text) а с чем сравнивать не знаю
Aleksandr вне форума Ответить с цитированием
Старый 29.03.2013, 15:49   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

1. в f стринговое начальное значение запредельное, которого точно не будет считано (типа f:='###########')
2. перед Insert-ом сравнить f с Edit2.Text, если совпадает не писать, не совпадает - записать и в f поместить Edit2.Text
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.03.2013, 16:17   #5
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

практичнее будет если организовать 2 динамических массива для старых и новых значений и сделать отдельную процедуру которая будет сравнивать эти массивы между собой, при необходимости обнолять в них данные и выдавать флаг что данные отличаются и нужно сохраниться
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 29.03.2013, 16:26   #6
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Сделал, но все равно пишет все подряд.
Код:
 f:=222222;
if f<>strtofloat(Edit2.Text) then
begin
  ADOTable1.Insert;
//MainForm.ADOTable1.Edit;

MainForm.ADOTable1.FieldByName('Massa').Value:=mainform.Edit2.Text;
MainForm.ADOTable1.FieldByName('Com').Value:=mainform.dbcombobox1.Text;
MainForm.ADOTable1.FieldByName('num').Value:='true';
MainForm.ADOTable1.FieldByName('Image').Value:='image';
 MainForm.ADOTable1.FieldByName('BaudRate').Value:= MainForm.ADOTable2.FieldByName('BaudRate').Value;
 MainForm.ADOTable1.FieldByName('Location').Value:= MainForm.ADOTable2.FieldByName('Location').Value;
 MainForm.ADOTable1.FieldByName('IP').Value:= MainForm.ADOTable2.FieldByName('IP').Value;
 MainForm.ADOTable1.FieldByName('Note').Value:= MainForm.ADOTable2.FieldByName('Note').Value;
 MainForm.ADOTable1.FieldByName('Model').Value:= MainForm.ADOTable2.FieldByName('Model').Value;
 MainForm.ADOTable1.FieldByName('Equopment').Value:= MainForm.ADOTable2.FieldByName('Equopment').Value;
 MainForm.ADOTable1.FieldByName('Name').Value:= MainForm.ADOTable2.FieldByName('Equopment').Value+' '+MainForm.ADOTable2.FieldByName('Model').Value;;

 MainForm.ADOTable1.FieldByName('Organization').Value:=mainform.dbcombobox3.Text;
 MainForm.ADOTable1.FieldByName('Date_posting').AsString:=DateToStr(now);
 MainForm.ADOTable1.FieldByName('Time_posting').AsString:=TimeToStr(now);

 MainForm.ADOTable1.Post;
//MainForm.ADOTable1.Refresh;
 f:=strtofloat(Edit2.Text);
 end;
Aleksandr вне форума Ответить с цитированием
Старый 29.03.2013, 16:38   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Начальное значение не там же нужно присваивать, а, например, в Fom.OnCreate и f объявить, например, в private формы
Цитата:
практичнее будет если организовать 2 динамических массива для старых и новых значений
Можно, если сравнивать не только значения записываемые в Massa
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.03.2013, 16:45   #8
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

а f real или string

прописал f:=222222 в Form.Create
Не работает.

Последний раз редактировалось Stilet; 29.03.2013 в 18:03.
Aleksandr вне форума Ответить с цитированием
Старый 01.04.2013, 15:04   #9
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Подскажите пожалуйства как это реализовать.
Aleksandr вне форума Ответить с цитированием
Старый 01.04.2013, 15:07   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

что за субд, и что это за данные?
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать в базу данных шестнадцатеричную переменную Skail Общие вопросы Delphi 2 12.09.2012 11:02
Записать в базу страницу с которой перешёл на сайт пользователь. Дима1888 PHP 4 19.05.2011 03:50
Присвоить разные значения параметру при вставке записи в базу Gover БД в Delphi 3 19.04.2010 21:37
Обратиться к предыдущей записи формы freez1992 Microsoft Office Access 8 09.02.2010 18:42
Как записать в базу дату с календаря? Scorpy БД в Delphi 8 11.11.2008 21:44