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

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

Непонятки с добавлением 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 (!) дня для освоения, но судя по вопросу, это не так...


Наверх

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