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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2009, 14:45   #1
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию Ошибка при редактировании поля (в Update)

кто подскажет в чем проблема у меня не могу понять, добавляет нормально все, но при редактировании поля kollichestvo_detey выдает эту ошибку ппц. Пишет, что не может закрыть DataSet. Помомгите ее найти, и подскажите, как уменьшить размер ввоодимых чисел до 999 хотябы, чтоб пользователь не мог вводить больше 3-х значного числа.
количество детей.JPG
-------------------------------------------------------------------------
Событие по нажатию на Добавить
Код:
procedure TFD_PAC.BitBtn1Click(Sender: TObject);
var
a: integer;
begin
//нажатие на кнопку ОК на форме добавления пациента
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya,imya,otchestvo,data_rogdeniya,telefon,kollichestvo_detey,semeynoe_pologenie,adres,gitel,obrazovanie,opekun,pol) VALUES (:e1,:e2,:e3,:d,:e4,:e5,:e6,:e7,:e8,:m1,:o1,:p1);';
DM.ADOQ_PAC.Parameters.ParamByName('e1').Value:=Edit1.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e2').Value:=Edit2.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e3').Value:=Edit3.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e4').Value:=Edit4.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e5').Value:=strtoint(Edit5.Text);
DM.ADOQ_PAC.Parameters.ParamByName('e6').Value:=Edit6.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e7').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e8').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('m1').Value:=memo1.Text;
dm.ADOQ_PAC.Parameters.ParamByName('o1').Value:=o;
dm.ADOQ_PAC.Parameters.ParamByName('p1').Value:=p;
DM.ADOQ_PAC.Parameters.ParamByName('d').Value:= FormatDateTime('yyyy-mm-dd', datetimepicker1.Date);
DM.ADOQ_PAC.ExecSQL;
//обновление таблицы пациентов
a:=DM.ADOQ_PAC.RecNo;
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Add('SELECT * FROM pacient');
DM.ADOQ_PAC.Open;
DM.ADOQ_PAC.RecNo:=a;
end;
По нажатию на редактировать
Код:
procedure TFD_PAC.BitBtn3Click(Sender: TObject);
var
id,a: integer;
begin
//Редактирование пациента
id:=DM.ADOQ_PACid_pacienta.Value;
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text:='UPDATE pacient SET familiya=:e1, imya=:e2,otchestvo=:e3,data_rogdeniya=:d,telefon=:e4,kollichestvo_detey=:e5,semeynoe_pologenie=:e6,
adres=:m1,gitel=:e7,
obrazovanie=:e8,opekun=:o1,pol=:p1 WHERE id_pacienta=:id';
DM.ADOQ_PAC.Parameters.ParamByName('e1').Value:=Edit1.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e2').Value:=Edit2.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e3').Value:=Edit3.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e4').Value:=Edit4.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e5').Value:=strtoint(Edit5.Text);
DM.ADOQ_PAC.Parameters.ParamByName('e6').Value:=Edit6.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e7').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e8').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('m1').Value:=memo1.Text;
dm.ADOQ_PAC.Parameters.ParamByName('o1').Value:=o;
dm.ADOQ_PAC.Parameters.ParamByName('p1').Value:=p;
DM.ADOQ_PAC.Parameters.ParamByName('d').Value:= FormatDateTime('yyyy-mm-dd', datetimepicker1.Date);
DM.ADOQ_PAC.Parameters.ParamByName('id').Value:=id;
DM.ADOQ_PAC.ExecSQL;
a:=DM.ADOQ_PAC.RecNo;
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Add('SELECT * FROM pacient');
DM.ADOQ_PAC.Open;
DM.ADOQ_PAC.RecNo:=a;
end;
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Старый 12.07.2009, 00:40   #2
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Не может выполнить операцию на закрытом наборе данных. Если не можешь понять где ошибка, проверяй в отладчике, на какой строчке возникает ошибка и анализируй.
Код:
procedure TFD_PAC.BitBtn3Click(Sender: TObject);
var
id,a: integer;
begin
//Редактирование пациента
id:=DM.ADOQ_PACid_pacienta.Value;
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text:='UPDATE pacient SET familiya=:e1, imya=:e2,otchestvo=:e3,data_rogdeniya=:d,telefon=:e4,kollichestvo_detey=:e5,semeynoe_pologenie=:e6,
adres=:m1,gitel=:e7,
obrazovanie=:e8,opekun=:o1,pol=:p1 WHERE id_pacienta=:id';
DM.ADOQ_PAC.Parameters.ParamByName('e1').Value:=Edit1.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e2').Value:=Edit2.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e3').Value:=Edit3.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e4').Value:=Edit4.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e5').Value:=strtoint(Edit5.Text);
DM.ADOQ_PAC.Parameters.ParamByName('e6').Value:=Edit6.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e7').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e8').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('m1').Value:=memo1.Text;
dm.ADOQ_PAC.Parameters.ParamByName('o1').Value:=o;
dm.ADOQ_PAC.Parameters.ParamByName('p1').Value:=p;
DM.ADOQ_PAC.Parameters.ParamByName('d').Value:= FormatDateTime('yyyy-mm-dd', datetimepicker1.Date);
DM.ADOQ_PAC.Parameters.ParamByName('id').Value:=id;
DM.ADOQ_PAC.ExecSQL;
a:=DM.ADOQ_PAC.RecNo;
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Add('SELECT * FROM pacient');
DM.ADOQ_PAC.Open;
DM.ADOQ_PAC.RecNo:=a;
end;
Так:
Код:
procedure TFD_PAC.BitBtn3Click(Sender: TObject);
var
id,a: integer;
begin
//Редактирование пациента
a:=DM.ADOQ_PAC.RecNo;
id:=DM.ADOQ_PACid_pacienta.Value;
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text:='UPDATE pacient SET familiya=:e1, imya=:e2,otchestvo=:e3,data_rogdeniya=:d,telefon=:e4,kollichestvo_detey=:e5,semeynoe_pologenie=:e6,
adres=:m1,gitel=:e7,
obrazovanie=:e8,opekun=:o1,pol=:p1 WHERE id_pacienta=:id';
DM.ADOQ_PAC.Parameters.ParamByName('e1').Value:=Edit1.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e2').Value:=Edit2.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e3').Value:=Edit3.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e4').Value:=Edit4.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e5').Value:=strtoint(Edit5.Text);
DM.ADOQ_PAC.Parameters.ParamByName('e6').Value:=Edit6.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e7').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('e8').Value:=Edit7.Text;
DM.ADOQ_PAC.Parameters.ParamByName('m1').Value:=memo1.Text;
dm.ADOQ_PAC.Parameters.ParamByName('o1').Value:=o;
dm.ADOQ_PAC.Parameters.ParamByName('p1').Value:=p;
DM.ADOQ_PAC.Parameters.ParamByName('d').Value:= FormatDateTime('yyyy-mm-dd', datetimepicker1.Date);
DM.ADOQ_PAC.Parameters.ParamByName('id').Value:=id;
DM.ADOQ_PAC.ExecSQL;
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Add('SELECT * FROM pacient');
DM.ADOQ_PAC.Open;
DM.ADOQ_PAC.RecNo:=a;
end;
Ты хочешь ввести ограничение ввода чисел в Edit? тогда в обработчике OnChange или OnKey.... проверяй длину введенного значения (Length())

Последний раз редактировалось Evgeniy26; 12.07.2009 в 19:16.
Evgeniy26 вне форума Ответить с цитированием
Старый 12.07.2009, 08:10   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Ты хочешь ввести ограничение ввода чисел в Edit? тогда в обработчике OnChange или OnKey.... проверяй длину введенного значения (Length())
Ну, можно и в инспекторе свойств у нужного Edit-a в свойстве Max или MaxLength (не помню как точно называется, на память пишу), указать сколько символов можно вводить. Зачем писать лишние строчки кода, когда есть свойство.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.07.2009, 15:30   #4
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

нужно запрос на изменение делать в отдельном запросе, так как вы закрываете его DM.ADOQ_PAC.Close;
а потом a:=DM.ADOQ_PAC.RecNo; а она не может выполниться, так как уже доступ к данным закрыт.
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 12.07.2009, 19:51   #5
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от Evgeniy26 Посмотреть сообщение
Не может выполнить операцию на закрытом наборе данных. Если не можешь понять где ошибка, проверяй в отладчике, на какой строчке возникает ошибка и анализируй.
.....
Благодарю чет я сразу не заметил
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
disabled поля при выборе checkBox(а) Damhurz JavaScript, Ajax 11 22.05.2009 15:26
Автоматический Update при открытии файла ruavia3 Microsoft Office Excel 3 16.03.2009 11:31
Проблема при редактировании данных GloomyVitek БД в Delphi 8 24.11.2007 18:54
Кракозябры при редактировании таблиц Balvenie БД в Delphi 1 23.04.2007 16:18