powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров из С++ в MS SQL 2000
19 сообщений из 19, страница 1 из 1
Передача параметров из С++ в MS SQL 2000
    #33986506
Notfrom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте.
Появилась проблема записи данных типа 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...?
Жду помощи, работа стоит:( Спасибо.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33986647
Notfrom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну большинство же с этим сталкивалось. Подскажите что-нить.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33986663
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotfromНу большинство же с этим сталкивалось. Подскажите что-нить.

Иди на форум по длфи. Там этих вопросов с ответами как поганок в лесу.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33986693
Notfrom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ё. Сначала с MSSQL выгнали. Теперь и отсюда гонят. Я все равно жду ответов. Буду благодарен.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33987032
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что все дело в настройках локали, зайди в настройки компа и выстави в качестве разделителя целой и дробной части то, что нужно тебе.
--------------------------------------------------------------
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33987274
Shiklgruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Notfrom

Сталкивался когда-то с таким, но помоему делал следующим способом:

Преобразовывал float в строку, затем находил в ней позицию запятой и менял её на точку :)

корявенько, но работало :)
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33987355
Shiklgruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну а если передавать параметром...
Вариант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. В коде мог допустить неточности, так как давненько этим не страдал.. :)
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33987360
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShiklgruberПреобразовывал float в строку, затем находил в ней позицию запятой и менял её на точку :)
корявенько, но работало :)

В принципе, чтобы не зависеть от локали cчитается хорошим тоном
передавать данные в независимом формате, например дата - YYYYMMDD,
ну а float можно преобразовать к виду вообще без знаков препинания

Ну например так
Код: plaintext
1.
2.
3.
4.
5.
6.
const char* fuu(double value){
  static char s[ 23 ];
  sprintf(s,"%.15E",1E- 15 *fabs(value));
  s[ 1 ] = *s;
  *s = (value <  0 )?'-':'0';
  return s;
}
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33987405
Shiklgruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ZrenBy
:)
...чтобы не зависеть от локали...

и от пользователей , одни вводили 12,555 а другие 12.555...

Кстати у меня такой вопросик (если в тему):

писал когда-то мат.алгоритм, и там был такой косячок - плавающая переменная double настолько "уменьшалась", что её значение становилось вида
......1E-15..., после чего с этим значением ничего (арифметич.) поделать не мог
как такое могет быть?
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33987473
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shiklgruber
и от пользователей , одни вводили 12,555 а другие 12.555...


Для этого существуют свои методы.
У меня при вводе пользователем таких значений на лету
анализируется и меняется на LOCALE_SDECIMAL
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33987558
Notfrom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Добрые Вы:) Разжевали. Я пол дня искал. А когда, наконец, разобрался, прочитал здесь.
2 Shiklgruber
Я как раз сделал по Вашему 2-ому способу. Ну как самому догадаться, что параметр в строке запроса с двоеточием указывается.
Идея по замене запятой на точку посетила меня в первую очередь, но это верный путь к тормозам, наверное:) спасибо.

2 Cerebrum
Настройки я тоже менял руками, но на всех клиентах не охота бегать менять. хорошо, что нашлось другое решение.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #33992193
Mike_za
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мое имхо:
все запросы лучше вызывать с параметрами (заодно и скл иньекций избежите)
при запихивании данных в параметр
Form1->ADOQuery1->Parameters->ParamByName("vbfv").AsFloat=121,23132

я почему то всегда был уверен что билдеру глубоко наплевать на ваши форматы представления плавающей запятой в ОС, и в исходном коде надо всегда писать через точку, а запятая - это вообще отдельный оператор в си

Form1->ADOQuery1->Parameters->ParamByName("vbfv").AsFloat=121.23132

а от пользователей брать соответсовенно функцией StrToFloat она вроде использует установки разделителя с данного компа
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #34001627
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выставь локаль принудительно

Код: plaintext
1.
2.
  ShortDateFormat = "MM/dd/yyyy";
  ShortTimeFormat = "hh:mm:ss";
  char *ptr = &DecimalSeparator; *ptr = '.';
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #34008013
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Notfrom
Появилась проблема записи данных типа float в таблички MSSQL.
Раньше (еще в политехе) научили писать так:
Form1->ADOQuery1->SQL->Add("insert W_GEN_SELL (w_gs_gtp) VALUES ("+AnsiString(w_gs_gtp)+")");


Надо писать так:

Код: plaintext
1.
2.
Form1->ADOQuery1->SQL->Add( "insert W_GEN_SELL (w_gs_gtp) VALUES ( ? )");


А потом биндить w_gs_gtp как параметр запроса. Как в ADO биндить параметр я точно не знаю. Биндить надо как тип double precision в MSSQL и как тип double в C.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #34008014
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А учили вас выходит какие-то лохи ... если конечно учили делать так и только так.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #34008722
Notfrom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но если прочитать всю ветку, видно, что вы повторяетесь.
Учили нас довольно умные люди, вряд ли глупее Вас, просто всего за 5 лет не расскажешь.
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #34011667
Новичок_я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не иметь вышенаписанных проблем, надо использовать хранимые процедуры:
1. это идеологически вернее для MS SQL Server'a - все запросы должны выполняться на сервере, клиент только передает и получает данные;
2. не надо мудрить с локалями, конвертами, поисками точек и т.д. А уж поиск точек - вовсе изврат :(
Если уж совсем не хочется юзать ХП, можно и так:
CString csQuery;
авторcsQuery.Format("INSERT INTO Table (float_values) VALUES (%.5f)", fvalue);
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #34011671
Новичок_я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не дописал :(
этот вариант можно применять только в том случае, если заранее известно, с какой точностью необходимо хранить число.
От проблем с локалью надо уходить, а не решать ее. Тем более, для этого есть правильные механизмы
...
Рейтинг: 0 / 0
Передача параметров из С++ в MS SQL 2000
    #34012471
Notfrom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, вот так то ведь делать нормально. И для такого удаления даже процедуру делать лень. Все равно все в лет выполняется.

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();

А для больших селектов я уже осознал преимущество ХП, перенес все на сервер.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров из С++ в MS SQL 2000
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]