Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неполучается сделать update записи. [D6, Paradox]


Леонид ©   (2005-06-02 13:16:00) 

Это код UpdateSQL, ModifySQL

update pribor
set
 RN = :RN,
 NomerPP = :NomerPP,
 Naimen = :Naimen,
 Tip = :Tip,
 Predel = :Predel,
 NomerZ = :NomerZ,
 DataPov = :DataPov,
 DataNext = :DataNext,
 Inventar = :Inventar,
 Ceh = :Ceh,
 Mesto = :Mesto,
 Prim = :Prim
where
 RN = :OLD_RN


Это код для изм. записи.

procedure TPribor_Form.Button1Click(Sender: TObject);
var
  i, nNomerPP, oldRN : integer;
  nNaimen : String;
begin
 oldRN:=DM.PriborSQL.FieldByName('RN').Value;
//Изменяю запись с пом UpdateSQL
 DM.PriborSQL.Edit;
//Присваиваю полям (параметрам) в запросе значения
 DM.PriborSQL.FieldByName('RN').Value:=oldRN;
   if Edit1.Text = '' then
      DM.PriborSQL.FieldByName('NomerPP').Clear
   else
   DM.PriborSQL.FieldByName('NomerPP').Value:=StrToInt(Edit1.text);
   DM.PriborSQL.FieldByName('Naimen').Value:=ComboBox1.Text;
   DM.PriborSQL.FieldByName('Tip').Value:=Edit2.text;
   DM.PriborSQL.FieldByName('Predel').Value:=Edit3.text;
   DM.PriborSQL.FieldByName('NomerZ').Value:=Edit4.text;
     if MaskEdit1.Text = '1.  .  ' then
        DM.PriborSQL.FieldByName('DataPov').Clear
   else
   DM.PriborSQL.FieldByName('DataPov').Value:=StrToDate(MaskEdit1.text);
     if MaskEdit2.Text = '1.  .  ' then
     DM.PriborSQL.FieldByName('DataNext').Clear
   else
   DM.PriborSQL.FieldByName('DataNext').Value:=StrToDate(MaskEdit2.text);
   DM.PriborSQL.FieldByName('Inventar').Value:=Edit5.text;
   DM.PriborSQL.FieldByName('Ceh').Value:=ComboBox2.text;
   DM.PriborSQL.FieldByName('Mesto').Value:=Edit6.text;
   DM.PriborSQL.FieldByName('Prim').Value:=Edit7.text;
//Завершение редактирование записи
   DM.PriborSQL.Post;
//Делаю из кэша запись в таблицу
   if DM.PriborSQL.UpdatesPending
     then DM.PriborSQL.ApplyUpdates;
   nNomerPP:=DM.PriborSQLNomerPP.Value;
   nNaimen:=DM.PriborSQLNaimen.Value;
//Переоткрываю базу, чтобы была нормальная выборка с сортировкой
   DM.PriborSQL.Active:=false;
   DM.PriborSQL.Active:=true;
   SaveButton.Enabled:=false;
   Pribor_Form.ActiveControl:=GroupBox1;
//Очищаю все поля ввода от старых значений.
   for i:=0 to ComponentCount-1 do
   if Components[i] is TEdit then
  (Components[i] as TEdit).Text:='';
   for i:=0 to ComponentCount-1 do
   if Components[i] is TMaskEdit then
  (Components[i] as TMaskEdit).Text:='';
   for i:=0 to ComponentCount-1 do
   if Components[i] is TCombobox then
  (Components[i] as TCombobox).Text:='';
   DM.PriborSQL.Locate('NomerPP', nNomerPP, [loPartialKey]);
   DM.PriborSQL.Locate('Naimen', nNaimen, [loPartialKey]);
   Pribor_Status.Panels[0].Text:= 'Всего записей ' + IntToStr(DM.PriborSQL.RecordCount);
   Pribor_Status.Panels[1].Text:='Была изменена запись';
end;

Поле RN - автоинкриментное и ключевое.
Не пойму, что здесь не так.


Леонид   (2005-06-02 13:26:00) [1]

Спасибо. Все работает.


Sergey13   (2005-06-02 13:20:00) [2]

oldRN:=DM.PriborSQL.FieldByName('RN').Value;
//Присваиваю полям (параметрам) в запросе значения
DM.PriborSQL.FieldByName('RN').Value:=oldRN;

Вот это зачем?
Если
>Поле RN - автоинкриментное и ключевое.
то и не трогай его никогда.

И
RN = :RN,
из запроса выкинь, чтоб не мешалось.


Наверх

Титульная страница Поиск, карта сайта Написать письмо