|
|
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Нужна помощь людей.плотно юзающих SQL API Я никак не могу правильно связать SQLBindParameter-ом какую-нибудь переменную датой ( пробовал DATE_STRUCT,CTime) ,хранящую дату, с маркером параметра (?) - функция SQLBindParameter дает код возврата -1. Пробовал образец.выдранный из МСДН(в описании SQLBindParameter).-он не работает(т.е. работает на всех типах данных,кроме даты и времени) Работаю из приложения VС++ на SQL Server2000 (через ОДВС 3.52) Если есть пара строк кода, иллюстрирующих вышеизложенную проблему -пришлите, если не затруднит , на panza@mail.ru С уважением Валерий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2002, 17:20 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
SQLINTEGER LenOrInd; SQL_TIMESTAMP_STRUCT Param; SQLRETURN sqlRet = ::SQLBindParameter(hSTMT, ParNum, // порядковый номер параметра в запросе - с 1 SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TIMESTAMP, 0, 0, &Param, 0, &LenOrInd); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 22:43 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Добрый день! Возникла точно такая же проблема. Решение, подсказанное здесь на форуме, не помогло код: void Period() { CString str("{call aa(?)}"); SQL_TIMESTAMP_STRUCT param; param.year = 2005; param.month = 1; param.day = 1; param.day = 1; param.hour = 4; param.minute = 14; param.second = 5; param.fraction = 5; SQLINTEGER LenOrInd; SQLRETURN sqlRet = ::SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT_OUTPUT, SQL_C_TYPE_TIMESTAMP, SQL_TIMESTAMP, 0, 0, &m, 0, &LenOrInd); RETCODE retcode = SQLExecDirect(hstmt, (UCHAR*)LPCTSTR(str), SQL_NTS); if(retcode != SQL_SUCCESS) PrintDatabaseError(); SQLFreeStmt(hstmt,SQL_CLOSE); } ALTER procedure aa @date1 datetime OUTPUT as select @date1='5.5.2005' результат выполнения - "[Microsoft][ODBC SQL Server Driver]Неправильное поле COUNT или ошибка синтаксиса" в чем все-таки может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 06:08 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Какой тип у поля с датой в базе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 22:38 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
_БалтикаКакой тип у поля с датой в базе? если я правильно понял вопрос, то datetime. выше я приводил код вызываемой процедуры ALTER procedure aa @date1 datetime OUTPUT as select @date1='5.5.2005' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 06:37 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Алексей.в чем все-таки может быть проблема? В непонимании принципа работы :) SQLExecDirect() НЕ РАБОТАЕТ С ПАРАМЕТРАМИ. Для работы с параметрами используется следующий набор команд: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 19:08 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
White Owl В непонимании принципа работы :) SQLExecDirect() НЕ РАБОТАЕТ С ПАРАМЕТРАМИ. Для работы с параметрами используется следующий набор команд: Код: plaintext 1. 2. В таком случае почему через тот же самый SQLExecDirect прекрасно отрабатывает следующее: create procedure aa @param int OUTPUT as select @param=@param+5 go void Period() { CString str("{call aa(?)}"); int param = 5; SQLRETURN sqlRet = ::SQLBindParameter(hstmt,1, SQL_PARAM_INPUT_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &m, 0, 0); RETCODE retcode = SQLExecDirect(hstmt, (UCHAR*)LPCTSTR(str), SQL_NTS); if(retcode != SQL_SUCCESS) PrintDatabaseError(); SQLFreeStmt(hstmt,SQL_CLOSE); } и у меня проблема возникает ТОЛЬКО при использовании параметра типа datetime ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 06:02 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Подобная проблема была у меня с Ораклой. Переменные типа TIMESTAMP_STRUCT не биндились с полями базы типа TIMESTAMP зато все было отлично если в базе был тип DATE. Простейший выход - передавать дату в строковом формате и затем конвертировать ее средствами базы. Хотя, скорее всего, ODBC драйвер сам сможет преобразовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 11:52 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Aleксей.В таком случае почему через тот же самый SQLExecDirect прекрасно отрабатывает следующее: Потому что используемый драйвер ODBC не совсем соответствует ODBC стандарту :) Aleксей.и у меня проблема возникает ТОЛЬКО при использовании параметра типа datetime В описании твоего сервера и(или) поставляемых с ним ODBC драйверов должна быть табличка соотвествий типов в используемом SQL диалекте, ODBC и C типов данных. А в MDAC почитай главу Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 18:19 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
_БалтикаПростейший выход - передавать дату в строковом формате и затем конвертировать ее средствами базы. Хотя, скорее всего, ODBC драйвер сам сможет преобразовать. передать дату в виде строки в процедуру это только часть проблемы, ее нужно еще и вернуть ее обратно (т.е распознать) - в любом случае на лицо избыточный код заместо тривиального SQLBindParam мне тоже пришлось использовать обходной путь что-то типа create procedure aa @d int output, @m int output, @y int output as declare @date datetime select @date=convert(varchar(2),@m)+'.'+convert(varchar(2),@d)+'.'+convert(varchar(4),@y) -- -- select @d=DATEPART(day,@date),@m=DATEPART(month,@date),@y=DATEPART(year,@date), go но лишнее преобразование - очень утомительно (когда их десятки) и это все-таки как-то через ж.... Да и, честно говоря, уже из принципа хочется перебороть ODBC. А вот силенок-то что-то не хватает! :o( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 18:39 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Алексей.но лишнее преобразование - очень утомительно (когда их десятки) и это все-таки как-то через ж.... Да и, честно говоря, уже из принципа хочется перебороть ODBC. А вот силенок-то что-то не хватает! :o( Естестественно через ж... Но что делать?... У меня уже возникала мысль самому дрова написать. :) Незнаю как в SQL Server, в Оракле можно сделать так to_char( <имя поля>, 'yyyy-mm-dd hh:mi:ss') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 11:52 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
_Балтика Алексей.но лишнее преобразование - очень утомительно (когда их десятки) и это все-таки как-то через ж.... Да и, честно говоря, уже из принципа хочется перебороть ODBC. А вот силенок-то что-то не хватает! :o( Естестественно через ж... Но что делать?... У меня уже возникала мысль самому дрова написать. :) Незнаю как в SQL Server, в Оракле можно сделать так to_char( <имя поля>, 'yyyy-mm-dd hh:mi:ss') Но это опять-же через ж ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 11:57 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Можно сделать проще и сложнее :) Вначале сделать SELECT TOP 1 Col1, Col2, ... FROM Table с колонками, которые будут использоваться в настоящем запросе. Затем из получившегося курсора (result set-а) необходимые свойства колонок присвоить параметрам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 20:27 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
у меня частично получилось обойти через конверт в строку но у меня специфичный случай - мне надо дружить ods и odbs p.s. форум постоянно не смотрю, просто борол проблему на вопросы отвечу асей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 16:09 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Crimeanу меня частично получилось обойти через конверт в строку но у меня специфичный случай - мне надо дружить ods и odbs p.s. форум постоянно не смотрю, просто борол проблему на вопросы отвечу асей ?? думаю автору топику уже пофиг :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 16:11 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Аут! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 16:13 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
> думаю автору топику уже пофиг :) ну, я, скорее всего, не последний, ищущий SQLBindParameter + datetime :) хотя, конечно, чем дальше, тем меньше раз уже страница удачно проиндексировалась поисковиком, то пусть кроме вариантов с sql_type_timestamp + sql_c_type_timestamp, который дает invalid time format (в моем конкретно случае, хотя это, подозреваю, тоже решаемо) или работы через другие типы (что у меня не получилось, но мне надо было править связку ods / odbc) останется и вариант конвертации через строку, как вполне рабочий обход проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 20:55 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
White OwlSQLExecDirect() НЕ РАБОТАЕТ С ПАРАМЕТРАМИ. Сов, нагнал ты похоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 12:24 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
Я к тому, что Prepared execution и передача данных через параметры -- это вообще говоря никак не связанные друг с другом возможности. Как еще говорят, ортогональные. Почему наличие или отсутствие одного должно исключать другое ? Например, зачем вызывать хранимую процедуру через Prepared statement - совсем не понятно, на многих СУБД хранимая процедура и так подготовлена (ну ладно, скажем - для некоторых СУБД это бессмысленно). Но почему вследствие того, что я не хочу вызов подготавливать, я должен делать языковой запрос, а не RPC - не понятно. Можно дать четкие ссылки на обоснующие это документы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 12:31 |
|
||
|
SQLBindParameter не хочет связывать дату
|
|||
|---|---|---|---|
|
#18+
MasterZiv White OwlSQLExecDirect() НЕ РАБОТАЕТ С ПАРАМЕТРАМИ. Сов, нагнал ты похоже.И ты мне теперь будешь раз в месяц об этом напоминать? Ну ладно, согласен, работает. Но неудобно это на мой взгляд. Потенциальная дырка для глюков. Используя пару SQLPrepare/SQLExecute я всегда знаю что тут я работаю с повторяющейся SQL командой. А SQLExecDirect - с одноразовой командой. Биндить параметры для одноразовой команды можно, но слегка бессмысленно. Оно ж потом все равно на сервере повторно будет парситься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 18:31 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33425975&tid=2029852]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 550ms |

| 0 / 0 |
