powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Update
9 сообщений из 9, страница 1 из 1
Update
    #32129637
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HI господа прогаммёры!!!
Простите за банальный вопрос....
Нужно обновить запись в таблице (база Pdox) пытаюсь так:
(QSSCategQ->Query)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TFrmOsn.DBComboBox2Change(Sender: TObject);
var
id : String;
begin
   id := TabLgt.FieldValues['Category_id'];
   QSSCategQ.Close;
   QSSCategQ.SQL.Clear;
   QSSCategQ.SQL.Add('UPDATE Lgota SET Privilege='+
   '(SELECT Pr_tarif FROM Ss_Categ WHERE Ss_Categ.Category=:id)');
   QSSCategQ.Params[ 0 ].AsString := id;
   QSSCategQ.ExecSQL;
end;

не получается.... т.е. ругается и запись не обновляет.
ругается так:
'Error creating cursor handle'
А если делаю простое присваение, так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TFrmOsn.DBComboBox2Change(Sender: TObject);
var
id : String;
begin
   id := TabLgt.FieldValues['Category_id'];
   QSSCategQ.Close;
   QSSCategQ.SQL.Clear;
   QSSCategQ.SQL.Add('SELECT Pr_tarif FROM Ss_Categ WHERE Ss_Categ.Category=:id');
   QSSCategQ.Params[ 0 ].AsString := id;
   QSSCategQ.Open;
   TabLgtPrivilege.Value := QSSCategQ.Fields[ 0 ].AsFloat;
   QSSCategQ.Close;
end;
работает нормально, помогите наладить update ...
...
Рейтинг: 0 / 0
Update
    #32129642
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я попробовал, все работает!
Правда у меня: var id : integer; может в этом дело,
со строкой я не попробовал.

И еще: такаой Update изменит ВСЕ строки в таблице Lgota!
...
Рейтинг: 0 / 0
Update
    #32129645
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет oleg_e
данные String преобразование не спосло.....

И еще: такаой Update изменит ВСЕ строки в таблице Lgota!

Т.е. весе записи столбца Privilege таблици Lgota примут значение которое вернёт SELECT????.....
...
Рейтинг: 0 / 0
Update
    #32129647
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE Lgota
SET Privilege=Ss_Categ.Pr_tarif
from Ss_Categ
WHERE Ss_Categ.Category=id


Только я не пойму, неужели Lgota и Ss_Categ у Вас никак не связаны?

Скорее всего нужно что=то типа

UPDATE Lgota
SET Privilege=Ss_Categ.Pr_tarif
from Ss_Categ
WHERE Ss_Categ.Category=id
and Lgota.CategoryId=Ss_Categ.Category
=======
Короче, описание таблиц и желаемое решение - в студию!
...
Рейтинг: 0 / 0
Update
    #32129686
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Cat2 ...
Видишь база то Pdox не прохоит твой код говорит что
'Invalid use of keyword
Token:From.....
Говорил ты мне (да и не только ты) переписать все под SQL server, да вот все локти кусаю да структуру баз меняю....

Да действительно Lgota & SS_Categ не связаны....
База (Pdox)
ss_categ - справочник категорий граждан...
id(+)-ключ
Kod(A)-Код Собеса (их справочник нужен для выгрузки в отчёт)
Category(A)-Найм карегории
Pr_tarif(N)-Процент от тарифа.
Law_id(S) - Ключ Закона (из таблици Law, которой подчинеяется ss_categ)

Lgota -данные по льготе..
id(+)-ключ
Base_id(S) - ключ из таблици Base (данные по абонентам)
Category_id(A) - наименование категории льгот =SS_Categ.Category
code_categ(A)- код категории (Собесовский)=SS_Categ.Kod
Pivilege(N) - % от тарифа (оплпта за услуги)=SS_Categ.Pr_tarif
и т.п.

Цель изложенного выше кода ....
При вставке в Lgota из стправочника ss_categ наименования категориии, заполнить (атвоматом) поля Pivilege & code_categ.....
...
Рейтинг: 0 / 0
Update
    #32130732
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так вот:
Код: plaintext
1.
UPDATE Lgota SET Pivilege =
(SELECT Pr_tarif FROM Ss_Categ WHERE Ss_Categ.Category = Lgota.Category_id)
обновяться все поля таблицы Lgota. Просто и без всяких параметров, но обновяться ВСЕ! Если надо не все, то:
Код: plaintext
1.
2.
UPDATE Lgota SET Pivilege =
(SELECT Pr_tarif FROM Ss_Categ WHERE Ss_Categ.Category = Lgota.Category_id)
WHERE ID = :id

Наверное так лучше, потому, что обновляються только нужные поля.
В параметре Id - идентификатор созданной записи.

И еще: у меня не очень много опыта, но, по моему, в Lgota нужно лишь поле Category_id, а все остальные поля надо брать каждый раз из Ss_Categ. (Конечно, если данные в полях Lgota.Pivilege и Lgota.code_categ не меняются).
...
Рейтинг: 0 / 0
Update
    #32131378
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HI oleg_e

Спасибо за сотрудничество мысль ясна...
но главная загвоздка в том, что возникает обшибка (выше изложенная) и Update не проходит....

P.S. Жаль что у тя Аси нет ......
Иначе кинь мне на Емелю Casper200@Yandex.ru
...
Рейтинг: 0 / 0
Update
    #32131414
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй второй вариант от oleg_e
с такими селектами
Код: plaintext
1.
(SELECT DISTINCT Pr_tarif FROM Ss_Categ WHERE Ss_Categ.Category = Lgota.Category_id)


или

Код: plaintext
1.
(SELECT Max(Pr_tarif) FROM Ss_Categ WHERE Ss_Categ.Category = Lgota.Category_id)

Похоже, что дело в том, что формально возможно возвращение нескольких строк

=======
P.S. А как ты решил проблему замены счетчика или перехода показаний через 0?
...
Рейтинг: 0 / 0
Update
    #32131501
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здорова!

Я чего-то не понимаю!
У меня все работает без ошибок. Код и таблицы - такие же.
Как я и говорил, обновляються все записи.
Могу примерчик прислать для сравнения.
Единственная разница я вызываю процедуру по нажатии кнопки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.Button1Click(Sender: TObject);
var id : String;
begin
   id:=Table2.FieldValues['Category_id'];
   QSSCategQ.Close;
   QSSCategQ.SQL.Clear;
   QSSCategQ.SQL.Add('UPDATE Lgota SET Pivilege='+
   '(SELECT Pr_tarif FROM Ss_Categ WHERE Ss_Categ.Category = :id)');
   QSSCategQ.Params[ 0 ].AsString := id;
   QSSCategQ.ExecSQL;
end;


Пробовал поменять QSSCategQ.ExecSQL на QSSCategQ.Open и получал ту же ошибку, что и ты! (Чего и следовало ожидать)

И еще: что за DBComboBox2 и с чем он связан?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]