![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с IBDataSet [D7, IB6.x]
Евген © (2004-01-09 12:16:00)
Уважаемые мастера, возможно мой вопрос покажется элементарным и глупым, но во-первых в IB это мои первые шаги, а во-вторых я над ним мучаюсь уже 4 дня.
Суть:
Есть таблица, созданная следующим запросом:
CREATE TABLE "CATEGORIES"
(
"Id" INTEGER NOT NULL,
"Name" VARCHAR(50) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
"GoodsCount" INTEGER,
CONSTRAINT "PK_Categories" PRIMARY KEY ("Id")
);
(это я практикуюсь по книге "Мир InterBase" Ковязина, Вострикова)
На форме как и положено есть IDDataBase и IBTransaction. База настроена и коннектится. Пытаюсь сделать элементарную выборку из таблицы запросом:
SELECT * FROM CATEGORIES
и в ответ получаю ошибку:
Dinamic SQL Error
SQL error code=-206
Column unknown ID.
Запрс пытаюсь выполнить и на этапе проектирования и в Run-time. Ситуация та же. А вот теперь начинается самое интересное: пытаюсь выполнить тот же запрос с помощью IBQuery и все ОК - вижу данные в Гриде.
Подскажите пожалуйста что это может быть? Может переделать таблицу где все поля именуються большими буквами?
Yumata (2004-01-16 21:20:00) [1]
Я пользуюсь FIBPlus уже год (сразу после Ковязина и начал!) и
ничего другого не пробовал - результат - сетевая версия автовокзала в Магнитогорске работет без сопровождения с мая 2003. Правда на Yaffil. У меня есть FIBPlus 4.81 для Delphi6, но работает и с 7. Весит 1.8 мег. Могу кинуть на мыло.
Евген (2004-01-09 17:05:00) [2]
Сорри, это я старую базу в ини файле оставил. Вроде все работает.
Евген (2004-01-09 16:30:00) [3]
Появился новый глюк: на этапе проектирования при установку значения IBDataSet.SelectSQL в true в Гриде вижу данные, в Run-time при выполнении команды
CategoriesDataSet.Openвылетает та-же ошибка (Типа неизвестный столбец ID).CategoriesDataSet.Active:=true- тот же результат.
А собственно в чем разница если я "руками" открываю запрс и в Run-time?
Term (2004-01-09 16:16:00) [4]
> стоит пользоваться IBX и не париться
вполне, нормальное решение
Евген (2004-01-09 16:13:00) [5]
Спасибо всем кто откликнулся! давайте подведем итоги:
1. Сделал новую БД с именами таблиц и полей в верхнем регистре и все ОК.
2. Наверное все-таки нужно и дальше так делать БД (я имею ввиду регистр).
3.
> Term ©
Не спорю, может и так, только после создания новой БД (см. п. 1) я в свойствах IBDataSet ничего не менял, исправил только имя БД.
2 All Кто-нить пользовался компонентами FIBPlus? Как впечатления. Хотел бы их для себя купить, кто подскажет сколько стоит (а то не залезть на www.devrace.com - че-то с сервером)? Или может стоит пользоваться IBX и не париться?
Еще раз спасибо всем откликнувшимся.
Term (2004-01-09 15:44:00) [6]
а может всё проще, и дело не БД, а в кривых руках, или не внимательности. Если IBQuery возвращает набор то причём тут БД???
Мне кажется он одно из свойств TIBDataSet неверно прописал, я имею ввиду RefreshSQL,UpdateSQL и DeleteSQL? может тут стоит посмотреть, а для верности сформировать их с помошью
DataBase Editor...
Евген (2004-01-09 14:47:00) [7]
> kaif ©
Я наоборот стараюсь описать ситуацию наиболее подробно. Может я где-то и совершаю ошибку, даже скорее всего. И мне очень кажеться что это самая примитивнейшая и позорнейшая ошибка. Но я повторюсь. Интербейс я только начинаю изучать. Изучаю по книге порекомендованной в этом же форуме. Буду рад любой информации и ссылкам на нее.
> SanLystsov ©
У меня есть рабочая БД с полем ID и никаких вопросов не возникало.
kaif (2004-01-09 14:42:00) [8]
Не знаю, насколько мое мнение может быть авторитетным, но мне кажется, что во избежание путаницы, рассчитывать на регистрозависимость - не лучший путь.
Я лично просто нигде не использую кавычек, русских названий полей и т.п. вещей.
Насчет верхнего или нижнего регистра скажу так. Это дело вкуса. Я лично все таблицы создаю в верхнем регистре. Тексты хранимых процедур иногда создаю в нижнем (так читабельнее). Запросы на стороне клиента лучше смотрятся, если они записаны маленькими буквами. Если не употреблять кавычки, пробелы и использовать только английские идентификаторы - проблем не возникает.
Евген (2004-01-09 14:37:00) [9]
Точно, Серега не прав. Тем более что по умолчанию там стоит 3-й диалект.
До вчерашнего дня была проблема с таблицами: я создавал таблици с именами как в книге "Categories" и "Goods". Через IBConsole их вижу а запрос сделать немогу - пишет что не может найти таблицу CATEGORIES (напомню, что запрс былselect * from "Categories"). Сегодня я переделал базу с таблицами "CATEGORIES" и "GOODS". Таблицы теперь находятся, а поля нет. Может стоит переделать базу и с именами полей в верхнем регистре?
2 All>
Хотелось бы услышать авторитетное мнение по поводу необходимости создавать таблици, поля и т.д. с именами в верхнем регистре.
kaif (2004-01-09 14:34:00) [10]
Что-то я не сталкивался с регистрозависимостью букв в 3-м диалекте.
Ситуация, которую ты описываешь, вообще невозможна.
Что-то недоговариваешь.
Если есть подозрения на диалект и регистрозависимость, попробуй все это создать без кавычек:
CREATE TABLE CATEGORIES
(
Id INTEGER NOT NULL,
Name VARCHAR(50) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
GoodsCount INTEGER,
CONSTRAINT PK_Categories PRIMARY KEY (Id)
);
Потом если
SELECT * FROM CATEGORIES
не заработает,
значит у меня это должно было не работать уже 10000 раз.
SanLystsov (2004-01-09 14:18:00) [11]
Попробуйте заменить заголовок столбца на, например "Id1" - будет ли выдаваться та же ошибка? У меня нечто похожее было со столбцами Year и Level - мне кажется, что это какие-нибудь встроенные имена в InterBase"вском расширении SQL. Менял на Year1 и Level1 соответственно.
Alex Koviazin (2004-01-09 13:28:00) [12]
Серёга, ты неправ !
Serg Vostrikov (2004-01-09 13:20:00) [13]
Судя по всему ты просто не указал SQLDialect 3 в TIBDatabase. То есть, база сделана в третьем диалекте, а подключаешься ты в первом, вот и грабли.
weRUs (2004-01-09 13:03:00) [14]
У меня была такая проблема, избавился, когда руками прописал все поля: ID, NAME и т.д.
Евген (2004-01-09 12:56:00) [15]
> Deniz ©
Да в том то и дело что нигде не проставлены. Я кладу на форму новый компонент, заполняю только самое необходимое и та же ситуация. Более того мастер мне пишет поля так как я их создавал: первая буква большая а остальные маленькие. День назад был глюк Unknuwn Table CATEGORIES (тогда таблица создавалась как Categories). Создал новую БД с таблицей CATEGORIES и таблицу мы уже видим, но поля не видим. Если таблицу и поля нужно большими буквами обзывать - так и скажите, но во всех книгах пишут как Categories.
Vemer (2004-01-09 12:52:00) [16]
Для меня регистрозависимость это плохо. Попробуй COLLATE PXW_CYRL убрать.
Евген (2004-01-09 12:49:00) [17]
> Vemer ©
SQL Dialect 3. Это хорошо что регистрозависимый, только он, собака дикая, переводит имена всех полей к верхнему регистру. Зачем? Как это можно отключить, или придется БД переделывать? Хотелось бы узнать все эти ньюансы чтоб дальше лбом не биться. А с другой стороны IBQuery работает. Можно конечно и так как ты говоришь, но в книге рекомендуется IBDataSet. Хотелось бы изначально "правильно" учиться работать на "Правильных" компонентах.
> HSolo ©
В IBDataSet.SelectSQL на этапе проектирования с помощью мастера вношу текст SELECT * FROM CATEGORIES. На этапе проектирования в свойстве Active меняю false на true или в Run-time выполняется команда CategoriesDataSet.Open;
Deniz (2004-01-09 12:39:00) [18]
Если в IBDATASET выполнить запрос select * from CATEGORIES и именно так, без указания полей и т.д., то все будет ОК, но чувствуется где-то проставлено поле ID, на что и ругается "ID" и "Id" это разные поля в 3-диалекте.
Vemer (2004-01-09 12:27:00) [19]
Какой SQL? SQL3 - регистрозависимый. Может поможет upgrade IBX, есть на Ibase.ru. "COLLATE PXW_CYRL" - может влиять. Какая страница стоит в IBDataBase? Тоже начинающий, использую связку IBQuery + IBUpdateSql. На SQL1 работает замечательно.
HSolo (2004-01-09 12:27:00) [20]
>Пытаюсь сделать элементарную выборку из таблицы запросом
Как именно пытаетесь?