Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

UpdateSql   Найти похожие ветки 

 
SoulLess   (2006-11-30 19:19) [0]

Мастера, подскажите как правильно работать с UpdateSql?
делаю следующую иницилизацию действий:
     
UpdateSql1.InsertSQL.Add("insert into rasxod(ID, Mater, Rasxod, Category) values ("" + ID + "", :Mater, :Rasxod, "м1")");
     
UpdateSql1.ModifySQL.Add("update rasxod set Mater = :Mater, Rasxod = :Rasxod where ((ID = ""+ID+"") and (Mater = :OLD_Mater) and (Rasxod = :OLD_Rasxod) and (Category = "м1"))");
     
UpdateSql1.DeleteSQL.Add("delete from rasxod where  ((ID = ""+ID+"") and (Mater = :OLD_Mater) and (Rasxod = :OLD_Rasxod) and (Category = "м1"))");


В результате insert выполняется без проблем, а вот modify постоянно выдает ошибку Update Failed! Подскажите плиз в чем дело!!!


 
SoulLess   (2006-11-30 19:55) [1]

для вызова пользуюсь Query1.ApplyUpdates. на Query стоит RequestLive и CachedUpdates. Данные вносятся через Grid


 
sniknik ©   (2006-11-30 21:27) [2]

> Подскажите плиз в чем дело!!!
вот в этом наверное > ""+ID+""
неизвестное значение для компонента, один раз при внесении инициализируется и остается после одним и тем-же...
и вообще нафига столько полей в условии? достаточно одного ключевого поля.

p.s. двойной клик на компоненте открывает мастер составитель запросов...


 
Desdechado ©   (2006-11-30 21:28) [3]

Не пробовал воспользоваться визардом запросов, а не городитьих вручную?

Update Failed обычно выдается, если обновляется более одной записи или 0 записей.


 
SoulLess   (2006-11-30 21:35) [4]

Пробовал конечно! Сам писать вручную начал как раз именно из-за того что через виззард было Update Failed! Думал таким образом исправить...
Визард дает след код

update rasxod
set
 Mater = :Mater,
 Rasxod = :Rasxod
where
 ID = :OLD_ID and
 Mater = :OLD_Mater and
 Rasxod = :OLD_Rasxod and
 Category = :OLD_Category


Используя все поля, т.к. это необходимо для точной идентификации нужной строки


 
SoulLess   (2006-11-30 21:36) [5]


> Update Failed обычно выдается, если обновляется более одной
> записи или 0 записей.


Это я читал уже где-то... Но дело в том, что запись, удовлетворяющая всем 4 условиям одна!


 
SoulLess   (2006-11-30 21:40) [6]

так... кажись нашел в чем дело... Он обновляется нормально если убрать
 Rasxod = :OLD_Rasxod

а в это поле записывается число типа float. Видимо SQL не воспринимает его правильно?


 
SoulLess   (2006-11-30 21:54) [7]

Боюсь поспешил с выводами... Почему-то теперь то работает апдейт, то нет...(((


 
sniknik ©   (2006-11-30 21:56) [8]

> Используя все поля, т.к. это необходимо для точной идентификации нужной строки
для гарантировано точной идентификации единственное, что нужно это поле/поля ключ. если у тебя этого нет... когданибудь все оно "нарвешься" на дубликаты с подобными идентификациями.

> число типа float
невозможны точные сравнения с числами с плавающей запятой.


 
SoulLess   (2006-11-30 22:16) [9]

Действительно, наверно легче ввести автоинкрементный идентификатор... Спасибо.
А еще не подскажете как определить находится ли таблиуа в режиме редактирования? Почему-то

 if(Query1.State in [dsEdit, dsInsert])
 then Query1.post;


не помогает...


 
SoulLess   (2006-11-30 22:25) [10]

Более правильным будет вопрос - как вызвать update таблицы вручную? Т.Е. у меня есть грид, в котором запись вносится в базу после выхода со строчки, которую вводил.
можно ли поставить обработчик клавиши Enter на конкретный столбец строки?


 
ЮЮ ©   (2006-12-01 05:57) [11]


> как вызвать update таблицы вручную?


Таблицы в БД? У тебя же всё для этого есть:[1]

Т.Е. у меня есть грид, в котором запись вносится в базу после выхода со строчки, которую вводил.

А ты хочешь, чтобы после каждого изменения поля?

if(Query1.State in [dsEdit, dsInsert])
then Query1.post;
не помогает...

+ [1] для записи в БД. Иначе изменения останутся только в TQuery, т.е. локально

З.Ы. Query1.ApplyUpdates тоже следует применять с оглядкой на UpdatesPending


 
VALUA   (2006-12-01 08:39) [12]

Попробуй в начале своих действий поставить оператор -> IBQuery1.Edit;

Я делала для BLOB-полей :
  IBQuery1.Edit;
    IBQuery1PLAN_KV.LoadFromStream(BM1);
  IBUpdateSQL1.SetParams(ukModify);
  IBUpdateSQL1.Apply(ukModify);

А эти действия :
UpdateSql1.InsertSQL.Add("insert into rasxod(ID, Mater, Rasxod, Category) values ("" + ID + "", :Mater, :Rasxod, "м1")");
   
UpdateSql1.ModifySQL.Add("update rasxod set Mater = :Mater, Rasxod = :Rasxod where ((ID = ""+ID+"") and (Mater = :OLD_Mater) and (Rasxod = :OLD_Rasxod) and (Category = "м1"))");
   
UpdateSql1.DeleteSQL.Add("delete from rasxod where  ((ID = ""+ID+"") and (Mater = :OLD_Mater) and (Rasxod = :OLD_Rasxod) and (Category = "м1"))");

должны быть прописаны в самом компоненте , кликни правой кнопкой мыши на компоненте и все увидишь .


 
VALUA   (2006-12-01 08:47) [13]

У комонента  IBQuery  есть сво-во  UpdateObject    , надо укзать - IBUpdateSql .


 
Desdechado ©   (2006-12-01 11:00) [14]

VALUA   (01.12.06 08:47) [13]
Какие нафиг IBQuery, если у автора [D6, MySQL]


 
SoulLess   (2006-12-01 16:09) [15]

Вообще было бы очень здорово, если бы мне кто-нить объяснил как сделать так, чтоб можно было обойтись без UpdateSQL, а только через RequestLive все делать...
Но у меня при этом почему-то данные ЗАНОСЯТСЯ в таблицу, но при попытке вставить еще строку предыдущая исчезает из грида! Если бы мне кто объяснил в чем дело - убил бы UpdateSQL)))


 
Desdechado ©   (2006-12-01 17:29) [16]

> только через RequestLive все делать...
Это возможно только для однотабличных запросов без сортировки. Да и то, установка RequestLive=True не гарантирует, что после запроса оно такое останется.

> Но у меня при этом почему-то данные ЗАНОСЯТСЯ в таблицу,
> но при попытке вставить еще строку предыдущая исчезает из грида!
Моя не понимать, зачем ApplyUpdates делать для каждой строки...


 
Desdechado ©   (2006-12-01 17:30) [17]

вернее, зачем сразу после вставки строки


 
SoulLess   (2006-12-01 18:26) [18]


> вернее, зачем сразу после вставки строки


А если делать вставку в базу после внесения всех строк, например на выходе, то если вдруг на какой-то строке возникнет "Update Failed" остальные записи, кроме этой занесутся в базу или все остановится на той записи, где возникла ошибка?


 
Desdechado ©   (2006-12-01 18:44) [19]

Как организуешь транзакцию, так и будет. Можно откатить и исправить, можно проигнорировать.
А вообще делай так, чтоб небыло непредвиденных ситуаций Update failed.


 
SoulLess   (2006-12-01 19:15) [20]


> А вообще делай так, чтоб небыло непредвиденных ситуаций
> Update failed.


Пытаюсь! Но все равно иногда при Modify такое возникает!=(


 
Desdechado ©   (2006-12-01 21:55) [21]

Значит, нет первичного/уникального ключа на таблице. А без него никуда.


 
SoulLess   (2006-12-02 00:51) [22]

да есть! Не знаю почему он вылетает все-таки иногда(((

Стоит первичный ключ на автоинкременте


 
Desdechado ©   (2006-12-02 21:48) [23]

Значит, он отсутствует в выборке. И компонент не может построить нормальный UPDATE, ему не на что опереться.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.039 c
15-1170409028
мжмж
2007-02-02 12:37
2007.02.25
Может не сюда, но все же..


2-1170743971
Максименко
2007-02-06 09:39
2007.02.25
DateTimePicker


15-1169545159
RASkov
2007-01-23 12:39
2007.02.25
"Формула маятника"


3-1165230091
kivadim
2006-12-04 14:01
2007.02.25
как отобразить юникодовские символы из базы в отчете FastReports


15-1169977818
SergP
2007-01-28 12:50
2007.02.25
Возможно ли такое?





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