Форум: "Базы";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c