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

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

Кэшированные изменения [D6, IB6.x]


Jaxtor ©   (2003-04-21 12:26:00) 

У меня в цикле находится SelectSQL из IBDataSet с параметром. В приведенном
ниже варианте работает все нормально, за исключением того, что
в DBGrid выводится последнее значение из списка ProdList, что
неправильно. Как быть? Почему это происходит понятно, а как избежать этого неясно.



type
P_Id=^_Id;
_Id=integer;
TProdList = class(TList)

var
A_Id: P_Id;
i: integer;
ProdList: TProdList;

For i:=0 to ProdList.Count-1 do begin

A_Id:=ProdList.Items[i];

With qrInsert do begin

If Active then Close;

With SelectSQL do begin
Clear;
Add("select ProdId, PN, Product, WarantyId, UnitId, NDS from Products where ProdId="+IntToStr(A_Id^));
end;//With SelectSQL


With InsertSQL do begin
Clear;
Add("insert into SaveProd (ProdId, PN, Product, WarantyId, UnitId, NDS) select ProdId, PN, Product, WarantyId, UnitId, NDS from Products where ProdId="+IntToStr(A_Id^));
end;//With InsertSQL


With RefreshSQL do begin
Clear;
Add("select ProdId, PN, Product, WarantyId, UnitId, NDS from Products where ProdId="+IntToStr(A_Id^));
end;//With RefreshSQL
Open;
ApplyUpdates;

end;//With qrInsert

end;//For

В ProdList находится ID продукта.


Jaxtor   (2003-04-21 17:32:00) [1]

Я все сделал через кэшированные изменения.


Zacho   (2003-04-21 16:14:00) [2]


> Jaxtor © (21.04.03 15:38)

Обойтись.
Я же писал - нужно дваTIBDataSet. Один - для выборки из одной таблицы, второй - для вставки в другую и отображения ее в гриде. И все будет гораздо проще и без извращений.


Jaxtor   (2003-04-21 15:38:00) [3]

Но все равно без кэшированных изменений не обойтись.


Jaxtor   (2003-04-21 15:33:00) [4]

Ладно, попробую через IBQuery.


Соловьев   (2003-04-21 15:29:00) [5]

IBQuery
и забудь тогда про IBDataSet


Jaxtor   (2003-04-21 15:26:00) [6]

Ничего не написано.


Соловьев   (2003-04-21 15:06:00) [7]

что в селект написано?


Jaxtor   (2003-04-21 14:58:00) [8]


with IBdataSet do
begin
Insert;
FieldByName("ProdId").AsInteger := //из своего листа и заноси;
// остальные поля в гриде заполняй или едитах
Post;
end;

Вообще-то при этом у меня возникает ошибка, что IBDataSet это набор данных только для чтения, хотя CacheUpdates=true.


Zacho   (2003-04-21 13:05:00) [9]


> Zacho © (21.04.03 12:55)

Еще дополню: в общем случае, как бы ты не делал, тебе понадобятся как минимум два IBDataSet (или IBDataSet и IBSQL)


Zacho   (2003-04-21 12:55:00) [10]


> Jaxtor © (21.04.03 12:37)

Решить эту задачу можно по-разному, например так:
1.Формируешь строку с нужными ProdId, разделенными запятыми.
2. Берешь TIBSQL и пишешь запрос INSERT INTO SAVEPROD (bla-bla...) SELECT bla-bla,.. FROM PRODUCTS WHERE PRODID IN (твоя строка).
3. Запускаешь этот запрос.
4. Выбирашь то, что вставил, в IBDataSet, подключенном к нужному тебе DBGrid.
P.S. IMHO, неправильно спроектирована структура БД. Я, например, без очень веских оснований не стал бы делать таблицу SAVEPROD.


Jaxtor   (2003-04-21 12:48:00) [11]

похоже на правду


Соловьев   (2003-04-21 12:46:00) [12]

with IBdataSet do
begin
Insert;
FieldByName("ProdId").AsInteger := //из своего листа и заноси;
// остальные поля в гриде заполняй или едитах
Post;
end;


Jaxtor   (2003-04-21 12:37:00) [13]

Задача такова. Нужно занести товары в таблицу SaveProd и отобразить их в DBGrid.

Запрос на вставку:


With InsertSQL do begin
Clear;
Add("insert into SaveProd (ProdId, PN, Product, WarantyId, UnitId, NDS) select ProdId, PN, Product, WarantyId, UnitId, NDS from Products where ProdId="+IntToStr(A_Id^));
end;//With InsertSQL


Запрос на просмотр:

With SelectSQL do begin
Clear;
Add("select ProdId, PN, Product, WarantyId, UnitId, NDS from Products where ProdId="+IntToStr(A_Id^));
end;//With SelectSQL


Zacho   (2003-04-21 12:33:00) [14]

1.Не совсем понятно, что ты все-таки хочешь получить.
2.Формировать запросы динамически в твое случае не надо, достаточно запроса с параметром, и присваивания этому параметру нужного значения.


Соловьев   (2003-04-21 12:33:00) [15]

что-то ты не понял как работать с этим компонентом...


Наверх

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