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

Вниз

Непонятки с добавлением 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
14-1074853862
Andrew
2004-01-23 13:31
2004.03.28
delphi for .net


1-1078686109
Anthony
2004-03-07 22:01
2004.03.28
Помогите с экспертной системой!!!!плизззз


14-1077888387
neodiX
2004-02-27 16:26
2004.03.28
Internet lines overbooking


1-1078512821
К.К.С.
2004-03-05 21:53
2004.03.28
MessageDLG


1-1078406246
ghg
2004-03-04 16:17
2004.03.28
использование функции из DLL