Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: CL | DM;

Вниз

Кэшированные изменения   Найти похожие ветки 

 
Jaxtor ©   (2003-04-21 12:26) [0]

У меня в цикле находится 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 продукта.


 
Zacho ©   (2003-04-21 12:33) [1]

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


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

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


 
Jaxtor ©   (2003-04-21 12:37) [3]

Задача такова. Нужно занести товары в таблицу 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



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

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


 
Jaxtor ©   (2003-04-21 12:48) [5]

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


 
Zacho ©   (2003-04-21 12:55) [6]


> 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.


 
Zacho ©   (2003-04-21 13:05) [7]


> Zacho © (21.04.03 12:55)

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


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


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

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


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

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


 
Jaxtor ©   (2003-04-21 15:26) [10]

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


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

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


 
Jaxtor ©   (2003-04-21 15:33) [12]

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


 
Jaxtor ©   (2003-04-21 15:38) [13]

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


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


> Jaxtor © (21.04.03 15:38)

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


 
Jaxtor ©   (2003-04-21 17:32) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2003.05.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
6-34534
Sectey
2003-03-14 16:34
2003.05.12
Номера портов


14-34611
Songoku
2003-04-19 16:04
2003.05.12
Кто за то что бы провести соревнования по DELPHI????


7-34630
AlexRush
2003-03-10 17:09
2003.05.12
Сетевой адаптер - отправка данных в сеть


1-34498
Евгений
2003-04-27 08:46
2003.05.12
Как менять свойство сразу нескольких компонент?


14-34566
Scorpx
2003-04-17 19:31
2003.05.12
Обновление сайта!!!