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

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

ADOQuery1.SQL.Add Update редактирование данных [D6, Access]


Drakon ©   (2005-04-26 14:05:00) 

По запросу в Edit1....Edit10 отборажаются данные из базы данных *mdb.

Хочу отредактировать данные данной записи в Edit1....Edit10.

По запросу:
Form4.ADOQuery1.SQL.Add('Update DB set FIO='''+Edit1.Text+''',...,TEL='''+Edit10.Text+''' where FIO=FIO');

Происходит редактирование всех записей в базе в поле FIO, а не именно этой.
Подскажите.


Соловьев   (2005-04-26 18:33:00) [1]


> Сам запрос
>
> Form4.ADOQuery1.Close;
> Form4.ADOQuery1.SQL.Clear;                              
>          
> Form4.ADOQuery1.SQL.Add('Update Сотрудники set FIO='''+
> Edit1.Text+''',...,TEL=''' + Edit10.Text + ''' where ID=+Form4.Edit12.Text+'');
> Form4.ADOQuery1.ExecSQL;
>
> Теперь работает :)

А теперь внеси ДА'ртаньяна :)


Anatoly Podgoretsky   (2005-04-26 16:06:00) [2]

Пожалуйста и тебе спасибо, скрасил наши серые будни.


Drakon   (2005-04-26 15:30:00) [3]

Всем спасибо за внимание!


Sergey13   (2005-04-26 15:24:00) [4]

2[15] Drakon ©   (26.04.05 15:16)
>Ну что сделаешь... Учимся.
Странное у тебя учебное пособие наверное.

>А можно как то на ID сослаться по другому?
Кроме Edit-ов есть например еще и DBEdit-ы.

ЗЫ: Не экономь на компонентах на форме. Использовать один кверик и на чтение и на запись как то не того, ИМХО. Запутаешься сам.


Drakon   (2005-04-26 15:20:00) [5]

"Короче добавил я Edit11 где"
опечатка, следует читать: "Короче добавил я Edit12 где"


Drakon   (2005-04-26 15:16:00) [6]

Короче добавил я Edit11 где
Edit12.text:=ADOQuery1.Fields.FindField('ID').AsString;

Сам запрос

Form4.ADOQuery1.Close;
Form4.ADOQuery1.SQL.Clear;                                      
Form4.ADOQuery1.SQL.Add('Update Сотрудники set FIO='''+ Edit1.Text+''',...,TEL=''' + Edit10.Text + ''' where ID=+Form4.Edit12.Text+'');
Form4.ADOQuery1.ExecSQL;

Теперь работает :)

>Sergey13 ©   (26.04.05 15:09) [12]
>2[10] Drakon ©   (26.04.05 14:51)
>Ну и мешанина! 8-(

Ну что сделаешь... Учимся.

А можно как то на ID сослаться по другому?


Lexer   (2005-04-26 15:14:00) [7]


>  [13] Drakon ©   (26.04.05 15:12)
> Так вот и вопрос: как определить id текущей записи


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


Drakon   (2005-04-26 15:12:00) [8]

Если ID это "идентификационный номер" записи в базе данных.
Нужно: where id=id текущей записи
Так вот и вопрос: как определить id текущей записи


Sergey13   (2005-04-26 15:09:00) [9]

2[10] Drakon ©   (26.04.05 14:51)
Ну и мешанина! 8-(


Lexer   (2005-04-26 15:05:00) [10]

какие поля у тебя выводит запрос?


Drakon   (2005-04-26 14:51:00) [11]

> Megabyte ©   (26.04.05 14:20) [3]
Что подсказать? Честно говоря, вопрос сформулирован через одно место...

Постараюсь сформулировать по другому:

На форме лежит Edit1...Edit10, DBGrid, ADOConnection, ADOQuery, DataSourse.

При EditChange выполняется запрос, согласно критерию запроса в DBGrid выводятся записи.

При DBGridDblClick:
Edit1.text:=ADOQuery1.Fields.FindField('FIO').AsString;
.......
Edit10.text:=ADOQuery1.Fields.FindField('TEL').AsString;

Теперь я хочу отредактировать данные которые в Edit1...Edit10 для текущей записи.

При ButtonClick:
Form4.ADOQuery1.Close;
Form4.ADOQuery1.SQL.Clear;                                      
Form4.ADOQuery1.SQL.Add('Update Сотрудники set FIO='''+ Edit1.Text+''',...,TEL=''' + Edit10.Text + ''' where FIO=FIO');
Form4.ADOQuery1.ExecSQL;

Как написать критерии для WHERE для редактирования именно текущей записи?


Sergey13   (2005-04-26 14:46:00) [12]

2[7] Drakon ©   (26.04.05 14:37)
>Как добавить критерии?

В where FIO=FIO измени правую часть равенства на те условия которые нужны. Перед редактированием записи запомни текущее значение, а перед выполнением запроса подставь его вместо правой части.

ЗЫ: Отвратительный способ изменять по ФИО. Неужели никакого кода нет?


Lexer   (2005-04-26 14:45:00) [13]

посмотри вот здесь

> [2] sniknik ©   (26.04.05 14:16)
> WHERE ID={значение ключа для записи подлежащей обновлению}
> если ключа нет, советую добавить.

поиск делается по ключевым (оригинальным во всей таблице) полям, тебе лучше добавить в таблицу поле ID


Drakon   (2005-04-26 14:37:00) [14]

Как именно отредактировать данные одной записи базы данных например в поле "FIO", "TEl"? У меня редактируются сразу ВСЕ записи.

Как добавить критерии?


Lexer   (2005-04-26 14:26:00) [15]


> Не редактирует вообще.


а чему у тебя oldFIO равен?


Lexer   (2005-04-26 14:24:00) [16]


> [3] Megabyte ©   (26.04.05 14:20)
> Тебе надо отредактировать одну конкретную запись, а у тебя
> редактируются все записи с FIO = "FIO"?


у него редактируются абсолютно ВСЕ записи


Drakon   (2005-04-26 14:23:00) [17]

> Lexer ©  
''' where FIO='+'''+oldFIO+''')

Не редактирует вообще.


Megabyte   (2005-04-26 14:20:00) [18]

Что подсказать? Честно говоря, вопрос сформулирован через одно место...
Тебе надо отредактировать одну конкретную запись, а у тебя редактируются все записи с FIO = "FIO"?
Так ты сам же в условии "Where" так поставил. Добавь критерии.

з.ы. И вообще какое-то извращенное редактирование. Имхо проще через DBEdit делать.


sniknik   (2005-04-26 14:16:00) [19]

WHERE ID={значение ключа для записи подлежащей обновлению}
если ключа нет, советую добавить.

либо при твоей записи
... where FIO=:FIO');
ADOQuery1.Parameters.ParamByName('FIO').Value:= Edit??.Text;


Lexer   (2005-04-26 14:15:00) [20]

> +''' where FIO=FIO');

естественно будут меняться ВСЕ записи, попробуй так:
''' where FIO='+'''+oldFIO+''')
где oldFIO - значение поля ФАМИЛИЯ текущей записи


Наверх

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