Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.05;
Скачать: CL | DM;

Вниз

ibQuery.ParamByName( My_param ).Value := null; - не работает??   Найти похожие ветки 

 
Jack128 ©   (2003-04-15 12:51) [0]

Добрый день.
Есть 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;
то все работает, как надо..
В чем моя ошибка??


 
Zacho ©   (2003-04-15 12:55) [1]

Ошибка в том, что в этом случае запрос должен быть таким:
select id, name from addresses where parentid is NULL
Кстати, FIBPlus вроде бы умеет правилино преобразовывать запросы в случае если параметр=null


 
Соловьев ©   (2003-04-15 12:55) [2]

вообще-то корням присваивают - 0.

> Не выдает не одной записи, хотя в базе они(записи) есть.

не пробовал перед присвоением параметра сделать Close; ?


 
Соловьев ©   (2003-04-15 12:56) [3]

А зачем с транзакциями? ты вроде с БД ничего не делаешь?


 
kravchuk ©   (2003-04-15 12:59) [4]

while EOF do рекомендую заменить на
while NOT EOF do


 
Jack128 ©   (2003-04-15 13:11) [5]

kravchuk © (15.04.03 12:59)
Реально конечно написано not EOF, просто когда я вопрос набирал - ошибся...

> Соловьев © (15.04.03 12:56)
> А зачем с транзакциями? ты вроде с БД ничего не делаешь?

А выполнение запроса (ibquery.Open) - это не чего не делаю? ;-)

Zacho © (15.04.03 12:55) Обидно.. Досадно.. Ну ладно..


 
Соловьев ©   (2003-04-15 13:15) [6]


> (ibquery.Open) - это не чего не делаю? ;-)

ничего.


 
Johnmen ©   (2003-04-15 13:19) [7]

>Соловьев ©

Если не стартанет сам, то стартанет неявно...:)


 
Соловьев ©   (2003-04-15 13:22) [8]


> Johnmen © (15.04.03 13:19)

оно то да. Но как можно вывести БД из не противоречивого состочния с помощью select * from table? мне не понятно... Или это на счет сбора мусора?


 
kaif ©   (2003-04-15 13:23) [9]

Совет:
Чтобы не мучиться, лучше для корневых сделать parent_id = 0 в самой таблице. И вообще объявить это поле NOT NULL. И индекс на него сделать, чтобы искал быстрее.

Если же сие невозможно, то можно сделать запрос типа:
"select id, name from addresses where (parentid = :parentid) or
(:parent_id = 0 and parent_id is null)"


 
kravchuk ©   (2003-04-15 13:25) [10]

//Соловьев © (15.04.03 13:22)
select в ИБ выполняется в рамках транзакции


 
Johnmen ©   (2003-04-15 13:29) [11]

Любые запросы в любых SQL-серверных БД выполняются в рамках тр-ии...


 
MsGuns ©   (2003-04-15 13:45) [12]

>Johnmen © (15.04.03 13:29)
>Любые запросы в любых SQL-серверных БД выполняются в рамках тр-ии...

А генераторы ?



 
Johnmen ©   (2003-04-15 13:54) [13]

>MsGuns © (15.04.03 13:45)

Что генераторы ? :)))


 
Соловьев ©   (2003-04-15 14:09) [14]

все верно, что любая операция с БД на серваке проходит (обязана!!!) в рамках транзакции. Я имел в виду, что в этом случае(код Jack128), старт тр-ции лишнее.


 
Johnmen ©   (2003-04-15 14:21) [15]

>Соловьев © (15.04.03 14:09)

Просто он сам управляет тр-ми, что, согласись, есть хороший тон...:)


 
Соловьев ©   (2003-04-15 14:23) [16]

соглашаюсь :)))



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

Текущий архив: 2003.05.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
3-12627
User2
2003-04-14 17:15
2003.05.05
TComboBox и БД


1-12799
mihei
2003-04-22 13:11
2003.05.05
кнопка на форме во время нажатия клавиши


3-12629
Hedron
2003-04-15 17:17
2003.05.05
Доступ к системным таблицам Access


14-12927
Angel_Forever
2003-04-18 09:00
2003.05.05
блок-схемы


14-12902
bercut
2003-04-17 17:50
2003.05.05
Всем привет заходите на сайт студентов экологического факультета