Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение и удаление записи 
:(
    Опции темы
dilik
  Дата 30.7.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.5.2006
Где: CCCP

Репутация: нет
Всего: нет



Помогите написать запрос на изменение и удаление записи. 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 

Это сообщение отредактировал(а) dilik - 30.7.2007, 22:48
PM WWW ICQ   Вверх
ALeXandrK
Дата 30.7.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 6



А зачем вообще все так сложно 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;



Это сообщение отредактировал(а) ALeXandrK - 30.7.2007, 23:32


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
pseud
Дата 1.8.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



модераторы заняты и упустили твое сообщение
поэтому ты сам сделай следующее:

1. Здесь тему закрой
2. Задай вопрос в Ветке по Базам Данных

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


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
ALeXandrK
Дата 1.8.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 6



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


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Rodman
Дата 1.8.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



Цитата(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;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Alexeis
Дата 1.8.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



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

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
dilik
Дата 1.8.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.5.2006
Где: CCCP

Репутация: нет
Всего: нет



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

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 
PM WWW ICQ   Вверх
pseud
Дата 1.8.2007, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(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 Найти цитируемый пост)
Все находиться там где должно быть. Незачем простыми вопросами основные разделы разбавлять  . 


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

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

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


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Rodman
Дата 2.8.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



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

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

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

PM MAIL WWW Skype GTalk YIM MSN   Вверх
dilik
Дата 3.8.2007, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.5.2006
Где: CCCP

Репутация: нет
Всего: нет



Нет, я просто неточно выразился фразой "Как написать процедуру обработки нажатия button, при которой введеные НОВЫЕ данные пользователя сохранялись в базу?", здесь можно подумать о запросе на добавление (INSERT), а мне надо именно на изменение (UPDATE). Спасибо всем, буду пробовать.
PM WWW ICQ   Вверх
dilik
Дата 8.8.2007, 08:59 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.5.2006
Где: CCCP

Репутация: нет
Всего: нет



А как сделать так, чтобы при нажатии на кнопки 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'


Это сообщение отредактировал(а) dilik - 8.8.2007, 09:03
PM WWW ICQ   Вверх
ALeXandrK
Дата 8.8.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 6



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

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


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

Это сообщение отредактировал(а) ALeXandrK - 8.8.2007, 12:54


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Gwire
Дата 10.8.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



На счет "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 заменяет символ '

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.