Изменение данных в DBgrid(добавляет, а не изменяет)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Изменение данных в DBgrid(добавляет, а не изменяет)

Сообщение Plato » 29.11.2014 23:56:34

Пытаюсь изменить запись в DBGrid.А они добавляются(и правильно делают :D ).
Я так понимаю надо перед добавлением удалить ту запись которую я выбрал? Что-то у меня не получается.

Form1(удаление и обновление):
Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
var st:string;
begin
  st:=SQLQuery1.FieldByName('Client_id').AsString;
  SQLQuery1.Active:=False;
  SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.Add('DELETE FROM CLIENTS WHERE Client_id='+st+';');
  SQLQuery1.ExecSQL;
  SQLTransaction1.Commit;
  SQLQuery1.SQL.Text:='SELECT * FROM CLIENTS;';
  SQLQuery1.Open;
end;

procedure TForm1.Button3Click(Sender: TObject);
var status:boolean;
begin
   Form2.Show;
    Form2.Edit1.Text:=DBGrid1.SelectedField.Text;
    DBGrid1.SelectedIndex:=1;
     Form2.Edit2.Text:=DBGrid1.SelectedField.Text;
     DBGrid1.SelectedIndex:=2;
     Form2.Edit3.Text:=DBGrid1.SelectedField.Text;
     DBGrid1.SelectedIndex:=3;
     Form2.Edit4.Text:=DBGrid1.SelectedField.Text;
     DBGrid1.SelectedIndex:=4;
     Form2.Edit5.Text:=DBGrid1.SelectedField.Text;
      DBGrid1.SelectedIndex:=5;
      Form2.Edit6.Text:=DBGrid1.SelectedField.Text;
      DBGrid1.SelectedIndex:=6;
end;                                 


Form2(создание):
Код: Выделить всё
procedure TForm2.Button1Click(Sender: TObject);
var query:TSQLQuery;
  begin
    if (Edit1.Text <> '') and (Edit2.Text <> '') and (Edit3.Text <> '') and (Edit4.Text <> '') and (Edit5.Text <> '') and (Edit6.Text <> '') then
begin
Form1.SQLTransaction1.Commit;
  Form1.SQLQuery1.Active:=False;
  query := TSQLQuery.Create(Self);
  query.DataBase:=Form1.SQLite3Connection1;
  query.Transaction:=Form1.SQLTransaction1;
  query.SQL.Add('INSERT INTO Clients (Client_id,First_name,Last_name,Account_id,Address,Ph_number) VALUES (''' + Form2.Edit1.Text + ''',''' +Form2.Edit2.Text + ''',''' + Form2.Edit3.Text + ''',''' + Form2.Edit4.Text + ''',''' + Form2.Edit5.Text + ''',''' + Form2.Edit6.Text + ''' )');
  query.ExecSQL;
  query.Destroy;
  Form1.SQLQuery1.Active:=true;
  Form2.Close;
end
    else
    Form3.ShowModal;
  end;       
Аватара пользователя
Plato
новенький
 
Сообщения: 13
Зарегистрирован: 25.10.2014 21:09:03

Re: Изменение данных в DBgrid(добавляет, а не изменяет)

Сообщение wavebvg » 30.11.2014 00:20:29

У Вас первичный ключ есть в запросе?
Если нет, тогда исправьте.
Если запрос и операции обновления не по первичному ключу, тогда укажите ключ вручную в настройках датасета.
Иногда стандарный query глючит и ему, при наличии первичного ключа, все равно приходится его прописывать.
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

Re: Изменение данных в DBgrid(добавляет, а не изменяет)

Сообщение Plato » 30.11.2014 00:48:07

wavebvg писал(а):У Вас первичный ключ есть в запросе?
Если нет, тогда исправьте.
Если запрос и операции обновления не по первичному ключу, тогда укажите ключ вручную в настройках датасета.
Иногда стандарный query глючит и ему, при наличии первичного ключа, все равно приходится его прописывать.

В самой бд(sqlite) Client_id прописан как первичный ключ.
Query:
Свойство UsePrimaryKeyAsKey true .
Свойство SQL прописано: SELECT * FROM Clients .
Аватара пользователя
Plato
новенький
 
Сообщения: 13
Зарегистрирован: 25.10.2014 21:09:03

Re: Изменение данных в DBgrid(добавляет, а не изменяет)

Сообщение wavebvg » 01.12.2014 11:17:16

Ещё: UpdateMode = upWhereKeyOnly

Есть предположение, что проблема в том, что "первичный ключ не находится". Когда, года 4 назад, делал что-то с SQLite (не повелось мне с ней работать, с базой этой потом) проблем не наблюдалось.
Для того, чтобы решить вопрос полностью - нужно подготовить пример, в котором он будет воспроизводиться. Это либо решит проблему у Вас (сами найдете или на форуме поможем), либо её решить в будущем у всех (если это действительно баг).
ЗЫ Да, безумная идея - есть ли возможность переименовать поле на id для первчиного ключа и повторить тест у Вас?
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234

Рейтинг@Mail.ru
cron