|
|
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Всем здравствуйте. Появилась проблема записи данных типа float в таблички MSSQL. Раньше (еще в политехе) научили писать так: Form1->ADOQuery1->SQL->Add("insert W_GEN_SELL (w_gs_gtp) VALUES ("+AnsiString(w_gs_gtp)+")"); А w_gs_gtp содержит число, допустим 234,23. Так как разделитель - запятая, MS SQL "считает", что в VALUES - два числа и ругает меня. Научили меня, что надо передавать параметры в хранимые процедуры. Теперь вопрос: Как? Как передать float не строкой? Не с помощью Form1->ADOQuery1->SQL->Add...? Жду помощи, работа стоит:( Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 11:54 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Ну большинство же с этим сталкивалось. Подскажите что-нить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 12:36 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
NotfromНу большинство же с этим сталкивалось. Подскажите что-нить. Иди на форум по длфи. Там этих вопросов с ответами как поганок в лесу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 12:38 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Ё. Сначала с MSSQL выгнали. Теперь и отсюда гонят. Я все равно жду ответов. Буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 12:45 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Я думаю, что все дело в настройках локали, зайди в настройки компа и выстави в качестве разделителя целой и дробной части то, что нужно тебе. -------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 13:37 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
to Notfrom Сталкивался когда-то с таким, но помоему делал следующим способом: Преобразовывал float в строку, затем находил в ней позицию запятой и менял её на точку :) корявенько, но работало :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 14:18 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Ну а если передавать параметром... Вариант1 (помудрее): создаешь в базе ХрПроц с параметром (который флоат) в проекте (я так понял у тя Билдер?) добавляешь в DataModule (в твоем случае на Form1 :) компоненту ADO proc.... (точно не помню) открываешь свой-ва и вяжешь с хп в базе... там же в св-вах появится список параметров (который флоат :) Form1->ADOProc1->Parameters->ParamByName("vbfv").AsFloat=121,23132 Вариант2 (попроще): открываешь SQL скрипт твоего ADOQuery1 и пишешь туда: insert W_GEN_SELL (w_gs_gtp) VALUES (:parametr1) (!!! обязательно с дваеточием) затем в св-вe Parameters твоего ADOQuery1 появится parametr1 (если не появился, попробуй активировать ADOQuery1)... затем обращаешься к нему кодом Form1->ADOQuery1->Parameters->ParamByName("vbfv").AsFloat=121,23132 и усе... P.S. В коде мог допустить неточности, так как давненько этим не страдал.. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 14:32 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
ShiklgruberПреобразовывал float в строку, затем находил в ней позицию запятой и менял её на точку :) корявенько, но работало :) В принципе, чтобы не зависеть от локали cчитается хорошим тоном передавать данные в независимом формате, например дата - YYYYMMDD, ну а float можно преобразовать к виду вообще без знаков препинания Ну например так Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 14:34 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
to ZrenBy :) ...чтобы не зависеть от локали... и от пользователей , одни вводили 12,555 а другие 12.555... Кстати у меня такой вопросик (если в тему): писал когда-то мат.алгоритм, и там был такой косячок - плавающая переменная double настолько "уменьшалась", что её значение становилось вида ......1E-15..., после чего с этим значением ничего (арифметич.) поделать не мог как такое могет быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 14:44 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Shiklgruber и от пользователей , одни вводили 12,555 а другие 12.555... Для этого существуют свои методы. У меня при вводе пользователем таких значений на лету анализируется и меняется на LOCALE_SDECIMAL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 14:55 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Спасибо. Добрые Вы:) Разжевали. Я пол дня искал. А когда, наконец, разобрался, прочитал здесь. 2 Shiklgruber Я как раз сделал по Вашему 2-ому способу. Ну как самому догадаться, что параметр в строке запроса с двоеточием указывается. Идея по замене запятой на точку посетила меня в первую очередь, но это верный путь к тормозам, наверное:) спасибо. 2 Cerebrum Настройки я тоже менял руками, но на всех клиентах не охота бегать менять. хорошо, что нашлось другое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 15:09 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
мое имхо: все запросы лучше вызывать с параметрами (заодно и скл иньекций избежите) при запихивании данных в параметр Form1->ADOQuery1->Parameters->ParamByName("vbfv").AsFloat=121,23132 я почему то всегда был уверен что билдеру глубоко наплевать на ваши форматы представления плавающей запятой в ОС, и в исходном коде надо всегда писать через точку, а запятая - это вообще отдельный оператор в си Form1->ADOQuery1->Parameters->ParamByName("vbfv").AsFloat=121.23132 а от пользователей брать соответсовенно функцией StrToFloat она вроде использует установки разделителя с данного компа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2006, 00:09 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
выставь локаль принудительно Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 01:03 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Notfrom Появилась проблема записи данных типа float в таблички MSSQL. Раньше (еще в политехе) научили писать так: Form1->ADOQuery1->SQL->Add("insert W_GEN_SELL (w_gs_gtp) VALUES ("+AnsiString(w_gs_gtp)+")"); Надо писать так: Код: plaintext 1. 2. А потом биндить w_gs_gtp как параметр запроса. Как в ADO биндить параметр я точно не знаю. Биндить надо как тип double precision в MSSQL и как тип double в C. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2006, 22:38 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
А учили вас выходит какие-то лохи ... если конечно учили делать так и только так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2006, 22:39 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Спасибо, но если прочитать всю ветку, видно, что вы повторяетесь. Учили нас довольно умные люди, вряд ли глупее Вас, просто всего за 5 лет не расскажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 08:16 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Чтобы не иметь вышенаписанных проблем, надо использовать хранимые процедуры: 1. это идеологически вернее для MS SQL Server'a - все запросы должны выполняться на сервере, клиент только передает и получает данные; 2. не надо мудрить с локалями, конвертами, поисками точек и т.д. А уж поиск точек - вовсе изврат :( Если уж совсем не хочется юзать ХП, можно и так: CString csQuery; авторcsQuery.Format("INSERT INTO Table (float_values) VALUES (%.5f)", fvalue); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 09:37 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
не дописал :( этот вариант можно применять только в том случае, если заранее известно, с какой точностью необходимо хранить число. От проблем с локалью надо уходить, а не решать ее. Тем более, для этого есть правильные механизмы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 09:39 |
|
||
|
Передача параметров из С++ в MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Ну, вот так то ведь делать нормально. И для такого удаления даже процедуру делать лень. Все равно все в лет выполняется. Form1->ADOQuery1->SQL->Clear(); Form1->ADOQuery1->SQL->Add("DELETE FROM W_GEN_SELL WHERE w_gs_date = :date"); Form1->ADOQuery1->Parameters->ParamByName("date") ->Value = DateToStr(TDateTime(DateTimePicker1->Date)+d); Form1->ADOQuery1->ExecSQL(); А для больших селектов я уже осознал преимущество ХП, перенес все на сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 13:19 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=334&tid=2030441]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
71ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 348ms |

| 0 / 0 |
