Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизПроблема с IBDataSet Найти похожие ветки
← →
Евген (2004-01-09 12:16) [0]Уважаемые мастера, возможно мой вопрос покажется элементарным и глупым, но во-первых в 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 и все ОК - вижу данные в Гриде.
Подскажите пожалуйста что это может быть? Может переделать таблицу где все поля именуються большими буквами?
← →
Vemer (2004-01-09 12:27) [1]Какой SQL? SQL3 - регистрозависимый. Может поможет upgrade IBX, есть на Ibase.ru. "COLLATE PXW_CYRL" - может влиять. Какая страница стоит в IBDataBase? Тоже начинающий, использую связку IBQuery + IBUpdateSql. На SQL1 работает замечательно.
← →
HSolo (2004-01-09 12:27) [2]>Пытаюсь сделать элементарную выборку из таблицы запросом
Как именно пытаетесь?
← →
Deniz (2004-01-09 12:39) [3]Если в IBDATASET выполнить запрос select * from CATEGORIES и именно так, без указания полей и т.д., то все будет ОК, но чувствуется где-то проставлено поле ID, на что и ругается "ID" и "Id" это разные поля в 3-диалекте.
← →
Евген (2004-01-09 12:49) [4]
> Vemer ©
SQL Dialect 3. Это хорошо что регистрозависимый, только он, собака дикая, переводит имена всех полей к верхнему регистру. Зачем? Как это можно отключить, или придется БД переделывать? Хотелось бы узнать все эти ньюансы чтоб дальше лбом не биться. А с другой стороны IBQuery работает. Можно конечно и так как ты говоришь, но в книге рекомендуется IBDataSet. Хотелось бы изначально "правильно" учиться работать на "Правильных" компонентах.
> HSolo ©
В IBDataSet.SelectSQL на этапе проектирования с помощью мастера вношу текст SELECT * FROM CATEGORIES. На этапе проектирования в свойстве Active меняю false на true или в Run-time выполняется команда CategoriesDataSet.Open;
← →
Vemer (2004-01-09 12:52) [5]Для меня регистрозависимость это плохо. Попробуй COLLATE PXW_CYRL убрать.
← →
Евген (2004-01-09 12:56) [6]
> Deniz ©
Да в том то и дело что нигде не проставлены. Я кладу на форму новый компонент, заполняю только самое необходимое и та же ситуация. Более того мастер мне пишет поля так как я их создавал: первая буква большая а остальные маленькие. День назад был глюк Unknuwn Table CATEGORIES (тогда таблица создавалась как Categories). Создал новую БД с таблицей CATEGORIES и таблицу мы уже видим, но поля не видим. Если таблицу и поля нужно большими буквами обзывать - так и скажите, но во всех книгах пишут как Categories.
← →
weRUs (2004-01-09 13:03) [7]У меня была такая проблема, избавился, когда руками прописал все поля: ID, NAME и т.д.
← →
Serg Vostrikov (2004-01-09 13:20) [8]Судя по всему ты просто не указал SQLDialect 3 в TIBDatabase. То есть, база сделана в третьем диалекте, а подключаешься ты в первом, вот и грабли.
← →
Alex Koviazin (2004-01-09 13:28) [9]Серёга, ты неправ !
← →
SanLystsov (2004-01-09 14:18) [10]Попробуйте заменить заголовок столбца на, например "Id1" - будет ли выдаваться та же ошибка? У меня нечто похожее было со столбцами Year и Level - мне кажется, что это какие-нибудь встроенные имена в InterBase"вском расширении SQL. Менял на Year1 и Level1 соответственно.
← →
kaif (2004-01-09 14:34) [11]Что-то я не сталкивался с регистрозависимостью букв в 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 раз.
← →
Евген (2004-01-09 14:37) [12]Точно, Серега не прав. Тем более что по умолчанию там стоит 3-й диалект.
До вчерашнего дня была проблема с таблицами: я создавал таблици с именами как в книге "Categories" и "Goods". Через IBConsole их вижу а запрос сделать немогу - пишет что не может найти таблицу CATEGORIES (напомню, что запрс былselect * from "Categories"
). Сегодня я переделал базу с таблицами "CATEGORIES" и "GOODS". Таблицы теперь находятся, а поля нет. Может стоит переделать базу и с именами полей в верхнем регистре?
2 All>
Хотелось бы услышать авторитетное мнение по поводу необходимости создавать таблици, поля и т.д. с именами в верхнем регистре.
← →
kaif (2004-01-09 14:42) [13]Не знаю, насколько мое мнение может быть авторитетным, но мне кажется, что во избежание путаницы, рассчитывать на регистрозависимость - не лучший путь.
Я лично просто нигде не использую кавычек, русских названий полей и т.п. вещей.
Насчет верхнего или нижнего регистра скажу так. Это дело вкуса. Я лично все таблицы создаю в верхнем регистре. Тексты хранимых процедур иногда создаю в нижнем (так читабельнее). Запросы на стороне клиента лучше смотрятся, если они записаны маленькими буквами. Если не употреблять кавычки, пробелы и использовать только английские идентификаторы - проблем не возникает.
← →
Евген (2004-01-09 14:47) [14]
> kaif ©
Я наоборот стараюсь описать ситуацию наиболее подробно. Может я где-то и совершаю ошибку, даже скорее всего. И мне очень кажеться что это самая примитивнейшая и позорнейшая ошибка. Но я повторюсь. Интербейс я только начинаю изучать. Изучаю по книге порекомендованной в этом же форуме. Буду рад любой информации и ссылкам на нее.
> SanLystsov ©
У меня есть рабочая БД с полем ID и никаких вопросов не возникало.
← →
Term (2004-01-09 15:44) [15]а может всё проще, и дело не БД, а в кривых руках, или не внимательности. Если IBQuery возвращает набор то причём тут БД???
Мне кажется он одно из свойств TIBDataSet неверно прописал, я имею ввиду RefreshSQL,UpdateSQL и DeleteSQL? может тут стоит посмотреть, а для верности сформировать их с помошью
DataBase Editor...
← →
Евген (2004-01-09 16:13) [16]Спасибо всем кто откликнулся! давайте подведем итоги:
1. Сделал новую БД с именами таблиц и полей в верхнем регистре и все ОК.
2. Наверное все-таки нужно и дальше так делать БД (я имею ввиду регистр).
3.
> Term ©
Не спорю, может и так, только после создания новой БД (см. п. 1) я в свойствах IBDataSet ничего не менял, исправил только имя БД.
2 All Кто-нить пользовался компонентами FIBPlus? Как впечатления. Хотел бы их для себя купить, кто подскажет сколько стоит (а то не залезть на www.devrace.com - че-то с сервером)? Или может стоит пользоваться IBX и не париться?
Еще раз спасибо всем откликнувшимся.
← →
Term (2004-01-09 16:16) [17]
> стоит пользоваться IBX и не париться
вполне, нормальное решение
← →
Евген (2004-01-09 16:30) [18]Появился новый глюк: на этапе проектирования при установку значения IBDataSet.SelectSQL в true в Гриде вижу данные, в Run-time при выполнении команды
CategoriesDataSet.Open
вылетает та-же ошибка (Типа неизвестный столбец ID).CategoriesDataSet.Active:=true
- тот же результат.
А собственно в чем разница если я "руками" открываю запрс и в Run-time?
← →
Евген (2004-01-09 17:05) [19]Сорри, это я старую базу в ини файле оставил. Вроде все работает.
← →
Yumata (2004-01-16 21:20) [20]Я пользуюсь FIBPlus уже год (сразу после Ковязина и начал!) и
ничего другого не пробовал - результат - сетевая версия автовокзала в Магнитогорске работет без сопровождения с мая 2003. Правда на Yaffil. У меня есть FIBPlus 4.81 для Delphi6, но работает и с 7. Весит 1.8 мег. Могу кинуть на мыло.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c