Форум: "Базы";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизQuery..... Найти похожие ветки
← →
Vitaly (2003-09-12 23:14) [0]Вот такая вот проблемка...
Делаю SQL-запрос из 2-х таблиц, затем выбранные значения заносятся в Query, ну а на форме компоненты отображают эти значения.
Вопрос.. Как мне можно изменить эти значения в таблицах откуда они выбирались.
По нажатию кнопки пишу
Table1.edit;
Table1.setfields([nil,nil,dbedit1.text,dbedit2.text]);
изменяется значение на котором был установлен курсор в главной форме до выполнения SQL-запроса
Заранее благодарен.
← →
mfender (2003-09-13 04:10) [1]Не совсем понятно, какое значение следует менять...
А так, можно поставить курсор в нужное место Table1.Locate
← →
Vitaly (2003-09-13 09:02) [2]mfender
>Не совсем понятно, какое значение следует менять...
Нужно поменять те значения которые выбрались из этих двух таблиц по запросу.
← →
Виталий Панасенко (2003-09-13 10:13) [3]Можно послать запрос на обновление данных, используя ключи:
update table1
set field1=1, field2=2...,fieldn=n
where key=(ключевая информация)
← →
vitaly (2003-09-13 12:51) [4]В принципе я догадывался, что нужно посылать запрос на обновление просто я думал может быть еще есть способ.
Но все равно мне не очень понятно как это корректно сделать.
(ключевая информация)-это те же условия, что применялись для отбора записей так ли я понял или нет.
← →
Zacho (2003-09-13 15:12) [5]
> vitaly (13.09.03 12:51) [4]
"ключевая информация" - это значение первичного ключа записи.
Блин, не понимаю, как вообще можно работать с БД не зная, что такое первичный ключ ?
← →
Vitaly (2003-09-13 16:26) [6]Мучился, мучился, наконец ЗАМУЧИЛСЯ
Значит так вот SQL запрос который выполняется по нажатию клавиши:
procedure TMainForm.ButtonClick(Sender: TObject);
begin
if (NAGRS.Text<>"")and(ViborData.Text <> "") and (ViborData1.Text <> "" ) then
with DataModule2.FindQuery do begin
datamodule2.FindQuery.SQL.Clear;
DataModule2.FindQuery.SQL.Add("Select DISTINCT * from Spravka, Dannie");
DataModule2.FindQuery.SQL.Add("where Name Like :AGRS1");
DataModule2.FindQuery.SQL.Add("and Date between :Date1 and :Date2");
DataModule2.FindQuery.SQL.Add("AND Spravka.Key=dannie.LinkKey;");
DataModule2.FindQuery.Parameters.ParamByName("AGRS1").Value:=NAGRS.Text;
DataModule2.FindQuery.Parameters.ParamByName("Date1").Value:=ViborData.Text;
DataModule2.FindQuery.Parameters.ParamByName("Date2").Value:=ViborData1.Text;
DataModule2.FindQuery.Active:=true;
FindResForm.ShowModal;end
else begin MessageDlg("Укажите условия отбора!", mtError, [mbOK],0);
abort; end;
end;
по нажатию кнопки пишу
procedure TFindResForm.abcPicSpeedBtn6Click(Sender: TObject);
begin
with DataModule2.FindQuery do begin
datamodule2.FindQuery.SQL.Clear;
DataModule2.FindQuery.SQL.Add("Update Dannie");
DataModule2.FindQuery.SQL.Add("set Fact= "+dbedit2.Text);
DataModule2.FindQuery.SQL.Add("set Korrection= "+dbedit3.Text);
DataModule2.FindQuery.SQL.Add("where Date="+wwdbedit5.Text);
DataModule2.FindQuery.SQL.Add("and Name="+dbedit1.Text);
DataModule2.FindQuery.SQL.Add("AND Spravka.Key=dannie.LinkKey;");
DataModule2.FindQuery.Active:=true;
end;end;
и получаю вот такое сообщение
"(Ошибка синтаксиса(пропущен оператор) в выражении запроса "Set Korrection=")"
Что это значит!?
Спасибо!
И не нужно говорить что я не знаю, что такое первичный ключ. Просто я не так понял выражение "Ключевая информация"
← →
Zacho (2003-09-13 16:54) [7]
> Vitaly (13.09.03 16:26) [6]
Во-первых: правильно DataModule2.FindQuery.SQL.Add(", Korrection= "+dbedit3.Text);
Во-вторых: DataModule2.FindQuery.SQL.Add("AND Spravka.Key=dannie.LinkKey;"); - это что за фигня ?
В-третьих: Какие поля в твоей таблице составляют ПК ? Вот только их и надо в where.
Подучи SQL.
P.S. Обновить данные в двух таблицах можно только двумя запросами.
← →
Vitaly (2003-09-13 17:03) [8]>Zacho
> Во-вторых: DataModule2.FindQuery.SQL.Add("AND Spravka.Key=dannie.LinkKey;"); - это что за фигня ?
Таким способом я указал связь м/у таблицами.
И еще посоветуй какой нибудь хороший электронный справочник по SQL.
← →
Zacho (2003-09-13 17:12) [9]
> Vitaly (13.09.03 17:03) [8]
> Таким способом я указал связь м/у таблицами
Не выйдет. Да и не надо.
> И еще посоветуй какой нибудь хороший электронный справочник
> по SQL.
Не знаю. Конечно, есть, причем прямо у тебя на компе LocalSQL.hlp
А вот книгу могу посоветовать - М.Грабер "SQL (бестселлер)". Но, насколько знаю, в инете в электронном виде есть только старое и весьма неполное издание. Так что лучше купить.
← →
Vitaly (2003-09-13 17:39) [10]> Не выйдет. Да и не надо.
Удалил я DataModule2.FindQuery.SQL.Add("AND Spravka.Key=dannie.LinkKey;");
и он выдает такое сообщение "Ошибка синтаксиса в инструкции UPDATE" что это значит.
Cпасибо за совет >М.Грабер "SQL (бестселлер)".
← →
Zacho (2003-09-13 17:46) [11]
> Vitaly (13.09.03 17:39) [10]
Приведи полностью свой UPDATE. И лучше именно в виде строки UPDATE ... , а не в виде кода на паскале.
← →
Zacho (2003-09-13 17:52) [12]Кстати, если ты серьезно занимаешься (или собираешься заниматься) разработкой БД и приложений БД, то сильно советую прочитать и осмыслить книгу К.Дж. Дейт "Введение в системы баз данных"
← →
Vitaly (2003-09-14 22:36) [13]Zacho спасибо тебе конечно за твое терпение, но все же если можешь помоги мне написать SQL на обновление выбранных значений из двух таблиц по первому запросу.
Задача такая: Выполняется SQL запрос
>procedure TMainForm.ButtonClick(Sender: TObject);
begin
if (NAGRS.Text<>"")and(ViborData.Text <> "") and (ViborData1.Text <> "" ) then
with DataModule2.FindQuery do begin
datamodule2.FindQuery.SQL.Clear;
DataModule2.FindQuery.SQL.Add("Select DISTINCT * from Spravka, Dannie");
DataModule2.FindQuery.SQL.Add("where Name Like :AGRS1");
DataModule2.FindQuery.SQL.Add("and Date between :Date1 and :Date2");
DataModule2.FindQuery.SQL.Add("AND Spravka.Key=dannie.LinkKey;");
DataModule2.FindQuery.Parameters.ParamByName("AGRS1").Value:=NAGRS.Text;
DataModule2.FindQuery.Parameters.ParamByName("Date1").Value:=ViborData.Text;
DataModule2.FindQuery.Parameters.ParamByName("Date2").Value:=ViborData1.Text;
DataModule2.FindQuery.Active:=true;
FindResForm.ShowModal;end
else begin MessageDlg("Укажите условия отбора!", mtError, [mbOK],0);
abort; end;
end;
и если пользователь изменил какое-либо значение, то оно должно сохранится в таблице из которой выбиралось это значение.
За советы отдельное спасибо. Просто в селе где я живу вряд ли я найду такие книги, а вот скоро съезжу в город и обязательно возьму.
← →
Рустем (2003-09-15 13:36) [14]Вам не кажется, что в UPDATE должен быть всего один SET ?
with DataModule2.FindQuery do begin
datamodule2.FindQuery.SQL.Clear;
DataModule2.FindQuery.SQL.Add("Update Dannie");
DataModule2.FindQuery.SQL.Add("set Fact= "+dbedit2.Text);
^^^
DataModule2.FindQuery.SQL.Add("set Korrection= "+dbedit3.Text);
^^^
DataModule2.FindQuery.SQL.Add("where Date="+wwdbedit5.Text);
DataModule2.FindQuery.SQL.Add("and Name="+dbedit1.Text);
DataModule2
← →
Vitaly (2003-09-19 20:36) [15]Все я разобрался!!!
Пасиба всем.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c