Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.01.2009, 19:42
qwwwq qwwwq вне форума
Прохожий
 
Регистрация: 12.01.2009
Сообщения: 47
Репутация: 10
По умолчанию Обновление картежа

Как обновить значение в таблице?
Я сначало делал запрос, а потом уже пытался обновить другую таблицу но выдает ошибку, что не правильно?

Код:
procedure TAdd_rashodi_Form.BitBtn1Click(Sender: TObject);
Var a,b : string;
begin

  DataModule1.ADOQuery.Active:= false;
  DataModule1.ADOQuery.SQL.Clear;
  DataModule1.ADOQuery.SQL.Add('select Sum(Summ) ');
  DataModule1.ADOQuery.SQL.Add('FROM [Rasshody]');
  DataModule1.ADOQuery.SQL.Add('WHERE Id_user = 0');
  DataModule1.ADOQuery.SQL.Add('AND Id_schet = 48');
  DataModule1.ADOQuery.Active:= true;

  a := DataModule1.ADOQuery.Fields[0].AsString;

  DataModule1.ADOQuery.Active:= false;
  DataModule1.ADOQuery.SQL.Clear;
  DataModule1.ADOQuery.SQL.Add('Update Schet');
  DataModule1.ADOQuery.SQL.Add('SET Rashodi = a');
  DataModule1.ADOQuery.SQL.Add('WHERE Id = 48');
  DataModule1.ADOQuery.Active:= true;

    Close;


end;

Последний раз редактировалось qwwwq, 12.01.2009 в 19:48.
Ответить с цитированием
  #2  
Старый 12.01.2009, 19:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,034
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Здесь:
Код:
DataModule1.ADOQuery.SQL.Add('SET Rashodi = ' + a);

A вообще, можно делать в 1 запрос.

Код:
UPDATE Schet
SET Rashodi = (SELECT Sum(Summ) FROM Rasshody WHERE Id_user = 0 AND Id_schet = 48)
WHERE Id = 48

Естественно, это сам запрос. Кстати, запросы можно вносить одной строкой.
Например, в твоем случае Id надо заменить на некоторый параметр, запрос оформить константой и Format'ом просто вколачивать туда значение и целиком вставлять в ADOQuery.
Ответить с цитированием
  #3  
Старый 12.01.2009, 20:01
qwwwq qwwwq вне форума
Прохожий
 
Регистрация: 12.01.2009
Сообщения: 47
Репутация: 10
По умолчанию

Все равно не работает, не могу понять в чем дело
Ответить с цитированием
  #4  
Старый 12.01.2009, 20:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,034
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А, ну да! Не увидел сразу.
Тебе надо во втором запросе сделать не Active := True, а ExecSQL (как-то так - точку поставишь, тебе среда подскажет).
Нельзя открывать датасеты, которые не возвращают выборки.
Ответить с цитированием
  #5  
Старый 12.01.2009, 20:08
qwwwq qwwwq вне форума
Прохожий
 
Регистрация: 12.01.2009
Сообщения: 47
Репутация: 10
По умолчанию

Спасибо получилось
Ответить с цитированием
  #6  
Старый 13.01.2009, 21:22
qwwwq qwwwq вне форума
Прохожий
 
Регистрация: 12.01.2009
Сообщения: 47
Репутация: 10
По умолчанию

Код:
DataModule1.Rashodi_podschet_ADOQuery.Active:= false;
DataModule1.Rashodi_podschet_ADOQuery.SQL.Clear;
DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('Update Schet');
DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('SET Balans =' + inttostr(r));
DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('Rashodi =' + inttostr(r1));
DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('WHERE Id ='+ inttostr(id_schet));
DataModule1.Rashodi_podschet_ADOQuery.ExecSQL;

не могу сделать чтобы в одном запросе обновлялось сразу два значения, что не правильно? Пробовал перед Rashodi ставить SET и AND не помогает, если делать без
Код:
DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('Rashodi =' + inttostr(r1));
то все обновляется
Ответить с цитированием
  #7  
Старый 14.01.2009, 00:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,034
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Запятую забыл.

Код:
UPDATE что-то-там
SET Поле1 = Значение1, Поле2 = Значение2
WHERE Условие-отбора
Ответить с цитированием
  #8  
Старый 14.01.2009, 10:47
qwwwq qwwwq вне форума
Прохожий
 
Регистрация: 12.01.2009
Сообщения: 47
Репутация: 10
По умолчанию

Спасибо, получилось
Ответить с цитированием
  #9  
Старый 14.01.2009, 18:43
qwwwq qwwwq вне форума
Прохожий
 
Регистрация: 12.01.2009
Сообщения: 47
Репутация: 10
По умолчанию

Код:
 b:='clWhite';

  DataModule1.Rashodi_podschet_ADOQuery.Active:= false;
  DataModule1.Rashodi_podschet_ADOQuery.SQL.Clear;
  DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('Update Setting');
  DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('SET parametr =' + b);
  DataModule1.Rashodi_podschet_ADOQuery.SQL.Add('WHERE name =' + '''Form_color''');
  DataModule1.Rashodi_podschet_ADOQuery.ExecSQL;

Не записывает clWhite в базу, в чем может быть ошибка?

Последний раз редактировалось qwwwq, 14.01.2009 в 18:49.
Ответить с цитированием
  #10  
Старый 14.01.2009, 18:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,034
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

кавычки забыл:

Код:
b := '''clWhite'''; // по 3 одинарных кавычки
Ответить с цитированием
  #11  
Старый 14.01.2009, 18:54
qwwwq qwwwq вне форума
Прохожий
 
Регистрация: 12.01.2009
Сообщения: 47
Репутация: 10
По умолчанию

Спасибо, пробовал в самом запросе и с ковычками поиграть не получалось ничего а сверху поменять не догодался
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter