![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятки с добавлением Interbase [D7, IB6.x]
overword © (2004-02-24 17:59:00)Пробую создавать базу. База примитивна - 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)
Zacho (2004-02-25 10:37:00) [1]Если Locate запись не нашел, то такой записи в НД нет, и все. Потрассируй, посмотри, что у тебя в DataStr и действительно ли есть запись с таким значением поля 'MIME_NAME'.
А на самом деле при наличии уникального индекса тебе эта функция вообще не нужна. Достаточно обработать ошибки.
overword (2004-02-25 10:24:00) [2]2 Johnmen
"Нет их в наборе данных !" - разве после выполнения Open для IBDataSet не открывается набор данных, описанный в SelectSQL? И зачем тогда нужно свойство BufferChunks? Получается, что нет.
2 Sandman25
Нет, добавляются именно пустые строки - проверял.
Индекс уникальный создал таки, но проблема в том, что я не понимаю, почему Locate не ищет. Что нужно вызвать кроме Open, чтобы открыть базу? Или после каждого добавления надо перевызывать Open?
Пока сделал через два SQL-запроса - один ищет запись, другой добавляет. Но ведь можно же сделать это проще, быстрее и правильнее?
Соловьев (2004-02-25 09:50:00) [3]Задача функции - получить код по значению, если значения нет - создать и вернуть таки код.
Я так понял ему функция нужна...
Ну если уникальность то индекс, конечно...
Johnmen (2004-02-24 18:35:00) [4]>Соловьев © (24.02.04 18:28) [7]
>А не прощке ли ХП создать?
Проще (и правильней) - индекс уникальный.
Соловьев (2004-02-24 18:28:00) [5]А не прощке ли ХП создать?
Sandman25+1 (2004-02-24 18:23:00) [6]Поле в БД имеет тип CHAR? Если добавляются пустые строки, значит, идет поиск пустых строк. Но пустые строки в поле типа CHAR при записи преобразуются в строку из одного пробела. Если я ничего не путаю...
Johnmen (2004-02-24 18:22:00) [7]Еще полезная ссылка, которую ты просмотрел
http://www.delphimaster.ru/vopros/index.html
Johnmen (2004-02-24 18:19:00) [8]И вторую и третью и т.д. не найдет. Потому, что их нет. Нет их в наборе данных !
overword (2004-02-24 18:13:00) [9]Уважаемый johnmen! Если Вы такой умный и опытный, то не проще ли сказать, что я не так сделал? Я поискал по форуму, по электронному учебнику. Не нашел, решил спросить более опытных людей.
Немного некорректная формулировка в исходном вопросе - при последовательном добавлении двух пустых строк Locate не находит вторую, хотя в базе она появляется.
Johnmen (2004-02-24 18:11:00) [10]Да, и еще здесь
http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Johnmen (2004-02-24 18:07:00) [11]Обычно читают книги, вникают, пробуют. А потом задают вопросы здесь.
М.б. ты гениален и тебе достаточно 1 (!) дня для освоения, но судя по вопросу, это не так...