Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-34559
TCrash
2003-04-23 15:03
2003.05.12
ICQ ???????????


14-34543
Карлсон
2003-04-22 16:39
2003.05.12
FM Tuner


6-34540
Fantom1
2003-03-15 10:02
2003.05.12
winexec


1-34413
sndanil
2003-04-30 13:06
2003.05.12
Cокрытие MDIChild формы


3-34365
Ann
2003-04-22 15:22
2003.05.12
date





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский