Добавление записей в БД

Добавляю записи в таблицу через хранимую процедуру
ALTER PROC [dbo].[Insert_customers]
@name VARCHAR(40), @adres VARCHAR(40), @DATA VARCHAR(50), @phone VARCHAR(40)
AS
INSERT INTO Customers( fio, adres, data_birthday, telephone)
VALUES(@name,@adres,@DATA,@phone)
вот код delphi
ADoQuery3.SQL.Text:='exec insert_customers @name=:n, @adres=:a, @date=:d, @phone=:p';
ADOQuery3.Parameters.ParamByName('n').Value:=sEdit3.Text;
ADOQuery3.Parameters.ParamByName('a').Value:=sEdit2.Text;
ADOQuery3.Parameters.ParamByName('d').Value:=sEdit1.Text;
ADOQuery3.Parameters.ParamByName('p').Value:=sMaskEdit1.Text;
ADOQuery3.Active:=true;
когда нажимаю кнопку добавить выскакивает ошибка что процедура insert_customers ожидает параметр @data который не был указан. Хотя я вроде указал его. В чем ошибка?Ошибку понял неправильно написал параметр. Моя невнимательность меня погубит)еще вопросик после нажатия на кнопку выскочила ошибка project raised exception class EDatabaseError with message 'Adoquery :CommandText does not return a result set' Но запись в базу добавилась, тогда из за чего ошибка?
14 ответов

Но запись в базу добавилась, тогда из за чего ошибка?
потому что вместо
ADOQuery3.Active:=true;
надо делать
AdoQuery.ExecSQL;
Только для запросов которые начинаются на Select надо делать Active или Open, для остальных Exec\Execute\ExecSQLPS это есть в любом учебнике


еше одна проблемка тоже добавляю записи в бд через процедуру но выскакивает ошибка делфи ругается на параметр дата
ADoQuery3.SQL.clear;
ADoQuery3.SQL.Text:='exec insert_buy @id_customer=:id, @data=:dt, @id_session=:id_s,  @number_buy_ticket=:number';
ADOQuery3.Parameters.ParamByName('id').Value:='select id_customer from Customers where name=@name';
ADOQuery3.Parameters.ParamByName('dt').Value:=Date;
ADOQuery3.Parameters.ParamByName('id_s').Value:=sDBGrid1.DataSource.DataSet.Fields[3].asString;
ADOQuery3.Parameters.ParamByName('number').Value:=sEdit4.Text;
ADOQuery3.ExecSQL;
ругается на эту строку
ADOQuery3.Parameters.ParamByName('dt').Value:=Date;
Ошибка : приложение использует для текущей операции значение неверного типа. Хотя в хранимой процедуре и таблице стоит тип Date


дата в субд и в делфи может отличаться


qwertehok, так что делать? Переводить в varchar? или можно как то по другому сделать?


вместо субд аксесс? тогда можно попробовать так
ADOQuery3.Parameters.ParamByName('dt').Value:='#'+DateToStr(Date)+'#';
#03.04.1998# - это формат даты в аксессе - нужно передать такое же


СУБД sql server


версия делфи версия MSSQL скрин типов данных в таблице


Delphi7 MS SQL Server 2008 r2


с датой скорее всего проблему решил,пока проверить не могу, т.к. выдает ошибку на эту строку
ADOQuery3.Parameters.ParamByName('id_s').Value:=sDBGrid2.DataSource.DataSet.Fields[3].AsInteger;
поле в таблице имеет тип инт вроде делаю все правильно но ошибка такая же как и с датой


может кто нибудь сказать в чем ошибка?


а текст ошибки какой?


Алекcей, Ошибка : приложение использует для текущей операции значение неверного типа.


попробуйте так:
ADOQuery3.Parameters.ParamByName('id_s').asInteger:=sDBGrid2.DataSource.DataSet.Fields[3].AsInteger;


Алекcей, после точки у меня даже такого метода нет