![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ibQuery.ParamByName( My_param ).Value := null; - не работает?? [firebird]
Jack128 © (2003-04-15 12:51:00)Добрый день.
Есть IbQuery c SQL.TEXT := "select id, name from addresses where parentid = :parentid"
Таблица Addresses - простейшее дерево, корнями, которого являются элементы с parentid равным null"ю.
Необходимо выбрать эти "корни"
with ibquery do
begin
parambyname("parentid").value := null;
if not transaction.intransaction then
transaction.starttranscation;
try
open;
while EOF do
begin
Memo1.lines.Add(FieldByName("name").AsString);
Next;
end;
Close;
transaction.Commit;
except
transaction.Rollback;
raise;
end;
end;
Не выдает не одной записи, хотя в базе они(записи) есть.
Если зделать так
parambyname("parentid").AsInteger := 1;
то все работает, как надо..
В чем моя ошибка??
Соловьев (2003-04-15 14:23:00) [1]соглашаюсь :)))
Johnmen (2003-04-15 14:21:00) [2]>Соловьев © (15.04.03 14:09)
Просто он сам управляет тр-ми, что, согласись, есть хороший тон...:)
Соловьев (2003-04-15 14:09:00) [3]все верно, что любая операция с БД на серваке проходит (обязана!!!) в рамках транзакции. Я имел в виду, что в этом случае(код Jack128), старт тр-ции лишнее.
Johnmen (2003-04-15 13:54:00) [4]>MsGuns © (15.04.03 13:45)
Что генераторы ? :)))
MsGuns (2003-04-15 13:45:00) [5]>Johnmen © (15.04.03 13:29)
>Любые запросы в любых SQL-серверных БД выполняются в рамках тр-ии...
А генераторы ?
Johnmen (2003-04-15 13:29:00) [6]Любые запросы в любых SQL-серверных БД выполняются в рамках тр-ии...
kravchuk (2003-04-15 13:25:00) [7]//Соловьев © (15.04.03 13:22)
select в ИБ выполняется в рамках транзакции
kaif (2003-04-15 13:23:00) [8]Совет:
Чтобы не мучиться, лучше для корневых сделать parent_id = 0 в самой таблице. И вообще объявить это поле NOT NULL. И индекс на него сделать, чтобы искал быстрее.
Если же сие невозможно, то можно сделать запрос типа:
"select id, name from addresses where (parentid = :parentid) or
(:parent_id = 0 and parent_id is null)"
Соловьев (2003-04-15 13:22:00) [9]
> Johnmen © (15.04.03 13:19)
оно то да. Но как можно вывести БД из не противоречивого состочния с помощьюselect * from table? мне не понятно... Или это на счет сбора мусора?
Johnmen (2003-04-15 13:19:00) [10]>Соловьев ©
Если не стартанет сам, то стартанет неявно...:)
Соловьев (2003-04-15 13:15:00) [11]
> (ibquery.Open) - это не чего не делаю? ;-)
ничего.
Jack128 (2003-04-15 13:11:00) [12]kravchuk © (15.04.03 12:59)
Реально конечно написано not EOF, просто когда я вопрос набирал - ошибся...
> Соловьев © (15.04.03 12:56)
> А зачем с транзакциями? ты вроде с БД ничего не делаешь?
А выполнение запроса (ibquery.Open) - это не чего не делаю? ;-)
Zacho © (15.04.03 12:55) Обидно.. Досадно.. Ну ладно..
kravchuk (2003-04-15 12:59:00) [13]
while EOF doрекомендую заменить на
while NOTEOF do
Соловьев (2003-04-15 12:56:00) [14]А зачем с транзакциями? ты вроде с БД ничего не делаешь?
Zacho (2003-04-15 12:55:00) [15]Ошибка в том, что в этом случае запрос должен быть таким:
select id, name from addresses where parentid is NULL
Кстати, FIBPlus вроде бы умеет правилино преобразовывать запросы в случае если параметр=null
Соловьев (2003-04-15 12:55:00) [16]вообще-то корням присваивают - 0.
> Не выдает не одной записи, хотя в базе они(записи) есть.
не пробовал перед присвоением параметра сделать Close; ?