Форум: "Базы";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
ВнизКэшированные изменения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c