Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Web-Service Cahce для удаления записи из таблицы / 16 сообщений из 16, страница 1 из 1
22.08.2011, 15:39
    #37406273
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Доброго времени суток, гуру Каше=)
Ситуация: есть класс веб-сервисов, обрабатывающих другой класс (таблицу). Данные пересылаются по СОАП на клиент (написал во Флексе). Методы для добавления и отображения всех записей работают отлично.

Проблема: не работают методы для редактирования и удаления записи. Уже сутки ковыряю код - вроде все должно работать. И компилится без проблем, ВСДЛ тоже функционирует правильно, но результата нет.

Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
/// Сервис редактирования записи
Method EditCar(oldname As %String, newname As %String) [ WebMethod ]
{
	
	s item = ##class(MyApp.CarsDB).%New()
 	s query = ##class(%ResultSet).%New("%DynamicQuery:SQL")
 	do query.Prepare("SELECT ID, NAME FROM MyApp.CarsDB where Name='"+oldname+"'")
 	do query.Execute()
 	while (query.Next()) {
 		s id = query.Data("ID")
 		s item = ##class(MyApp.CarsDB).%OpenId(id)
 		s item.Name = newname
 		d item.%Save()
 	}
}

Здесь я делаю выборку по имени и в выбранных записях по очереди меняю значение свойства "Name"

Что может быть не так?
...
Рейтинг: 0 / 0
22.08.2011, 15:41
    #37406278
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Пример 2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[SRC PLSQL]Method DelCar(name As %String) [ WebMethod ]
{
	
	s query = ##class(%ResultSet).%New("%DynamicQuery:SQL")
 	do query.Prepare("SELECT ID, Name FROM MyAppCars WHERE Name='"+name+"'")
 	do query.Execute()
 	while (query.Next()){
		s id = query.Data("ID")
 		s item = ##class(MyApp.CarsDB).%OpenId(id)
 		do ##class(MyApp.CarsDB).%Delete(item.%Oid())
 		kill item	 
	}
}
[/src]
Здесь я опять таки делаю выборку по имени и далее поочередно удаляю выбранные записи.

Что здесь не так и как с этим бороться?
...
Рейтинг: 0 / 0
22.08.2011, 16:11
    #37406341
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
По первому примеру - что возвращает %Save()?
...
Рейтинг: 0 / 0
22.08.2011, 16:17
    #37406352
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Блок А.Н.По первому примеру - что возвращает %Save()?

Я так понял, что сейвом мы сохраняем изменения записи, ну по аналогии, скажем, с Post'ом в АДО
Не прав?
...
Рейтинг: 0 / 0
22.08.2011, 16:39
    #37406392
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Неправильная аналогия.
В данном случае из результсета нельзя сохранить результат обратно в базу.
Но вы открываете объект и сохраняете в базу. Это должно работать, если не работает, то метод %Save вернет статус-ошибку.

А почему в вашем примере не сделать просто
&sql(update MyApp.CarsDB where set name=:newname where Name=:oldname)
?
...
Рейтинг: 0 / 0
22.08.2011, 16:44
    #37406402
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Anthony Mangilev , параметры нужно использовать...

Код: plaintext
1.
2.
do query.Prepare("SELECT ID, NAME FROM MyApp.CarsDB where Name=?")
do query.Execute(oldname)
...
Рейтинг: 0 / 0
22.08.2011, 16:47
    #37406406
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Anthony MangilevЧто может быть не так?
Ну например переменная item используется много где как ореф класса, а не киляется после записи данных...
...
Рейтинг: 0 / 0
22.08.2011, 16:49
    #37406417
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Anthony Mangilev , почему не все действия не делаются одним sql-запросом? У тебя сначала запрос, потом классовое действо...
...
Рейтинг: 0 / 0
22.08.2011, 17:00
    #37406436
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Блок А.Н.Неправильная аналогия.
В данном случае из результсета нельзя сохранить результат обратно в базу.
Но вы открываете объект и сохраняете в базу. Это должно работать, если не работает, то метод %Save вернет статус-ошибку.


Вот и я думаю, что должно:)

А почему в вашем примере не сделать просто
&sql(update MyApp.CarsDB where set name=:newname where Name=:oldname)
?
Код: plaintext
1.
2.
3.
Method EditCar(oldname As %String, newname As %String) [ WebMethod ]
{
 &sql(update MyApp.CarsDB set name=:newname where Name=:oldname);
}
Сработало!:) Спасибо огромное вам, сенсей:)
Буду благодарен помощи по второму примеру
...
Рейтинг: 0 / 0
22.08.2011, 17:02
    #37406442
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
krvsa Anthony Mangilev , почему не все действия не делаются одним sql-запросом? У тебя сначала запрос, потом классовое действо...

Я третий, вернее четвертый уже, день в Каше, поэтому многие моменты пытаюсь усвоить опытным путем:)

Посоветуйте что-нибудь по второму примеру, пожалуйста
...
Рейтинг: 0 / 0
22.08.2011, 17:06
    #37406450
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Аналогично
Код: plaintext
1.
2.
3.
Method DelCar(oldname As %String, newname As %String) [ WebMethod ]
{
 &sql(delete MyApp.CarsDB set name=:newname where Name=:oldname);
}

Кстати, в вашем случае если делать через динамические запросы, то тогда уж сразу в них писать апдейт или делете.
А если делать, то с параметрами, а то склейкой чревато по многим причинам: возможность sql-инъекций, невозможность выполнить запрос(например,если в параметре будет кавычка), множественная компиляция при каждом новом параметре
...
Рейтинг: 0 / 0
22.08.2011, 17:08
    #37406455
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
то есть
Код: plaintext
1.
2.
3.
Method DelCar(name As %String) [ WebMethod ]
{
 &sql(delete MyApp.CarsDB where Name=:name);
}
...
Рейтинг: 0 / 0
22.08.2011, 17:15
    #37406463
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Блок А.Н., преогромнейшее спасибо за совет:)
Учту на будущее, ибо думаю, в ближайшем будущем предстоит не мало мне пообщаться с Каше:)
...
Рейтинг: 0 / 0
22.08.2011, 17:16
    #37406465
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Кстати, компилятор ругается на ";" в конце строки с запросом:)
...
Рейтинг: 0 / 0
22.08.2011, 18:37
    #37406567
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Правильно делает :-)
Я же из головы пишу, такая фигня иногда получается, страшно смотреть.
...
Рейтинг: 0 / 0
22.08.2011, 18:44
    #37406579
Anthony Mangilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-Service Cahce для удаления записи из таблицы
Не страшно, а познавательно:)
Еще раз спасибо, доделал клиент-сервер, отправил работу, жду результатов:)
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Web-Service Cahce для удаления записи из таблицы / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]