Вниз
Скачать: CL | DM;

Не "догоню" поведение 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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.04 c
4-1133856137
Lex_!
2005-12-06 11:02
2006.02.19
Выполнение консольного приложения и вывод результатов в МЕМО поле


3-1135253805
UnDISCOvery
2005-12-22 15:16
2006.02.19
MS Access - поле типа "счетчик"


1-1137758963
jiurasdad
2006-01-20 15:09
2006.02.19
Как послать нажатие клавишь в другое приложение


2-1138686124
Mike48
2006-01-31 08:42
2006.02.19
315-й вопрос про ehlib


15-1138627801
msguns
2006-01-30 16:30
2006.02.19
Рынок vs Базар




   Наверх