Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизMS SQL + ADO + DateTime Найти похожие ветки
← →
Jungle (2004-03-26 10:24) [0]Есть запрос типа "INSERT INTO TableName (rDateTime) VALUES (:parDateTime);" (хранится в ADOQuery1)
параметр parDateTime типа ftString
и следующий код:
...
ADOQuery1.Parameters.ParamValues["parDateTime"] := FormatDateTime("yyyy-mm-dd hh:nn:ss", tmpDate); //tmpDate - типа TDateTime
...
ADOQuery1.ExecSQL;
...
Так вот, в одной программе всё работает пучком, в другой упорно не хочет, выдаётся ошибка "...[Microsoft][ODBC SQL Server Driver]Дополнительная возможность не реализована." Ничего не понимаю. Натолкните на мысль, уважаемые...
← →
sniknik © (2004-03-26 10:43) [1]> Натолкните на мысль, уважаемые...
на какую? в чем проблема или как решить?
проблема в том что не поддежживается сервером преобразование даты из представленой строкой в ODBС стандарте. (почему хз. сам смотри, твой сервер)
решить, 2 варианта
хороший
не преобразовывать
ADOQuery1.Parameters.ParamValues["parDateTime"]:= tmpDate;
плохой
поменять формат строки на MSSQL стандарт
ADOQuery1.Parameters.ParamValues["parDateTime"] := FormatDateTime("yyyymmdd hh:nn:ss", tmpDate)
← →
Jungle (2004-03-26 10:54) [2]> проблема в том что не поддежживается сервером преобразование даты из представленой строкой в ODBС
А почему в одной программе работает, а вдругой - нет?
> не преобразовывать
> ADOQuery1.Parameters.ParamValues["parDateTime"]:= tmpDate;
Сначала так и было. Я всё перепробовал. С этой проблемой сталкиваюсь во второй раз. В первый раз нашёл в нете решение, которое в начальном посте.
> поменять формат строки на MSSQL стандарт
Фиг-с-два. Пишет что-то вроде "приложение использует для данной операции значение неверного типа"
← →
sniknik © (2004-03-26 11:15) [3]и в чем дело? почему с правильной передачи параметров ушол?
> А почему в одной программе работает, а вдругой - нет?
это твои программы? не можеш при наличии кода рассмотреть разницу? я как я ее рассмотрю без этого наличия?
могу только предположить, тип параметра не тот(или неопределен, тут и результат такой же). ставь явно до присвоения значения.
> Фиг-с-два. Пишет что-то вроде "приложение использует для данной операции значение неверного типа"
одно из двух, либо тип параметра не строка, либо сервер не MSSQL.
← →
Jungle (2004-03-26 12:09) [4]Сервер точно MS SQL 2000
> и в чем дело? почему с правильной передачи параметров ушол?
Потому что не работало.
Единственный способ, который сработал в первой программе - это
ADOQuery1.Parameters.ParamValues["parDateTime"] := FormatDateTime("yyyy-mm-dd hh:nn:ss", tmpDate);
Программа реально работает без ошибок.
Я его сразу во вторую прогу (обе мои) поэтому и воткнул. Когда не сработало - просто обалдел. Различия-то есть конечно. копался в Dfm-файлах, выставил во второй проге всё так же как в первой - всё равно не работает.
Уже вторую неделю извращаюсь. Вот уж сюда и полез, потому что совсем башка на эту тему больше не варит.
← →
Johnmen © (2004-03-26 12:16) [5]Ответственно скажу, что с
ADOQuery1.Parameters.ParamByName("parDateTime").Value:=<переменная типа TDateTime>;
где поле parDateTime типа datetime,
никаких проблем не наблюдается.
← →
Jungle (2004-03-26 12:27) [6]Проверил - не работает. И даже в другую таблицу (с которой первая программа работает) не хочет записывать. Т.е. дело, я думаю :), не в таблице.
← →
Johnmen © (2004-03-26 12:30) [7]>не работает
Это как ? Откуда уверенность ?
← →
Jungle (2004-03-26 12:37) [8]> Это как ? Откуда уверенность ?
Что значит как? Во-первых, выдается та же самая ошибка при ExecSQL. Во вторых, в таблице ничего не добавляется. Или я недопонял вопроса.?
← →
sniknik © (2004-03-26 12:38) [9]Johnmen © (26.03.04 12:16) [5]
ответственно подтверждаю. ;о))
Jungle (26.03.04 12:27) [6]
дело явно в коде (том что скрывается за точками в первом посте).
или в соответствиях типа в связке "поле в таблице"-"параметр"-"задаваемое значение".
← →
Jungle (2004-03-26 13:39) [10]Я в ADOConnection пересоздал строку подключения и всё заработало. Только непонятно почему, т.к. при запуске программы я всё равно создаю dsn-файл и в ADOConnection.ConnectionString := "FILE NAME=x:\prog\config.dsn". Или я торможу или одно из двух... А, скорее всего, третье :)
← →
Fay © (2004-03-26 14:38) [11]>> .Parameters.ParamValues["parDateTime"] := FormatDateTime("yyyy-mm-dd hh:nn:ss", tmpDate
Тут ему не хватит кавычек 8)
← →
Jungle (2004-03-26 15:05) [12]Блин. Убейте меня.
Дело вот в чём. в запросе у меня слово TableName. По ходу работы я функцией StringReplace заменяю его на имя настоящей таблицы. Так вот. Если указать имя таблицы сразу, то всё замечательно работает. А если делать как я, то не работает. Не понимаю почему.
Подскажите как правильно сделать, а то совсем ни черта не соображаю уже. Через параметр не выходит.
← →
sniknik © (2004-03-26 15:11) [13]> Блин. Убейте меня.
будь завтра в условленом месте часов так в 11-12.
> А если делать как я, то не работает. Не понимаю почему.
перечитай внимательно пост [3] второй абзац. решение там.
← →
Jungle (2004-03-26 15:22) [14]Уфф. Вроде заработало. Спасибо.
Вот что значит невнимательно читать :)
Пожалуй погожу теперь помирать :)
← →
KSergey © (2004-03-26 16:24) [15]> parDateTime типа ftString
Мне лично вот это как раз не понятно... Зачем "типа ftString"?
← →
Fay © (2004-03-26 20:31) [16]чтобы оптимизатору крышу сносить
← →
Jungle (2004-03-29 14:43) [17]2 KSergey
Понимаешь, у меня никак не получалось запихать дату/время в таблицу. Я нашёл пример, где параметр был типа ftString. Всё заработало, а почему - мне как-то побоку.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c