Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi + Interbase 6.0

Автор: Leshgan
Дата сообщения: 17.02.2003 09:05
Для начала скажу, что это в ОС Win XP & Win 2000 Pro, Delphi 7.0.
1. В Delphi в переменной типа float имею число (денежная сумма) типа float. Например, 100,55. Когда я его запимываю в таблицу IB в поле типа numeric(15,2), то в таблице у меня получается число 10055,00. После того, как меняю в региональных установках резделитель целой и дробной части числа с "," на ".", то всё получается нормально. То есть IB'у нужно с точкой, а Delphi ему дает с запятой. Менять на каждом компе региональные установки не предлагайте, это не пойдет! Что можно сделать?

2. Как добавить в IB в поле типа varchar строку, содержащую символ '"' или '''?
Ведь когда пытаешь это сделать командой insert, возникает ошибка.

SQL.Add('insert into main_base (name_file, nac, prim) values ("'+Str.Strings[0]+'", "'+
Temp_Nac+'", "'+ Temp_Prim+'")');
ExecSQL;

Так вот, если в переменной Temp_Prim оказывается строка с символом ", то естественно возникает ошибка. Что посоветуете?
Спасибо!
Автор: vserd
Дата сообщения: 17.02.2003 09:45
Leshgan

Цитата:
Менять на каждом компе региональные установки не предлагайте, это не пойдет! Что можно сделать?

Установить этот разделитель в своем приложении.


Цитата:
содержащую символ '"' или '''

В Библиотеке строковых функцие есть функция которая удваивает "(AnsiQuotedStr ), она то тебе и нужна.

Как вариант можешь не формировать текст запроса, а воспользоваться параметризироваными запросами. (компонеты TQuery, TIBQuery, TpFIBQuery, TpFibDataSet). И тогда исчезнет проблема с точками, и кавычками.
Автор: Leshgan
Дата сообщения: 17.02.2003 09:53
vserd

Цитата:
Установить этот разделитель в своем приложении.

Расскажи пожалуйста поподробнее. Как это сделать?



Цитата:
воспользоваться параметризироваными запросами.

А можно ли в одном IBQuery иметь несколько готовых шаблонов-запросов?
Автор: vserd
Дата сообщения: 17.02.2003 16:51

Цитата:
Установить этот разделитель в своем приложении. Как это сделать?

program ....
begin
.....
DecimalSeparator := '.';
.....
end;


Цитата:
А можно ли в одном IBQuery иметь несколько готовых шаблонов-запросов?

Нет, но можно эти запросы хранить в костантах/ресурсах, и присваивать
SQL.Text := C_MyCoolSQLText;
Prepare;
ParambyName('....').Value := ...
Ведь ты знаешь с каким запросом ты сейчас работаешь. А еще лучьше генерировать их динамически,
tmpMyQuery := TIbQuery.Create(Application) (или nil);
try
tmpMyQuery.SQL.Text := '';
tmpMyQuery.ExecSQL;
funally
tmpMyQuery.Free;
end;

Автор: Leshgan
Дата сообщения: 03.03.2003 09:30
vserd

Цитата:
DecimalSeparator := '.';

Получилось. Всё отлично. Спасибо большое. но вот такая вещь происходит: программа висит сутками и при смене дня (после 23:59) снова получается, что IB не воспринимает ".", я так понимаю, что день сменяется и снова становятся активными региональные настройки (","). Стоит мне перезапустить программу - всё нормально. В связи с этим вопрос. Может быть есть какое-либо событие типа сменю дня, которое программа будет отслеживать и изменять DecimalSeparator?
Автор: vserd
Дата сообщения: 03.03.2003 16:42
Leshgan
1. Может в 23:59:xx запустить таймер, который в 00:00:yy перезапишет это опять.
2. Попробуй в исходниках VCL найти где устанавливается эта переменная и поправь там (и может багу в Borland направишь)
3. Из 2 посмотри на сайте Borlanda может эта бага там описана.
Автор: Leshgan
Дата сообщения: 05.03.2003 18:01
vserd
Спасибо.
За эти два дня выяснилось, что это сбивается и в течение дня
М-да....
Пока выход один, по таймеру перед обработкой принудительно делать DecimalSeparator := '.';
Автор: GreyGendalf
Дата сообщения: 18.05.2003 12:41
чтобы не было геморроя в точками/запятыми, лучше пользоваться параметризированными SQL.

Query1.SQL.Text := 'insert into main_base (name_file,  nac, prim) values (:name_file,  :nac, : prim )';

а потом перед выполнением запроса:
Query1.ParamByName('name_file').AsString := 'some_string';
Query1.ParamByName('nac').AsInteger := xSomeIntegerValue;
Query1.ParamByName('prim').AsFloat := xSomeFloatValue;

точки/запятые/кавычки сами раставятся где надо....


Страницы: 1

Предыдущая тема: Delphi: GetLastError & FormatMessage: не работает


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.