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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2014, 13:20   #1
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию функция для сравнения строки с типом дата

Никто не подскажет есть ли функция которая возвращает тру или фолс после того как сровняешь строку с типом дата. Ну что то типа StrToData, но только в случае ошибки возвращало фолс или при успехе тру.
Konstantin_ua вне форума Ответить с цитированием
Старый 05.02.2014, 13:25   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

TryStrToDateTime это чтоли?
eval вне форума Ответить с цитированием
Старый 05.02.2014, 13:36   #3
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
TryStrToDateTime это чтоли?
да спасибо, нужно было что типа этого
Код:
procedure TF_add.medt1Exit(Sender: TObject);
var dat:TDateTime;
begin
  DateSeparator:='.';
  if TryStrToDate(medt1.Text,dat) then ShowMessage('data')
  else ShowMessage('false');

  end;
Konstantin_ua вне форума Ответить с цитированием
Старый 05.02.2014, 13:58   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
DateSeparator
это пережиток, его лучше не использовать, да и у вас нет восстановления его! если надо "хитрое", то лучше взять перегруженную function TryStrToDateTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean; overload;
eval вне форума Ответить с цитированием
Старый 05.02.2014, 16:37   #5
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
это пережиток, его лучше не использовать, да и у вас нет восстановления его! если надо "хитрое", то лучше взять перегруженную function TryStrToDateTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean; overload;
переделал так
Код:
  if (TryStrToDateTime(medt1.Text, dat) =False) then
  begin
    medt1.Clear;
    ShowMessage('Íå â³ðíî âêàçàíà äàòà');
  end;
ну вот вопрос, когда вводишь не дату а допустим 99.99.99 то норм, появляется сообщение и медит чистит. Когда пустой медит типа __.__.__ тоже норм а вот когда не полностью заносишь данные типа 12.1_.__ то ошибка. Как ее убрать?
55.jpg
Konstantin_ua вне форума Ответить с цитированием
Старый 05.02.2014, 16:57   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

это ошивка не тут, показывайте как в базу отправляете
eval вне форума Ответить с цитированием
Старый 05.02.2014, 17:30   #7
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
это ошивка не тут, показывайте как в базу отправляете
ну я в базу отправляю только по нажатию на кнопку, а ошибка вылетает когда просто в едитах меняю значение коряво, вот код запроса
Код:
 with F_main.qry1 do
    begin
      Active:=False;
      SQL.Clear;                                                                                                                                                                                           // , status5=:pstatus5
      SQL.Add('INSERT into Dok (dov_number, Dov_date, Date_oplatu, Kontragent, Summ_money, Rah_number, Rah_Date, Akt_number, Akt_date, Naklad_number, Naklad_date, Dog_buh, Dog_der, Akt_orig, Naklad_orig, Oplata)');
      SQL.Add('values (:par1,:par2,:par3,:par4,:par5,:par6,:par7,:par8,:par9,:par10,:par11,:par12,:par13,:par14,:par15, :par16)' );
      Parameters.ParamByName('par1').Value:= edt1.Text;
      if(medt1.Text='  .  .  ')then Parameters.ParamByName('par2').Value:=Null else
      Parameters.ParamByName('par2').Value:= FormatDateTime('ddddd',StrToDate(medt1.Text));
      if(medt2.Text='  .  .  ')then Parameters.ParamByName('par3').Value:=Null else
      Parameters.ParamByName('par3').Value:= medt2.Text;
      Parameters.ParamByName('par4').Value:= cbb1.Items[cbb1.ItemIndex];
      Parameters.ParamByName('par5').Value:= edt2.Text;
      Parameters.ParamByName('par6').Value:= edt4.Text;
      if(medt3.Text='  .  .  ')then Parameters.ParamByName('par7').Value:=Null else
      Parameters.ParamByName('par7').Value:= FormatDateTime('ddddd',StrToDate(medt3.Text));
      Parameters.ParamByName('par8').Value:= edt5.Text;
      if(medt4.Text='  .  .  ')then Parameters.ParamByName('par9').Value:=Null else
      Parameters.ParamByName('par9').Value:= FormatDateTime('ddddd',StrToDate(medt4.Text));
      Parameters.ParamByName('par10').Value:= edt6.Text;
      if(medt5.Text='  .  .  ')then Parameters.ParamByName('par11').Value:=Null else
      Parameters.ParamByName('par11').Value:=FormatDateTime('ddddd',StrToDate(medt5.Text));
      Parameters.ParamByName('par12').Value:= edt7.Text;
      Parameters.ParamByName('par13').Value:= edt8.Text;
      Parameters.ParamByName('par14').Value:= status1;
      Parameters.ParamByName('par15').Value:= status2;
      if(StrToInt(edt2.Text)>0) then Parameters.ParamByName('par16').Value:='îïëà÷åíî'  else Parameters.ParamByName('par16').Value:= 'íå îïëà÷åíî';

      ShowMessage('Äîáàâëåíî');
      ExecSQL;

      coppy(s1, cbb1.Items[cbb1.itemIndex],'Àêòè', ('¹'+edt5.Text+' '+medt4.Text));
      coppy(s2, cbb1.Items[cbb1.itemIndex],'Ðàõóíêè',('¹'+edt4.Text+' '+medt3.Text) );
      coppy(s3, cbb1.Items[cbb1.itemIndex],'Ïîäàòêîâ³ íàêëàäí³',('¹'+edt6.Text+' '+medt5.Text));
    end;
Konstantin_ua вне форума Ответить с цитированием
Старый 05.02.2014, 17:38   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это ошибка DBEdit-a с маской. Без Try ... except не погасишь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.02.2014, 18:17   #9
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это ошибка DBEdit-a с маской. Без Try ... except не погасишь
можете подсказать что я не так сделал?

Код:
procedure TF_add.medt1Exit(Sender: TObject);
begin
try
  if (TryStrToDateTime(medt1.Text, dat) =False) then
  begin
    medt1.Clear;
    ShowMessage('Íå â³ðíî âêàçàíà äàòà');
  end;
  except
 on E : Exception do
  ShowMessage('Íå â³ðíî âêàçàíà äàòà'+ E.Message);
  end;
  end;
Konstantin_ua вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция сравнения Ksy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 16.05.2011 13:07
Функция типа ВПр для сравнения по двум столбцам сразу ZanderBlack1 Microsoft Office Excel 1 27.01.2011 16:24
Функция сравнения sanya94 Общие вопросы C/C++ 3 02.12.2010 22:24
функция сравнения bank_notes Microsoft Office Excel 3 12.02.2010 22:08