Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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; ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо