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

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

Проблема с 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]

>Пытаюсь сделать элементарную выборку из таблицы запросом
Как именно пытаетесь?


Наверх

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