Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2009, 14:50   #1
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию Ошибка: Дополнительная возможность не реализована

Всем Привет!
Хочу спросить тех, кто сталкивался с такой ошибкой, или тот кто знает, что эта ошибка означает или в чем дело.
Имеется обычная storedproc на Sqlserver2000, вставки одной и сразу обновления другой таблицы.
Код:
CREATE PROCEDURE passportins(
@pasid integer,
@data datetime,
@cabid integer)
 AS
insert into passports
values(@pasid,@data)
update objects_cab
set pass_id=@pasid
where cab_id=@cabid
GO
Передаю параметры и выполняю процедуру в Delphi(событие на нажатие кнопки):
Код:
with Adostoredproc16 do
begin
parameters.ParamValues['@pasid']:=m;
parameters.ParamValues['@Data']:=vartodatetime(Edit6.Text);
parameters.ParamValues['@cabid']:=k;
end;
Adostoredproc16.ExecProc;
Во время запуска приложения, а вернее нажатия на кнопку выдает такое вот сообщение:
....Дополнительная возможность не реализована....
И в чем дело не пойму, вроде сто раз все перепроверил, не хочет и все.
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 08.05.2009, 14:58   #2
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

Цитата:
Код:
with Adostoredproc16 do
begin
parameters.ParamValues['@pasid']:=m;
parameters.ParamValues['@Data']:=vartodatetime(Edit6.Text);
parameters.ParamValues['@cabid']:=k;
end;
Adostoredproc16.ExecProc;
а вот так попробовать:
Код:
try
 adoconnection1.begintrans;
 with Adostoredproc16 do
  begin
   parameters.ParamByName('@pasi').Value:=m;
   parameters.ParamByName('@Data').Value:=vartodatetime(Edit6.Text);
   parameters.ParamByName('@cabid').Value:=k;
  end;
 Adostoredproc16.ExecProc;
 adoconnection1.committrans;
except
 adoconnection1.rollbacktrans;
end
Тяжело быть бестолковым.....

Последний раз редактировалось Dark_Spirit; 08.05.2009 в 15:17. Причина: обшибся ;)
Dark_Spirit вне форума Ответить с цитированием
Старый 08.05.2009, 15:01   #3
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

Спасибо, попробую и напишу ответ.
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 09.05.2009, 21:55   #4
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

Все равно та же ошибка, и главное попробовал вставить данные хотя бы в первую таблицу через ADotablе, так он пишет: could not convert null into string. Хотя у меня нулей никаких вообще нет.
Код:
procedure TMainform.Button10Click(Sender: TObject);
begin

ADOTable2.Open;
ADOTable2.Append;
ADOTable2.Fieldbyname('Pass_id').Asinteger:=m;
ADOTable2.Fieldbyname('Pass_date').AsDatetime:=vartodatetime(Edit6.Text);
ADOTable2.Post;
ADOTable2.Close;

end;
Хотя на sql serverе прекрасно все вставляется и обновляется. Не знаете в чем дело?
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 09.05.2009, 22:09   #5
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

если в таблице на сервере у тебя есть и другие поля, кроме этих двух, в данном случае какое-то поле строкового типа, при этом по определению оно не должно быть пустым, и ему не указано значение по умолчанию, то происходит описанная тобой ошибка, т.е. при добавлении записи это поле не знает какое значение принять - нулл нельзя, но другого значения тоже нет, вот он ругается
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 09.05.2009, 23:05   #6
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

Цитата:
Сообщение от koma_grusha Посмотреть сообщение
если в таблице на сервере у тебя есть и другие поля, кроме этих двух, в данном случае какое-то поле строкового типа, при этом по определению оно не должно быть пустым, и ему не указано значение по умолчанию, то происходит описанная тобой ошибка, т.е. при добавлении записи это поле не знает какое значение принять - нулл нельзя, но другого значения тоже нет, вот он ругается
Да, понятно. Но у меня в таблице этой только два поля. Pass_id integer, и Pass_date datetime, может быть дело в формате даты?
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 09.05.2009, 23:45   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а ты проверял что именно приходит из прилады на вход ХП? может там в какой-то переменной как раз нулл и есть
soleil@mmc вне форума Ответить с цитированием
Старый 10.05.2009, 00:35   #8
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

Проверял и выводил их в edit для проверки
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 10.05.2009, 01:58   #9
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

В общем все - тема закрыта. Каким-то чудом все работает!
Несколько раз исправлял тип данных на char где datetime, - потом получилось с ним, попробовал поставить datetime -и с ним теперь вышло.
Код:
try
adoconnection1.BeginTrans;
with Adostoredproc16 do
begin
parameters.Parambyname('@pasid').Value:=m;
parameters.Parambyname('@Data1').Value:=Edit6.Text;
parameters.Parambyname('@cabid').Value:=k;
end;
Adostoredproc16.ExecProc;
adoconnection1.committrans;
except
 adoconnection1.rollbacktrans;
end;
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 10.05.2009, 14:24   #10
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

И еще в storedproc на сервере прописал тип не datetime а char(10). С datetime storedproc выдает такую же ошибку даже если прописывать в storedproc на обновление. В итоге на сервере:
Код:
CREATE PROCEDURE passportins(
@pasid integer,
@data1 char(10),
@cabid integer)
 AS
insert into passports
values(@pasid,@data1)
update objects_cab
set 
pass_id=@pasid
where cab_id=@cabid
GO
В то время как таблицу passports не менял вовсе.
И в Delphi дату записываю как обычную дату.
Код:
parameters.Parambyname('@Data1').Value:=Datetostr(date);
либо просто как edit6.text;
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать возможность выбора размещения алисаса? artemavd БД в Delphi 4 25.03.2009 22:57
Есть возможность в Дельфи на отмену последнего действия romul_ Помощь студентам 10 23.01.2009 14:06
как ограничить возможность ввода формата в ячейках? Ivo4ka Microsoft Office Excel 23 14.02.2008 09:02
Подскажите есть ли возможность saags Microsoft Office Excel 2 20.11.2007 15:29
Программер... ЕСТЬ возможность поработать ... Москва mikele Фриланс 4 16.01.2007 11:19