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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2010, 14:29   #11
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
function TfmMain.db_SQL(sql:String;resp:boolean):boolean;
begin
  result:=false;
  zq1.SQL.Text:=sql;
  try
        zq1.Close;
        zq1.ExecSQL;
        result:=true;
   except // при неудачном добавлении  FALSE
   on E:Exception do
       ShowError('Помилка виконання запиту',E.Message);
   end;
end;
Код:
sql:=format('UPDATE clients SET dogovor=''%s'',card=''%s'',fio=''%s'',pakid=''%d'',regdata=''%s'',adr=''%s'',fon=''%s'',firmid=''%d'',hispaydatafrom=''%s'',hispaydatato=''%s'',ourpaydatato=''%s'' WHERE id=''%d'';',
[dogovor,card,fio,pakid,datetostr(regdate),adrr,tel,firmid,datetostr(hisdatefrom),datetostr(hisdateto),datetostr(ourdateto),id]);
 if fmMain.db_SQL(sql,false) then // если не удалось обновить то ДОБАВИТЬ !!!
 begin
   ShowMessage('Редактирование клиента');
   sql:=format('INSERT INTO history (clid,date,value) VALUE(''%d'',''%s'',''%s'');',[id,datetostr(now),'Редактирование клиента']);
   if (fmMain.db_SQL(sql,false))<>true then ShowError('Невозможно обновить историю','Ошибка запроса к базе');
   ini.WriteInteger('db','clientid',id);
 end
вот Вам и дублирование при ЛЮБОМ неудачном обновлении.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.06.2010 в 14:40.
evg_m вне форума Ответить с цитированием
Старый 24.06.2010, 15:20   #12
Error_kpi
Пользователь
 
Регистрация: 23.06.2010
Сообщений: 17
По умолчанию

Цитата:
if fmMain.db_SQL(sql,false) then // если не удалось обновить то ДОБАВИТЬ !!!
begin
ShowMessage('Редактирование клиента');
sql:=format('INSERT INTO history (clid,date,value) VALUE(''%d'',''%s'',''%s'');',[id,datetostr(now),'Редактирование клиента']);
if (fmMain.db_SQL(sql,false))<>true then ShowError('Невозможно обновить историю','Ошибка запроса к базе');
ini.WriteInteger('db','clientid',id );
end
Вопервых если не удалось обновить то НЕДОБАВИТЬ историю.

Вовторых ошибку нашел уже правлю: за что боролись на то и напоролись, подвило следующее:
Цитата:
Естественно, потому они контролируются программно (во время создания базы не знал как выставляются атрибуты полей в MySQL, впервые с этой СУБД работаю).
как оказолось я чтото там не очень хорошо контролировал и в БД оказалось несколько запесей с одним ид, соответственно при редактировании редактируется сразу несколько записей т.к. WHERE id=MyID.
Ошибку осознал. Тему можно закрывать. Недай Бог мне еще раз использовать ключевое поле NULL и неуникальное!!!!!!!!!
Error_kpi вне форума Ответить с цитированием
Старый 24.06.2010, 15:24   #13
Error_kpi
Пользователь
 
Регистрация: 23.06.2010
Сообщений: 17
По умолчанию

К стати баг с дублирование ИД порявился только после добавления 13 клиента. Мистика однако.
Error_kpi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дублирование при печати pavel.ignatenko Microsoft Office Excel 1 03.03.2010 23:39
Ошибка при редактировании поля (в Update) Droid БД в Delphi 4 12.07.2009 19:51
Автоматический Update при открытии файла ruavia3 Microsoft Office Excel 3 16.03.2009 11:31
Update - Обновление всех записей Veroonya SQL, базы данных 4 15.12.2008 13:42
update или исправление записей в таблицах. Roof БД в Delphi 4 15.08.2008 15:35