Форум: "Базы";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизНе "догоню" поведение ADOCommand/ADOQuery Найти похожие ветки
← →
Виталий Панасенко (2005-12-19 12:06) [0]Вопрос такого характера: есть запрос вида
update saldo
set count=count+:cnt
where key_field1=:key1 and key_field2=:key2
Использую как в ADOCommand так и в ADOQuery... На форме необходимое количество TEdit для заполнения параметров...
Выполняю ADOCommand.Execute() - не обновляет при первом старте.. Последующие вызовы работает как надо...
С Query вроди разобрался - установил Prepared=True начало обновлять... До этого обновление происходило только ПРИ ПЕРВОМ вызове... И это все притом, что данные в TEdit никто не менял !!! Я чего-то не догоняю... Что я мог(могу) такого противоестественного делать ?
← →
Johnmen © (2005-12-19 12:09) [1]>не обновляет
Кто не обновляет? И кого не обновляет?
← →
Виталий Панасенко (2005-12-19 12:28) [2]Значение поля COUNT(там другое имя поля :-)) не изменяется после UPDATE... Вроди (я так думаю !) разобрался - тип параметра не определял(был вариант)... И Prepared в true...
← →
Johnmen © (2005-12-19 12:32) [3]У меня всё работает. И без Prepared в true. Оно вообще как бы непричём...:)
← →
Виталий Панасенко (2005-12-19 12:36) [4]
> Johnmen © (19.12.05 12:32) [3]
> У меня всё работает. И без Prepared в true. Оно вообще как
> бы непричём...:)
Интересно, а у меня даже в ADODataSet выборка ПЕРВЫЙ РАЗ происходит, в последующие разы ворачивается пустой НД.. установил Prepared - теперь не глючит...
← →
sniknik © (2005-12-19 13:28) [5]> установил Prepared - теперь не глючит...
Prepared указывает обрабатывать или нет команду перед выполнением... но никак не пропускать вызовы после первого раза...
здается этой командой ты просто замаскировал глюки в проге, по работе с параметрами. (новые пересоздаются)
> теперь не глючит...
два взаимоуничтожающихся глюка (/замаскированные), это всетаки глюки. и то, что счас не глючит завтра будет, если код измениш хоть чуть.
← →
Виталий Панасенко (2005-12-19 15:37) [6]Я не спорю... Пытаюсь разобраться.. Вот текст запроса:
update saldo
set produkt_kolvo=produkt_kolvo+:produkt_kolvo
where owner_code=:owner_code and produkt_code=:produkt_code and
postavshik_code=:postavshik_code and produkt_cenap=:produkt_cenap
and produkt_cenar=:produkt_cenar and produkt_box=:produkt_box and
flag=:flag
Эо код вызова:
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
begin
cmd.Execute(I, VarArrayOf([StrToFloat(Kolvo.Text), StrToInt(Own.Text), StrToInt(Prd.Text),StrToInt(Pst.Text),
StrToFloat(CenaP.Text), StrToFloat(CenaR.Text), StrToFloat(ProduktBox.Text), StrToInt(Flag.Text)]));
Label1.Caption := IntToStr(I);
{with Cmd,Parameters
do
begin
ParamByName("Owner_Code").Value :=
StrToInt(Own.Text);
ParamByName("Produkt_Code").Value :=
StrToInt(Prd.Text);
ParamByName("Postavshik_Code").Value :=
StrToInt(Pst.Text);
ParamByName("Produkt_CenaP").Value :=
StrToFloat(CenaP.Text);
ParamByName("Produkt_CenaR").Value :=
StrToFloat(CenaR.Text);
ParamByName("Produkt_Box").Value :=
StrToFloat(ProduktBox.Text);
ParamByName("Flag").Value :=
StrToInt(Flag.Text);
ParamByName("Produkt_kolvo").Value :=
StrToFloat(Kolvo.Text);
Execute;
//Label1.Caption := IntToStr(RowsAffected);
end;}
end;
← →
Виталий Панасенко (2005-12-19 16:55) [7]Тут еще одна вещь обнаружилась - все отлично работает под 2000.. А у меня на ХР СП 2 (и на другой такой же машине) получаю такую херню... JET не тот ?
← →
sniknik © (2005-12-19 16:59) [8]> Я не спорю... Пытаюсь разобраться.. Вот текст запроса:
??? а где ADODataSet ?
> Интересно, а у меня даже в ADODataSet выборка ПЕРВЫЙ РАЗ происходит
именно с ним "проблема необновления" или нет?
и где Prepared?
в любом случае, если обновление идет другой комендой(как видно приведенного) не в ADODataSet-е то его надо переоткрыть. именения сделаны в базе, в рекордсет они просто так не попадут.
off:
и потом судя по стилю кода ([6]), не скажу точно, но почемуто такое чуство, что ADOConnection ты не используеш. это так?
> получаю такую херню...
пока никакой херни не вижу
> JET не тот ?
а даже и так, что не надо чтобы работало под более новыми версиями? (в XP новее, если в 2000 не обовлялось).
← →
Виталий Панасенко (2005-12-19 17:10) [9]Connection использую.Одно на все компонеты... DataSet переоткрываю...
with Tbl,Parameters
do
begin
ParamByName("Owner_Code").Value :=
StrToInt(Own.Text);
ParamByName("Produkt_Code").Value :=
StrToInt(Prd.Text);
ParamByName("Postavshik_Code").Value :=
StrToInt(Pst.Text);
ParamByName("Produkt_CenaP").Value :=
StrToFloat(CenaP.Text);
ParamByName("Produkt_CenaR").Value :=
StrToFloat(CenaR.Text);
ParamByName("Produkt_Box").Value :=
StrToFloat(ProduktBox.Text);
ParamByName("Flag").Value :=
StrToInt(Flag.Text);
{ParamByName("Produkt_kolvo").Value :=
StrToFloat(Kolvo.Text);}
{Close;
Open;}
Requery;
end;
Я смотрю собственно из Access и своего проектика... Да, и на 98 винь пашет.. Prepared в design-time установлен...
Строка подключения: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db2.mdb;Persist Security Info=False
Windows XP Professional
версия 2002
SP 2
← →
Виталий Панасенко (2005-12-19 17:20) [10]
> > получаю такую херню...
> пока никакой херни не вижу
Имелось ввиду первоначальное сообщение - не происходит изменение значения поля при одних и тех же значениях параметров...
← →
sniknik © (2005-12-19 17:31) [11]> DataSet переоткрываю...
а не пробовал
Close;
параметры тут задать?
Open;
и, прежде чем на ADO/Jet "гнать", проверь другой прогой... (могу даже прислать тестовую. препаред там точно не делается. позволяется только 10 параметров, тебе хватит. пара запросов апдейт/селект на той машине где твое глючит и будет ясно "кто виноват". не исключено, что jet, но ...)
← →
Виталий Панасенко (2005-12-19 17:49) [12]Я сейчас на JET SP 8 поставлю.. просто это уже "под боком".. не на JET я не гоню :-))) Просто АДО дает кучу возможнойтсей и из-за этого, все-таки, сложновата технология для быстрого освоения, особенно, методом тыка...:-))...При чем в помощи обычно написано(для всяких тонокостей) "обращайтесь в Мелкий софт"..
Я прогу одну и ту же ведь проверял на ХР/2000/98, Prepared 100% не "взведен".. На 98/2000 измменения проходят успешно, на ХР - только первый раз...Трассировал, значения у параметров не теряются...Фиг его знает...
← →
Виталий Панасенко (2005-12-19 18:02) [13]Я понял, что ты меня не понял :-)) Данные ДЕЙСТВИТЕЛЬНО НЕ МЕНЯЮТСЯ .. Т.е не неправильно отображаются, а ФИЗИЧЕСКИ не происходит изменение значениея поля...
← →
sniknik © (2005-12-19 18:14) [14]> ФИЗИЧЕСКИ не происходит изменение значениея поля...
т.е.
вот этот запрос не отрабатывает в первый раз?
update saldo
set produkt_kolvo=produkt_kolvo+:produkt_kolvo
where
owner_code=:owner_code and
produkt_code=:produkt_code and
postavshik_code=:postavshik_code and
produkt_cenap=:produkt_cenap and
produkt_cenar=:produkt_cenar and
produkt_box=:produkt_box and
flag=:flag
а если без параметров? т.к. именно с ними у тебя похоже путаница.
кстати еще одна "тонкость" ;)
попробуй последний задать так flag=(:flag) (с последним почемуто бывают проблемы...) или написать
...
flag=:flag and true
(чтобы перестал быть последним)
← →
Виталий Панасенко (2005-12-19 18:31) [15]Да, так... А вот если установить Prepared в True все работает... Так, зтрахался.. Завтра пересмотрю...:-)
← →
Виталий Панасенко (2005-12-20 09:32) [16]Да, если вместо параметров использовать значения, то все отрабатывает без проблем... Ё, что такого может быть, ума не приложу !.. Я ведь как, положил ADOConnection, настроил строку подключения, положил ADOCommand, прописАл текст запроса, настроил типы параметров.. Т.е. ничего сверхъестественного не делал...У меня такое подозрение, что система криво поставлена... OEM версия...
← →
Виталий Панасенко (2005-12-20 09:40) [17]Вроди выяснил.. Слетает тип параметров, установленный в des-time... Какого ? Добовали ParamByName().DataType перед присвоением значения параметру - заработало...
← →
msguns © (2005-12-20 10:00) [18]Присваивай строками:
ParamByName("Owner_Code").Value := Own.Text;
← →
Виталий Панасенко (2005-12-20 10:09) [19]
> msguns © (20.12.05 10:00) [18]
> Присваивай строками:
>
> ParamByName("Owner_Code").Value := Own.Text;
Пробовал - отрабатывает первый раз.. Полседующие разы - фиг.. Повторюсь - прикол только на машинах из одной поставки.. Может, точно система кривоватисто поставлена, а е.. сексом занимаюсь ?
← →
sniknik © (2005-12-20 10:44) [20]> Повторюсь - прикол только на машинах из одной поставки..
я тебе прогу высылал, ей пробовал? там также. на этой поставке? (параметры по правой кнопке на редакторе запроса задаются)
← →
sniknik © (2005-12-20 10:49) [21]и делай имя парамерта покороче, только 10 символов можно (это про прогу, там ограничение)
← →
Ost (2005-12-20 11:21) [22]................................................
> StrToInt(Flag.Text);
> {ParamByName("Produkt_kolvo").Value :=
> StrToFloat(Kolvo.Text);}
>
> {Close;
> Open;}
> Requery;
Close попробуй поставить до присвоения параметров.
← →
sniknik © (2005-12-20 11:25) [23]Ost (20.12.05 11:21) [22]
> Close попробуй поставить до присвоения параметров.
предлагалось > [11], вроде не помогло.
← →
Ost (2005-12-20 11:43) [24]У меня был такой прикол, с параметрами типа ДАТА, ВРЕМЯ.
Пока не поставил
вместо ParamByName().Value:= ....
ParamByName().asString:= ....
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.042 c