OberonCore https://forum.oberoncore.ru/ |
|
Не нравится ББ(у) функции min,max в запросе к БД https://forum.oberoncore.ru/viewtopic.php?f=5&t=1285 |
Страница 1 из 2 |
Автор: | Pavel.Yakushev [ Понедельник, 22 Декабрь, 2008 11:18 ] |
Заголовок сообщения: | Не нравится ББ(у) функции min,max в запросе к БД |
Дано: настроенное ODBC соединение к БД Oracle, драйвер ODBC от Oracle Необходимо: Получить результаты запроса: SELECT max(id) FROM companies ни в какую, после выполнения table.Read(0, m) table.res равен SqlDB.noData причем c min не отрабатывает тоже, с другими функциями отрабатывает нормально например строки из таких запросов извлекаются без проблем SELECT decode(id,4,-1,id) FROM companies SELECT sign(id) FROM companies Можно предположить, что ОДВС глючит с запросами типа выбрать максимальное минимальное значение? Или я что то не понимаю? |
Автор: | Илья Ермаков [ Понедельник, 22 Декабрь, 2008 11:28 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
А в самом ББ Вы указываете как драйвер модуль SqlOdbc или SqlOdbc3? Надо 3-ку. |
Автор: | Иван Кузьмицкий [ Понедельник, 22 Декабрь, 2008 12:17 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
У меня MySQL 5.0.67, драйвер MyODBC 3.51.15, BB 1.5re026. Запрос 'SELECT MAX(product) FROM event_product' возвращает корректный результат. |
Автор: | Pavel.Yakushev [ Понедельник, 22 Декабрь, 2008 12:20 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
protocol = "SqlOdbc3"; |
Автор: | Евгений Темиргалеев [ Понедельник, 22 Декабрь, 2008 16:27 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Столкнулся с проблемами работы с ODBC-драйвером HyTech: 1) Поля-даты определяются как "unknown"-тип (драйвер указывает WinSql.SQL_OWNER_USAGE в качетстве типа). 2) В таблице-результате отсутствует последняя строка. Разработчик ответил: Цитата: По п.1 91 это не SQl_OWNER_USAGE, а SQL_TYPE_DATE ( используется для odbcver старше 3. ) По п.2 строки не пропадают. Pavel.Yakushev, проверьте, возможно у Вас проблема 2. Из-за чего возникает проблема, нужно разбираться. a) Может быть неточность в реализации SqlOdbc3, который, вероятно, переделывали из SqlOdbc b) Либо какие-то замуты с самим драйвером, про которые упоминается в SqlOdbc и SqlOdbc3: Цитата: (* The major problem with ODBC is that many of its functions, or many uses of them, are optional.
This means that one can never rely on a function to be really implemented by the current ODBC driver. As a result, one often has to try the best approach first, then back off if necessary to the next best, etc. This is cumbersome and difficult to test exhaustively. *) |
Автор: | Pavel.Yakushev [ Вторник, 23 Декабрь, 2008 06:34 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Коллеги, приветствую! По проблеме Не нравится Oberon(у) функции min,max в запросе к БД Решение следующее: Проблема в драйвере ODBC, у меня был установлен драйвер производства Oracle v=10.01.00.02 Я скачал с сайта Oracle драйвер v=10.02.00.4 (Oracle ODBC Instant Client for Windows) Теперь данные из запросов вида "select max(id) from companies" извлекаются нормально. PS: 1) Я не сомневался в ВВ, было подозрение на драйвер ODBC. 2) Есть желание заюзать BB для создания интерфейса пользователей к БД Oracle 10g 3) Драйвер Oracle ODBC Instant Client for Windows хорош тем, что может устанавливаться один на виндовую машину, без установки. клиента Oracle |
Автор: | Иван Кузьмицкий [ Вторник, 23 Декабрь, 2008 08:29 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Видно, проблемы с версиями драйверов ODBC не только у MySQL Недавно экспериментировал с базой и поставил драйвер 3.51.11. И вдруг поля времени стали обнуляться. Сначала думал на свой код, а потом в баг-листе MySQL обнаружил, что проблема именно в этой версии драйвера. Проблема решилась заменой версии драйвера на 3.51.15. Pavel.Yakushev писал(а): 2) Есть желание заюзать BB для создания интерфейса пользователей к БД Oracle 10g У нас сделан интерфейс пользователя к базам MySQL. Кое-какой опыт наработан, и могу сказать - что это дело вполне осуществимое. Более того, на базе ББ можно без особого труда делать автоматические генераторы интерфейса пользователя БД.
|
Автор: | Pavel.Yakushev [ Вторник, 23 Декабрь, 2008 08:53 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Хорошо бы небольшой пример из двух форм см. п 2.1 и 2.2 следующего вида: 1) скрипт создания таблиц с данными 2.1) Форма со скролл-областью для ввода и корректировки данных- типа в скролл выбрал строку кликнул по строке попал в нескролл форму и редактируешь поля а строка скролл на которой стоял выделена цветом 2.2) Форма со скролл-областью для ввода и корректировки данных- типа в скролл выбрал строку кликнул и редактируешь поля в самой текущей строки скролл области 3) при переходе по строкам скролл-области в поле х отображаются значение какого либо текущего поля Автоматически генерировать это когда при создании формы указываешь модуль? - впечатляет продуманность. Видел доки с большими примерами, пока не разбирался, но может оказаться что в них за деревьями леса не будет видно )) |
Автор: | Pavel.Yakushev [ Среда, 24 Декабрь, 2008 13:30 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Коллеги, есть ещё какие книги по работе с Базами Данных кроме книги Brett S. Hallett "Developing Programs with BlackBox Oberon" Книга посвящена разработке бизнес-приложений в среде BlackBox: создание пользовательских интерфейсов, работа с текстами, доступ к СУБД (на примере MySQL), генерация отчетов... Чет не пойму как сделать форму (пока для отображения) состоящую из одной скролл области связанной с одной таблицей БД Требуется пример. |
Автор: | Иван Кузьмицкий [ Среда, 24 Декабрь, 2008 14:12 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Pavel.Yakushev писал(а): Чет не пойму как сделать форму (пока для отображения) состоящую из одной скролл области связанной с одной таблицей БД 1. Создаём модуль MyModule с интерактором table: StdTables.Table и компилируем. 2. Создаём пустую форму. 3. Кидаем на неё таблицу (Controls, Insert Table Control) и связываем её с интерактором MyModule.table. 4. Коннектимся к базе, посылаем ей SQL-запрос и получаем ответ в виде result: SqlDB.Table. 5. Инициализируем наш интерактор table, последовательно читаем result и заполняем ячейки таблицы-интерактора. 6. Делаем обновление контрола: Dialog.UpdateList(table) Примерно так. |
Автор: | Pavel.Yakushev [ Понедельник, 29 Декабрь, 2008 13:02 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Иван Кузьмицкий, брось кусок кода по пункту 5. Нужен пример инициализации и заполнения. Не пойму что значит инициализировать интерактор table |
Автор: | Иван Кузьмицкий [ Понедельник, 29 Декабрь, 2008 22:49 ] | |||
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД | |||
Приаттачил подсистему со всем необходимым. Скриншот прилагается. Для отработки примера, естественно, необходимо создать ODBC-соединение и подставить его параметры в процедуру Init. А вот полный текст примера: Код: MODULE TestSql;
IMPORT SqlDB, StdTables, Dialog, StdLog; TYPE (* структура для чтения результата запроса должна иметь экспортированные поля *) Rec = RECORD name*: ARRAY 50 OF CHAR END; VAR db: SqlDB.Database; (* глобальный указатель на БД *) table*: StdTables.Table; (* интерактор для таблицы *) PROCEDURE Init (OUT d: SqlDB.Database; IN id, password, datasource: Dialog.String); VAR res: INTEGER; BEGIN SqlDB.OpenDatabase('SqlOdbc3', id, password, datasource, SqlDB.async, SqlDB.showErrors, d, res); IF d # NIL THEN (* Пример инициализации SQL-сеанса для сервера БД MySQL 5.0.xx *) d.Exec("SET NAMES 'cp1251'"); d.Exec("SET CHARACTER SET cp1251"); d.Exec("SET SQL_MODE='REAL_AS_FLOAT,PIPES_AS_CONCAT,IGNORE_SPACE'"); END; END Init; (*Сервисная процедура*) PROCEDURE Query (db: SqlDB.Database; IN statement : ARRAY OF CHAR; OUT t: SqlDB.Table); BEGIN ASSERT(db#NIL, 21); t := db.NewTable(); t.Exec(statement); END Query; PROCEDURE Do*; VAR rows, res : INTEGER; t: SqlDB.Table; i: INTEGER; rec: Rec; BEGIN IF db # NIL THEN Query(db, "SELECT name FROM ref_cities", t); (* Обработка результата запроса *) IF t.rows > 0 THEN table.SetSize(t.rows, 1); table.SetLabel(0, 'Город'); (* Инициализация интерактора *) FOR i := 0 TO t.rows-1 DO t.Read(i, rec); table.SetItem(i, 0, rec.name$) END; Dialog.Update(table) END END END Do; BEGIN Init(db, 'user', 'password', 'odbcSource'); END TestSql. "TestSql.Do; StdCmds.OpenAuxDialog('Test\Rsrc\Sql.odc', 'SQL')"
|
Автор: | Клоп Говорун [ Понедельник, 13 Июль, 2009 11:08 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Надо чтоб в ячейки можно было вставлять вьюхи всякие,и линки?Кузьмицкий - спаси! |
Автор: | Иван Кузьмицкий [ Понедельник, 13 Июль, 2009 12:10 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
В какие ячейки? |
Автор: | Клоп Говорун [ Понедельник, 13 Июль, 2009 14:54 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Которые Dialog.String В StdTables. Я его поверхностно смотрел только,но чую ,что не вставить мне в ячейку таблицы View. |
Автор: | Иван Кузьмицкий [ Понедельник, 13 Июль, 2009 15:22 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Пожалуйте для обсуждения сюда: viewtopic.php?p=31816#p31816 |
Автор: | Клоп Говорун [ Вторник, 14 Июль, 2009 11:19 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Вот еще такой вопрос.Пусть у меня есть таблица, в ячейки которой я прописываю данные из результатов запроса. В стобцах таблицы отображаються не все данные запроса.Но ,при двойном щелчке по строке таблицы вылезает документ с детальной информацией по каждой записи.Мне как лучше быть. Вытягивать заново детальные данные запросом к базе по ключу в процедуре вызова документа,или организовать ,скажем,массив записей, в которые заранее зафигачить всю нужную информацию? Ага Вот есть тема: Цитата: Привязка контрола не к интерактору, а к экземпляру? Я вам хочу сказать,что это неприятная засада,хотя и решаемая вроде |
Автор: | Иван Кузьмицкий [ Вторник, 14 Июль, 2009 13:10 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
У меня по дабл-клику, делается запрос к базе на детализацию. Так удобнее, ведь детали могут занимать значительный объём. Привязка контрола к экземпляру работает, но проблема заставить сработать уведомитель. |
Автор: | Клоп Говорун [ Вторник, 14 Июль, 2009 14:20 ] |
Заголовок сообщения: | Re: Не нравится Oberon(у) функции min,max в запросе к БД |
Я и так и так порпробовал.Однакож,неприятная история. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |