Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизНепонятки с добавлением Interbase Найти похожие ветки
← →
overword (2004-02-24 17:59) [0]Пробую создавать базу. База примитивна - PK MIME_ID с генератором и поле MIME_NAME с индексом (не уникальным, хотел сделать уникальным - IB поругался, кстати, почему - не знаю).
Задача функции - получить код по значению, если значения нет - создать и вернуть таки код.
Так вот Locate у меня не работает! Создает массу пустых строк ((.
Что я мог не так сделать?
С IB работаю первый день (.
with tbMimes do begin // tbMimes: tIBDataSet
if not Locate("MIME_NAME",DataStr,[loCaseInsensitive])
then begin
Insert;
FieldByName("MIME_NAME").AsString:=DataStr;
Post;
end;
result:=FieldByName("MIME_ID").asInteger;
end;
tbMimes:
SelectSQL = select * from MIMES
InsertSQL = insert into mimes (MIME_ID, MIME_NAME) values (:MIME_ID, :MIME_NAME)
← →
Johnmen © (2004-02-24 18:07) [1]Обычно читают книги, вникают, пробуют. А потом задают вопросы здесь.
М.б. ты гениален и тебе достаточно 1 (!) дня для освоения, но судя по вопросу, это не так...
← →
Johnmen © (2004-02-24 18:11) [2]Да, и еще здесь
http://ln.com.ua/~openxs/articles/smart-questions-ru.html
← →
overword (2004-02-24 18:13) [3]Уважаемый johnmen! Если Вы такой умный и опытный, то не проще ли сказать, что я не так сделал? Я поискал по форуму, по электронному учебнику. Не нашел, решил спросить более опытных людей.
Немного некорректная формулировка в исходном вопросе - при последовательном добавлении двух пустых строк Locate не находит вторую, хотя в базе она появляется.
← →
Johnmen © (2004-02-24 18:19) [4]И вторую и третью и т.д. не найдет. Потому, что их нет. Нет их в наборе данных !
← →
Johnmen © (2004-02-24 18:22) [5]Еще полезная ссылка, которую ты просмотрел
http://www.delphimaster.ru/vopros/index.html
← →
Sandman25+1 (2004-02-24 18:23) [6]Поле в БД имеет тип CHAR? Если добавляются пустые строки, значит, идет поиск пустых строк. Но пустые строки в поле типа CHAR при записи преобразуются в строку из одного пробела. Если я ничего не путаю...
← →
Соловьев © (2004-02-24 18:28) [7]А не прощке ли ХП создать?
← →
Johnmen © (2004-02-24 18:35) [8]>Соловьев © (24.02.04 18:28) [7]
>А не прощке ли ХП создать?
Проще (и правильней) - индекс уникальный.
← →
Соловьев © (2004-02-25 09:50) [9]Задача функции - получить код по значению, если значения нет - создать и вернуть таки код.
Я так понял ему функция нужна...
Ну если уникальность то индекс, конечно...
← →
overword (2004-02-25 10:24) [10]2 Johnmen
"Нет их в наборе данных !" - разве после выполнения Open для IBDataSet не открывается набор данных, описанный в SelectSQL? И зачем тогда нужно свойство BufferChunks? Получается, что нет.
2 Sandman25
Нет, добавляются именно пустые строки - проверял.
Индекс уникальный создал таки, но проблема в том, что я не понимаю, почему Locate не ищет. Что нужно вызвать кроме Open, чтобы открыть базу? Или после каждого добавления надо перевызывать Open?
Пока сделал через два SQL-запроса - один ищет запись, другой добавляет. Но ведь можно же сделать это проще, быстрее и правильнее?
← →
Zacho © (2004-02-25 10:37) [11]Если Locate запись не нашел, то такой записи в НД нет, и все. Потрассируй, посмотри, что у тебя в DataStr и действительно ли есть запись с таким значением поля "MIME_NAME".
А на самом деле при наличии уникального индекса тебе эта функция вообще не нужна. Достаточно обработать ошибки.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c