Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
1-27479
777
2003-09-26 21:53
2003.10.09
Action


1-27527
Yorick
2003-09-30 08:41
2003.10.09
Как определить момент окончания перетаскивания


4-27793
DelphiNew
2003-08-04 10:49
2003.10.09
Убийство процессов


14-27640
Жук
2003-09-19 14:20
2003.10.09
Тяпница на дворе...


3-27306
LinOS
2003-09-16 11:49
2003.10.09
Не могу произвести UPDATE для ClientDataSet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский