Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Изменение и удаление записи


Автор: dilik 30.7.2007, 22:44
Помогите написать запрос на изменение и удаление записи. smile 


Вот так я загружаю данные из базы в поля:

Код

procedure TForm3.FormActivate(Sender: TObject);
begin
Query1.SQL.Text:='Select * from klient;';
Query1.Active:=True;
while (not Query1.Eof) do
begin
 Edit1.Text:=(Query1.fieldByName('Fio').AsString);
 Edit2.Text:=(Query1.fieldByName('Nomer_dogovora').AsString);
 Edit3.Text:=(Query1.fieldByName('Adres').AsString);
 ComboBox1.Text:=(Query1.fieldByName('Pol').AsString);
 Edit5.Text:=(Query1.fieldByName('Telefon').AsString);
 DateTimePicker1.Date:=(Query1.fieldByName('Data_rojdeniya').AsDateTime);
 Edit7.Text:=(Query1.fieldByName('Rabota').AsString);
 Edit6.Text:=(Query1.fieldByName('E-mail').AsString);
 ComboBox2.Text:=(Query1.fieldByName('Obekt').AsString);
 Edit4.Text:=(Query1.fieldByName('Rassrochka').AsString);
 Query1.Next();
end;
end;


1) Как написать процедуру обработки нажатия button, при которой введеные НОВЫЕ данные пользователя сохранялись в базу?

2) Как написать процедуру обработки нажатия button, при выбранная запись удалялась из базы?
 smile 

Автор: ALeXandrK 30.7.2007, 23:26
А зачем вообще все так сложно smile 
Ты вместо обычных Edit, ComboBox и т.п. не можешь поставить аналоги типа DBEdit, DBComboBox и т.п. ?!
Они сами позаботяться о сохранении в базу.

 А для удаления напиши:
Код

Query1.Delete;


И вообще код у тебя странный какой-то... при активации окна активируется запрос, а потом начинается бессмысленная пробежка по всей базе, пока не доскачем до последней строки.... зачем ???

Может сразу тогда написать:
Код

with Query1 do 
  begin
    Last;
    Edit1.Text:=fieldByName('Fio').AsString;
    Edit2.Text:=.fieldByName('Nomer_dogovora').AsString;
    Edit3.Text:=fieldByName('Adres').AsString;
    ComboBox1.Text:=fieldByName('Pol').AsString;
    Edit5.Text:=ieldByName('Telefon').AsString;
    DateTimePicker1.Date:=fieldByName('Data_rojdeniya').AsDateTime;
    Edit7.Text:=fieldByName('Rabota').AsString;
    Edit6.Text:=fieldByName('E-mail').AsString;
    ComboBox2.Text:=fieldByName('Obekt').AsString;
    Edit4.Text:=fieldByName('Rassrochka').AsString;
  end;


А если ты поставишь вместо Editов DBEditы и т.д., то твой код вообще сократиться до предела:
Код

with Query1 do
  begin
    SQL.Text:='Select * from klient;'
    Open;
    Last;
  end;


Автор: pseud 1.8.2007, 17:22
модераторы заняты и упустили твое сообщение
поэтому ты сам сделай следующее:

1. Здесь тему закрой
2. Задай вопрос в http://forum.vingrad.ru/forum/delphi-db-database-reporting.html

и ответов получишь гораздо больше

Автор: ALeXandrK 1.8.2007, 18:35
Не нужно перезадавать вопрос, нужно просто обратиться к модераторам, чтобы тему перенесли smile 

Автор: Rodman 1.8.2007, 18:58
Цитата(dilik @  30.7.2007,  21:44 Найти цитируемый пост)
Как написать процедуру обработки нажатия button, при которой введеные НОВЫЕ данные пользователя сохранялись в базу?

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
   with Query do
   begni
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO klient (Fio, Nomer_dogovora, Adres, Pol, Telefon, Data_rojdeniya, Rabota, E-mail, Obekt, Rassrochka) ');
    SQL.Add('VALUES (:Prm1, ;Prm2, :Prm3, :Prm4, :Prm5, :Prm6, :Prm7, :Prm8, :Prm9, :Prm10); ');
    Parameters.ParamByName('Prm1').Value:=Edit1.Text;
    Parameters.ParamByName('Prm2').Value:=Edit2.Text;
    Parameters.ParamByName('Prm3').Value:=Edit3.Text;
    Parameters.ParamByName('Prm4').Value:=ComboBox1.Text;
    Parameters.ParamByName('Prm5').Value:=Edit5.Text;
    Parameters.ParamByName('Prm6').Value:=DateTimePicker1.Date;
    Parameters.ParamByName('Prm7').Value:=Edit7.Text;
    Parameters.ParamByName('Prm8').Value:= Edit6.Text;
    Parameters.ParamByName('Prm9').Value:=ComboBox2.Text;
    Parameters.ParamByName('Prm10').Value:=Edit4.Text;
    ExecSQL;
   end;
end;

Цитата(dilik @  30.7.2007,  21:44 Найти цитируемый пост)
2) Как написать процедуру обработки нажатия button, при выбранная запись удалялась из базы?

уточни параметр по которому удаляешь...
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
   with Query do
   begni
    Close;
    SQL.Clear;
    SQL.Add('DELETE FROM klient WHERE (FieldName=:Prm);');
    Parameters.ParamByName('Prm1').Value:=Edit1.Text;//какой то параметр
    ExecSQL;
   end;
end;

Автор: Alexeis 1.8.2007, 19:14
Цитата(pseud @  1.8.2007,  17:22 Найти цитируемый пост)
модераторы заняты и упустили твое сообщение

  Все находиться там где должно быть. Незачем простыми вопросами основные разделы разбавлять smile .

Автор: dilik 1.8.2007, 22:18
Писал именно сюда, т.к. понимаю что вопрос не очень сложный, именно для в раздел для новичков.

1) To Rodman: а разве при изменении данных (введенных НОВЫХ данных) в sql-запросе не будет слова UPDATE?

2) 
Цитата("Rodman")

уточни параметр по которому удаляешь...

Т.е на форме несколько Edit`ов, в них из базы загружаю данные, при нажатии на кнопку "Удалить", удаляется вся строчка в базе (все эти Edit`ы).

Цитата("Rodman")

Код

 SQL.Add('DELETE FROM klient WHERE (FieldName=:Prm);');
 Parameters.ParamByName('Prm1').Value:=Edit1.Text;//какой то параметр



Prm я так понимаю параметр, но в приведенном коде удаляется только одна запись, а мне надо чтобы все данные из Edit`ов удалились из базы. В принципе, можно написать Parameters.ParamByName('Prm1').Value:=Edit1.Text;//какой то параметр столько штук, сколько надо, но тогда не понятно с Prm. Эта строка будет одна или тоже столько же, сколько и Edit`ов? smile 

Автор: pseud 1.8.2007, 23:57
Цитата(dilik @  1.8.2007,  22:18 Найти цитируемый пост)
а разве при изменении данных (введенных НОВЫХ данных) в sql-запросе не будет слова UPDATE


новая запись:
Код

INSERT INTO table_name 
(field1, filed2, ...)
VALUES
(value1, value2, ...)


изменение записи
Код

UPDATE table_name
SET
field1 = value1
, field2 = value2
...
WHERE
при_необходимости


удаление записи
Код

DELETE FROM table_name
WHERE
filed_id = 555


Добавлено через 5 минут и 54 секунды
Цитата(Alexeis @  1.8.2007,  19:14 Найти цитируемый пост)
Все находиться там где должно быть. Незачем простыми вопросами основные разделы разбавлять  . 


в итоге какой нить впервые появившийся на форуме гуру по БД
глянет на слово "Новичкам" и пропустит мио ушей, и в итоге не зайдет, не прочтет, не научит.

да и каша выходит небольшая

иногда в основных разделах такое затишье, что хочется хоть простые вопросы пощупать 

Автор: Rodman 2.8.2007, 08:43
Цитата(dilik @  1.8.2007,  21:18 Найти цитируемый пост)
з Edit`ов удалились из базы

про удаление ты правильно понял... так если тебе надо несколько записей удалить - повторяй сколько надо и передавай нужные параметры!!!

и почитай внимательно разницу между INSERT и UPDATE... pseud правильно сказал, а ты я вижу путаешься!!!

Автор: dilik 3.8.2007, 05:52
Нет, я просто неточно выразился фразой "Как написать процедуру обработки нажатия button, при которой введеные НОВЫЕ данные пользователя сохранялись в базу?", здесь можно подумать о запросе на добавление (INSERT), а мне надо именно на изменение (UPDATE). Спасибо всем, буду пробовать.

Автор: dilik 8.8.2007, 08:59
А как сделать так, чтобы при нажатии на кнопки DBNavigator`а (NbNext и NbPrior), записи менялись в полях. Сейчас я кинул на форму компоненты DBNavigator1 и Query1, и объединил их с помощью DataSource1. Но запись показывается только последняя и не меняется, хотя кнопки NbNext и NbPrior можно клацнуть столько раз, сколько у меня записей в базе.

Мои поля:  (это не код программы, я просто указываю, какому Edit`у соответствует запись из базы)

Edit1.Text:='Fio'
 Edit2.Text:='Nomer_dogovora'
 Edit3.Text:='Adres'
 ComboBox1.Text:='Pol'
 Edit5.Text:='Telefon'
 DateTimePicker1.Date:='Data_rojdeniya'
 Edit7.Text:='Rabota'
 Edit6.Text:='E-mail'
 ComboBox2.Text:='Obekt'
 Edit4.Text:='Rassrochka'

Автор: ALeXandrK 8.8.2007, 12:53
Для этого есть специальные компоненты DBEdit!!!
Но если тебя это не устраивает, тогда пиши в обработчике 
Query1.OnScroll:
Код

...
begin
 Edit1.Text:= Query1.FieldByName('Fio').AsString; 
 ...
end;


 smile  ОДНА ТЕМА - ОДИН ВОПРОС!

Автор: Gwire 10.8.2007, 20:25
На счет "TDBEdit" и "TDBComboBox" я согласен.
А вот зачем изменять запрос в "Query1". Конечно, если он выборку делает из одной таблици.
Для добавления записи:
Код

    Query1.Insert;
    Query1.FieldByName('<имя поля>').AsString:= Edit1.Text;
    Query1.Post;

Для изменения текущей записи:
Код

    Query1.Edit;
    Query1.FieldByName('<имя поля>').AsString:= Edit1.Text;
    Query1.Post;

Для удаления текущей записи:
Код

    Query1.Delete;

Для удаления группы записей:
Код

    Query1.Filter:='<имя поля>='#39+ <параметр отсеивания> +#39;
    Query1.Filtered:= True;
    while Query1.RecordCount <> 0 do Query1.Delete;
    Query1.Filtered:= False;

#39 заменяет символ '

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)