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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2011, 11:29   #41
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;
 
  PTIME_OF_DAY_INFO = ^TIME_OF_DAY_INFO; 
  TIME_OF_DAY_INFO = record
    tod_elapsedt : DWORD;
    tod_msecs    : DWORD;
    tod_hours    : DWORD;
    tod_mins     : DWORD;
    tod_secs     : DWORD;
    tod_hunds    : DWORD;
    tod_timezone : Longint;
    tod_tinterval: DWORD;
    tod_day      : DWORD;
    tod_month    : DWORD;
    tod_year     : DWORD;
    tod_weekday  : DWORD;
  end;
 
  function NetRemoteTOD(Server: PWChar; var pBuffer: PTIME_OF_DAY_INFO): DWORD;
    stdcall; external 'NETAPI32.DLL';
  function NetApiBufferFree(pBuffer: Pointer): DWORD;
    stdcall; external 'NETAPI32.DLL';
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  TOD: PTIME_OF_DAY_INFO;
begin
  if NetRemoteTOD('\\192.168.х.х', TOD) = 0 then
  try
    with TOD^ do
      ShowMessage(Format('Data %d.%d.%d ',[tod_day,tod_month,tod_year]));
  finally
    NetApiBufferFree(TOD);
  end
  else
    RaiseLastOSError;
end;
 
end.
вот так он выводит мне сообщение с датой в следующем формате '31.10.2011'
думаю это мне подходит, теперь посмотрим что у меня получиться

ребята я почти все сделал, теперь вот такая проблема
у меня две переменные, в одной храниться дата с сервера(3.11.2011),а в другой дата с локального компа(3.11.2011),и мне надо теперь сравнить их
я пытаюсь вот так
Код:
if data<>t then
но в таком случае получается что они никогда не равны друг другу,хотя содержимое одинаково,как мне их сравнить?
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны

Последний раз редактировалось mihali4; 04.11.2011 в 00:50.
betirsolt вне форума Ответить с цитированием
Старый 03.11.2011, 15:54   #42
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
if data<>t then
сверять надо только дни!
для этого переменную типа DateTime достаточно обрезать до целой части:
Код:
if trunc(data)<>trunc(t) then ....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.11.2011, 16:14   #43
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

почему дни?наоборот дни можно менять в пределах текущего месяца,мне надо сверять месяц и год
вот 11.2011<>11.2011
но почему то получается что они не равны друг другу
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 03.11.2011, 16:17   #44
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Функции MonthOf YearOf выдергивают месяц и год из TDateTime
Цитата:
но почему то получается что они не равны друг другу
А вы исключаете то, что могли не правильно вырезать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 03.11.2011 в 16:30.
Аватар вне форума Ответить с цитированием
Старый 03.11.2011, 16:28   #45
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

я вырезал оттуда то что мне нужно функцией copy, у меня две готовые переменные типа string которые надо сравнить на равенство
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 03.11.2011, 16:58   #46
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от betirsolt Посмотреть сообщение
я вырезал оттуда то что мне нужно функцией copy, у меня две готовые переменные типа string которые надо сравнить на равенство
вот 11.2011<>11.2011
но почему то получается что они не равны друг другу
А вот так - тоже не равны ???
Код:
'11.2011'<>'11.2011'
Или вы все строковые переменные пишете без кавычек ?
Для имен переменных можно использовать QuotedStr...

Последний раз редактировалось mihali4; 03.11.2011 в 17:02.
mihali4 вне форума Ответить с цитированием
Старый 03.11.2011, 17:31   #47
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

я сравниваю две переменные так
Код:
if data<>t then
...
а в этих переменных находятся именно вот эти значения '11.2011', '11.2011'
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 03.11.2011, 18:13   #48
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Враки... Не верю...
Вот пример, все работает на YES:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var data, t: string;
begin
data:='11.2011';
t:='11.2011';
if data<>t then
Label1.Caption:='no' else
Label1.Caption:='yes';
end;
Как вы получаете значения этих переменных ? Откуда они берутся ? Приведите код получения переменных.
mihali4 вне форума Ответить с цитированием
Старый 03.11.2011, 22:31   #49
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

вот мой код
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
TOD: PTIME_OF_DAY_INFO;
begin
data:=copy(formatdatetime('d.mm.yyyy',date),3,10);
showmessage(data);
  if NetRemoteTOD('\\192.168.х.х', TOD) = 0 then
     with TOD^ do
      begin
      t:= copy(Format('%d.%d.%d ',[tod_day,tod_month,tod_year]),3,10);
       ShowMessage(t);
      end;
      if  data <> t then
      WinExec('net time \\192.168.х.х /set /yes',SW_HIDE);
  NetApiBufferFree(TOD);
end;
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 03.11.2011, 22:40   #50
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. data:=copy(formatdatetime('d.mm.yyy y',date),3,10);
А вот что будет 10 числа в результате: '.11.2011'
2. t:= copy(Format('%d.%d.%d ',[tod_day,tod_month,tod_year]),3,10);
Тот пробел, что в конце тоже в результат попадет. Делайте выводы
3. Работайте с TDateTime, меньше вероятность таких ошибок. Можно и в символьном виде, но не так как вы сделали
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно запретить программе сбор информации о компе(всевозможные идентификаторы компьютара и ОС), чтобы не дать отослать е riotel Безопасность, Шифрование 10 02.11.2011 14:14
Не хочет изменять в БД cargo29 PHP 14 07.10.2011 13:54
запретить модераторам моего сайта изменять себе репутацию hon Свободное общение 9 30.09.2011 22:11
Можно ли запретить автопреобразования из числа в дату и обратно? m_v_v Microsoft Office Excel 1 01.06.2010 11:22
Как работать с большим числом? phobos Общие вопросы C/C++ 2 21.04.2009 07:05