Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-1131144478
FrykT
2005-11-05 01:47
2006.02.19
Отловить Error на TCP сервере на WinSock.


2-1138979999
User2
2006-02-03 18:19
2006.02.19
коннект с SQL SERVER по сети


15-1138651084
Eraser
2006-01-30 22:58
2006.02.19
ADSL2+ и модем DLink 500T ... прошивка


15-1138594840
vidiv
2006-01-30 07:20
2006.02.19
Вопрос по MySQL: LEFT JOIN и RIGHT JOIN


15-1138303789
mctarik
2006-01-26 22:29
2006.02.19
Кто юзал компонет TurboPower LockBox? Ваше за и против!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский