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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при вызове StrToDate в Delphi XE2, Любой вызов выдает ошибку...  
:(
    Опции темы
Gwire
Дата 9.2.2012, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

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



Цитата(BEST13 @  5.2.2012,  13:15 Найти цитируемый пост)
 в настройках винды, слетел формат короткой даты.... там ничего не боло выбрано, не знаю каким образом, такое случилось.
А где уверенность, что у пользователя твоей программы не слетит формат короткой даты на компе?
Это, тебе небольшой крэшь-тест. Не выдержала.
Используй StrToDateTime(const S: string; const FormatSettings: TFormatSettings). А переменную типа TFormatSettings сохрани в том же TDataModule (пологою DM is TDataModule)

И еще:
Цитата(k0rvin @  30.1.2012,  15:30 Найти цитируемый пост)
 если ее встроить в запрос конкатенацией

Согласен с k0rvin. Используй лучше обычное суммирование строк.
Или юзай лучше проверенный Format(). И он кстати принимает параметр TFormatSettings.

Это сообщение отредактировал(а) Gwire - 9.2.2012, 16:42
PM MAIL   Вверх
k0rvin
Дата 10.2.2012, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Gwire @ 9.2.2012,  16:41)
Согласен с k0rvin. Используй лучше обычное суммирование строк.

Нет, это не лучше.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Gwire
Дата 10.2.2012, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

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



Цитата(k0rvin @  10.2.2012,  09:36 Найти цитируемый пост)
Цитата(Gwire @ 9.2.2012,  16:41)
Согласен с k0rvin. Используй лучше обычное суммирование строк.

Нет, это не лучше. 
От чего же?

По вашему 
   ReallocMem();
   Copy();
будет работать хуже чем
  for-to-do
    if-then
    begin
      ReallocMem();
      Copy();
    end;
?
Сканирование с подстановкой никогда не будет работать стабильнее дополнения.

Цитата(k0rvin @  30.1.2012,  15:30 Найти цитируемый пост)
попробуй объявить dateSent, dateReceived : TDate, а не TDateTime
Эти два типа эквивалентны. 
Они оба Double (TTime тоже) и имеют одинаковую структуру. Дни - целые, часы:минуты:секунды.милсек - дробные
Их ввели для удобства написания кода. 


Это сообщение отредактировал(а) Gwire - 10.2.2012, 12:14
PM MAIL   Вверх
superVad
Дата 10.2.2012, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Можно в начале работы программы устанавливать ShortDateFormat.
PM MAIL   Вверх
northener
Дата 11.2.2012, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(superVad @  10.2.2012,  21:07 Найти цитируемый пост)
Можно в начале работы программы устанавливать ShortDateFormat. 

Можно. Но нужно при этом помнить и о TApplication.UpdateFormatSettings!

Это сообщение отредактировал(а) northener - 11.2.2012, 04:09


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
k0rvin
Дата 13.2.2012, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Gwire @ 10.2.2012,  12:03)
От чего же?

от того что не безопасно и не надежно (форматы представления, например, дат могут отличаться в разных СУБД/ОС). И да, параметризованные запросы можно кешировать и исполнять пакетно с разными параметрами.

Это сообщение отредактировал(а) k0rvin - 13.2.2012, 08:49


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Gwire
Дата 13.2.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

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



Цитата(k0rvin @  13.2.2012,  08:43 Найти цитируемый пост)
форматы представления, например, дат могут отличаться в разных СУБД/ОС

Для этого и придуманы TFormatSettings и, например в MS SQL, Set DATEFORMAT (в других тоже СУБД тоже наверняка есть).
Приводишь их к общему виду и никаких проблем не возникает.

Цитата(k0rvin @  13.2.2012,  08:43 Найти цитируемый пост)
от того что не безопасно и не надежно
А по поводу статьи в википедии - интересная статейка, но:
1) Если "злоумышленник" хакнул  ехе-программу получил возможность менять значения параметров, то что ему запретит менять переменную содержащую запрос?
2) Если же вы сами предоставляете возможность пользователю вводить параметры запроса в ручную. Рекомендую изучить термин "Защита от дурака" (Википедия или Лукоморье)
HTML-я и Javascript это тоже касается.
Ну если, конечно, вы пишете для веб, и передаете параметры открытым каналом или их просто подставить, то такие вещи нужно учитывать.

В PHP переменные не имеют определенного типа. Потому и возникают такие проблемы. 
В Delphi все проще - если я жду Integer (например 5 или 2435159) то туда никак не впихнуть String ('-1 OR 1=1')

А задачу я решил бы как:
Код

const
  CUBDFormat: TFormatSettings = ( // Настроить все параметры как в база их воспринимает.
    DecimalSeparator: '.'; 
    ShortDateFormat: 'YYYY-MM-DD'
  ); 

type
  TPostavkiRec = record
    NazvTovara: String;    
    TovarType: Integer;
    Proizvoditel: Integer;
    Cena: Real;
    Kol: Integer;
    Izmer: Integer;
    Stoimost: Real;
    DateSend: TDataTime; 
    DateReceived: TDataTime;
  end;

function GetInsertQuery(R: TPostavkiRec): String; overload; // можно одно и тоже имя использовать для разных структур
begin
    Result := 'INSERT INTO Postavki (NazvTovara, TovarType, Proizvoditel, Cena, Kol, Izmer, Stoimost, DateSend, DateReceived) VALUES ('+
      ''''+ R.NazvTovara +''','+
      IntToStr(R.TovarType) +','+
      IntToStr(R.Proizvoditel +','+
      FloatToStrF(R.Cena, CUBDFormat) +','+
      IntToStr(R.Kol) +','+
      IntToStr(R.Izmer) +','+
      FloatToStrF(R.Stoimost, CUBDFormat) +','+
      ''''+ DateToStr(R.DateSend, CUBDFormat) +''','+
      ''''+ DateToStr(R.DateReceived, CUBDFormat) +''');';
end;

// . . .

var S: String; R: TPostavkiRec;
begin
    // R.___ := заполняем запись
    S:= GetInsertQuery(R);
    ADOConnectoin.Execute( S );


Это сообщение отредактировал(а) Gwire - 13.2.2012, 13:36
PM MAIL   Вверх
k0rvin
Дата 13.2.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Gwire @ 13.2.2012,  13:32)
А задачу я решил бы

изобретением собственного велосипеда вместо готового и проверенного решения.

Хоть бы формат даты спрашивал у СУБД, а не в ручную задавал. И что там с кешированием для пакетной обработки запросов?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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