![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не соответствие типа поля и данных (Asdatetime) [D7, MSSQL]
redlord © (2005-08-14 00:09:00)всем привет
народ подскажите где ошибка
у меня не получается в в поле тавлицы занести значение времени
(во время выполнения происходит исключение с текстом что поле не соответствует данным)
создается таблица вот таким запросом
begin
shareresurs='create table sharedresurs('+
'ip char(15) not null,'+
'path char(3500) not null,'+
'filename char(3500) not null,'+
'ext char(254) not null,'+
'size int not null,'+
'atribute int not null,'+
'createtime datetime not null,'+
'protokol int not null)';
form1.sqlDataSet1.CommandText:=shareresurs;
form1.sqlDataSet1.ExecSQL(false);
end;
а записывается значение так
s:=datetimetostr(now);
form1.Caption:=s; //exit;
sql:='insert into sharedresurs (ip,path,filename,ext,size,atribute,createtime,protokol) values (:ip,:path,:filename,:ext,:size,:atribute,:createtime,:protokol)';
form1.sqlDataSet1.CommandText:=sql;
...
...
form1.sqlDataSet1.Params.Parambyname('createtime').Asdatetime:= strtodatetime(s);
...
form1.sqlDataSet1.ExecSQL(false);
Anatoly Podgoretsky (2005-08-14 22:57:00) [1]БДЕ не поддерживает все возможности всех серверов.
redlord (2005-08-14 22:13:00) [2]TO anatoly
чтото я не понял ето чтож получается возможность у компонента есть но пользоватся ей нельзя так чтоли ?
sniknik (2005-08-14 13:22:00) [3]Anatoly Podgoretsky © (14.08.05 12:45) [7]
ну вот он и глюк а вовсе не дататайм.
(хорошо хоть он структуру таблици привел, полностью. хотя "грешил" именно на передачу дататайма.)
Anatoly Podgoretsky (2005-08-14 12:45:00) [4]sniknik © (14.08.05 12:12) [5]
Это для БДЕ не возможно, это не АДО
AlexWlad (2005-08-14 12:42:00) [5]Кстати, неплохо-бы привести точное сообщение об ошибке. А то действительно, здесь не телепаты.
sniknik (2005-08-14 12:12:00) [6]> А откуда уверенность в том, что текущий формат системы и БД совпадают?
передается параметром как дататайм
> form1.sqlDataSet1.Params.Parambyname('createtime'). Asdatetime:= str todatetime(s);
тип дататайм это число, от форматов не зависит, т.е. 100% совпадают. (если не считать маленького недоразумения в 2 дня ;о)))
предложенный в sniknik © (14.08.05 11:21) [3] строковый формат представления даты -> "yyyymmdd hh:nn:ss" не зависит от локализации, воспринимается mssql сервером однозначно на любой.
нет. если здесь чтото не то, то это только изза BDE. (но еще больше вероятность что там еще чтото в программе глючит/перепутано... ну к примеру строка в 3500 символов это для BDE как нормально? это же строка,а не мемо не блоб...)
AlexWlad (2005-08-14 11:54:00) [7]А откуда уверенность в том, что текущий формат системы и БД совпадают?
Например в системе - dd.mm.yyyy (German/Russian)
MSSQL - mm/dd/yyyy (English)
Соответственно, если число <=12, то все нормально, а например 24 марта 2005 -> '24.03.2005' для сервера выглядит как 3-е "чего-то" 2005, даже если он примет точку за слэш.
Вариант решения: SET DATEFORMAT 'dmy' - для MSSQL или меняй в программе ShortDateFormat.
sniknik (2005-08-14 11:21:00) [8]> попробуй так:
> ...
и возможно это не поможет...
показанный код совершенно верный (кроме пары мелочей ;) должно работать (в ADO бы сработало и так)
но если там BDE... не поручусь... сменить срочно! ;о)) а не получится сменить (не ранняя стадия узучения/начинания проекта а конец, причем проект такой на который тебе наплевать... добить и бросить (курсовой)) замени параметр даты строковым, строку формируй в формате "yyyymmdd hh:nn:ss" (это и для нормального проекта пойдет, не то что BDE+MSSQL).
(откуда уверенность, что это именно от datetime поля? проверь остальные параметры на соответствие с типами полей, может ты строку в число пихаеш)
мелочи ;о), пара ;о) :
1 в структуре таблици нет ключа...(!!!) а это очень важно, нет поля под "естественный" ключ, введи "искуственный".
2 не то что ключа, индексов нет. может они после и создаются но судя по вопросу нет. значит поиск и т.д. не предусмотрен в этой таблице?
3 > ip char(15) not null IP? лучше представить типом int а строковое представление сделать вычисляемым полем (на клиенте). (будет 4 байта вместо 15. по числовым полям быстрее поиск, сортировки, обьеденения)
4 > path char(3500) not null 3500 символов и во всех записях они полностью заполнены (нехилый путь ;)? не верю. наверняка заполняется меньшее количество, максимальное будет редко. т.что сделай path VarChar(3500) not null
и остальные также.
5 все поля обязательны для заполнения? перебор. имхо. но тут конечно надо по задаче смотреть. (ext это расширение файла? не бывает файлов без расширения? не вообще, вообще бывают ;), у тебя)
Киря (2005-08-14 05:18:00) [9]попробуй так:
form1.sqlDataSet1.Params.Parambyname('createtime').value:= date;
Anatoly Podgoretsky (2005-08-14 00:50:00) [10]Ты что БДЕ используешь? Очень плохо.