![]() | |||
![]() |
| ||
---|---|---|---|
![]() |
Дайджест от 25.11.2000 |
---|
Если Вы не нашли ответ на свой вопрос в этом дайджесте, то попробуйте найти его в основной базе. Поиск ведется так же и в "Круглом столе" славного "Королевства дельфи". И в разделе "Взаимопощь" на www.infoart.ru |
![]() |
Базы данных |
---|
![]() |
Почему при создании алиаса БД типа Microsoft Access 97 у меня BDE Administrator запрашивaет пароль, которого я, естественно, не знаю! »»» Mike Goblin - mgoblin@mail.ru (13.06.00 14:26) А вы пробовали его не вводить, а нажать Enter, мне это сильно помогало. Желаю успехов :)) »»» kingdom - kingdom@tepkom.ru (09.07.00 19:19) Вообще-то по умолчанию для пользователя admin пароля нет, попробуй. А вот если испольщоватл ADO компоненты, то там на сто процентов это срабатывает... »»» Павел Чернов В компоненте database есть свойство "loginpromt" так вот если его устанавить в false, его самого законектить на алиус в BDE, и подключатся к базе не на прямую а через него то дурацкие вопросы типа login и pasword появляться не будут
-= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
»»» kingdom (11.07.00 18:10) Привет всем Delphi-ерам !!! Есть бинарное дерево в узлах информация (неважно какая), очень большое дерево порядка 1000 узлов. Имеет ли смысл использовать БД для представления такого дерева, и если да, то какие компоненты лучше использовать ( типа TTreeView но только для БД, если токое есть ?). Спасибо за помощь !!! »»» Mike Goblin - mgoblin@mail.ru (12.07.00 09:13) Привет Вроде делал тематический рубрикатор, ну узлов было около 200. Скорость была нормальная. Использовал обычный TreeView и хранимые процедуры на сервере для отображения/изменения »»» Romych (12.07.00 14:45) Ну бинарное-то дерево можно в любой таблице (хоть в парадоксовской) хранить. Поля такие (например): 1. Ключ 2. Ссылка на левый лист/ветвь 3. Ссылка на правый лист/ветвь 4...n прочие поля с информацией. В первой записи храни корень. По трем первым полям задай индексы, благо поля цифровые - индекс будет небольшой. А 1000 узлов - это мало, хотя все зависит от количества информации в этих узлах. Для отображения используй тот же TTreeView, грузи в него изначально корень и делай ему него одного потомка (чтоб плюсик был), когда юзерь жмет на плюс (см соотв Event) создавай реальных потомков (и с подветочками, коль нужно). И т.д. -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
»»» Paul (30.04.00 13:56) Подскажите как прочитать адресную книгу Outlook (MSOffice) из Delphi и занести данные в таблицу *.db??? »»» Алексей - melrin@mastak.com (07.05.00 03:07) Полагаю, что работа с Outlook идентична работе с Exel через OLE. Пример смотрите в FAQ - Система. А список команд управления Оутглюком есть в MSDN. »»» Rukhimovich Oleg - rukhiich@hotmail.com (06.06.00 20:16) Сперва сделай 'Import type Library' для Outlk80.olb, (расположен в \Program Files\Microsoft Office\Office). После того, как появится файл 'Outlook_TLB.pas', можно нацарапать следующее:
-= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
»»» Aleks (23.06.00 05:44) При создании поиска необходимо, что бы не учитывался регистр.=>where upper(b) like "%A%" , где А- текст поиска написан большими буквами; b-имя поля. Для английских слов все работает, но русские слова находит только те у которых в поле b заглавные А. »»» Romych (11.07.00 16:53) Должен быть указан соответствующий LANGDRIVER »»» OsAE - osae@newmail.ru (16.08.00 13:02) А какой формат данных. Вот к примеру в Interbase при определении таблицы надо писать: create table NameTable( NameField varchar(20) COLLATE PXW_CYRL -||- ); Это вродебы исправляет проблему. -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
»»» Pavlik (06.07.00 14:41) Подскажите, пожалуйста, как быстрее всего осушествлять поиск записи в БД(более 200000 записей). Тип БД - DBase. Индексы в таблицах отсутствуют, т.к. все записи разные. »»» Mike Goblin - mgoblin@mail.ru (07.07.00 12:50) Думаю, что методом Locate. А насчет индексов очень рекомендую подумать »»» kingdom - kingdom@trepkom.ru (08.07.00 21:34) Индексы нужны ОДНАЗНАЧНО, я не понимаю что значит записи разные ? Залезаешь в свою базу и создаешь индексы (т.е. сортировку в каждому полю) и все у тебя летать будет (ну должно наверное, я такой юольшой базы никогда не видел). Так что поясни пожалуйста проблему... »»» Sergei - Sergei@polisma.net (10.07.00 17:52) Все записи разные, это значить, что для таблицы справидлива реляционная алгебра (не нужно создавать дополнительное поле, чтобы сделать записи уникальными). Но для ускорения работы вы должны определиться, какой конкретно поиск часто используется и ускорить его с помощью соответствующего индекса. Лишние индексы создавать не нужно, так как скорость работы уменьшится. »»» Max - Max_Heavy@yahoo.com (22.07.00 13:19) 200 тыс. рекордов не так уж и много, но Locate-м можно извратится, хотя лучше всего Query-гой. И насчет индекса ты лучше подумай. А то ведь хрен его знает этот DBF. -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
Как создать таблицу базы данных, не используя Database Desktop? Положите компонент TTable на форму и попробуйте указанную ниже процедуру.
------------------------------------------- Комментарий от "Рылькова"
»»» Dim (18.08.00 09:38) Подскажите как можно вставить выпадающий список в DBGrid, желательно по подробней. Заранее благодарен Дмитрий. »»» Gurin Sergey - asmad@tsure.ru (18.08.00 10:29) 1. Дважды щелкнуть на DBGrid 2. Добавить колонку 3. Указать поле которое будет показываться (свойство FieldName) 4. Заполнить список (свойство PickList) »»» dim - eda@arhadm.net.ru (18.08.00 12:05) А можно в место заполнения списка подключить сразу таблицу? »»» Mike Goblin - mgoblin@mail.ru (18.08.00 14:38) Да можно, Вам нужно в компоненте данных сделать Lookup поле. 1. Дважды щелкнуть мышкой на допустим TTable появится редактор полей 2. В редакторе полей правой кнопкой и New Field 3. Появится диалог в нем тип поля Lookup, настоить остальные св-ва (если надо подробнее про другие св-ва пишите). »»» dim - eda@arhadm.net.ru (18.08.00 15:29) Если не затруднит, то от описания я бы не отказался »»» Mike Golovanov - mgoblin@mail.ru (21.08.00 09:06) Итак, есть две таблицы, одна из них содержит ссылку (числовой ID) на вторую, где есть текствое описание чего-либо. Допустим - это таблица человек и его специальность. Наша цель - сделать так, чтобы при вводе/редактировании ФИО человека итд в DBGrid из выпадающего списка можно было выбрать специальность. Таблица человек --> Table1 Таблица специальности --> Table2 Путь решения - создание Lookup поля в Table1. Этапы 1. Вызываем редактор полей Table1, Click мышой 2. В редакторе полей правой кнопкой и New Field -> видим диалог 3. В диалоге Name --> Profession (или как Вы его обзовете) Type --> String Size --> длина наименования профессии в Table2 FieldType --> Lookup KeyFields --> имя числового поля Table1, в которое связывает нас с Table2 (например prof_id) Dataset --> откуда мы будем брать строки описания, т.е Table2 LookupKeys --> Ключевое поле Table2 ResultField --> наименование профессии из Table2 Жмем ОК Теперь в DBGrid для Table1 данное поле будет содержать выпадающий список с профессиями из Table2 »»» dim - eda@arhadm.net.ru (21.08.00 09:10) Спасибо за описание, но есть еще вопрос: Если нет к примеру такой професии, то как добавить новую через это же поле? »»» Mike Goblin - mgoblin@mail.ru (21.08.00 13:02) проще всего добавить в Table2 новую запись -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
»»» Maksim (05.08.00 18:12) ЗАДАЧА: Создать список фамилий со связанным полем с информацией о человеке. Требования: 1. Список длиной более 5000 записей 2. Возможность поиска по фамилии и индексу 3. Обойтись без использования БД, требующих установки своих библиотек и соотв. настройки 4. Информационное поле должно содержать форматирование (абзацы, ж., курс., подч.). 5. Используются символы с ударением 6. Использовать некоторые слова как гиперссылку. Как я поступал раньше: Создавал файл ресурса и с соотв. форматированием забивал в DLL. Все работало и всем устраивало, но не было возможности использования форматированного текста и символов с ударением. Что делать? Киньте ответ на мыло пожалуйста. »»» Andrew - abaid@cit.belgtts.ru (07.08.00 11:38) Можно использовать компонент из библиотеки RX Library - TRxMemoryData. Unit RxMemDS Description Компонента TRxMemoryData представляет собой таблицу в памяти (RAM), которая может быть использована как обычный набор данных (dataset) в Delphi. Эта компонента (в отличие от TMemoryTable) не использует доступ к данным через BDE и может быть использована с любыми data-aware элементами управления Delphi VCL. Все записи таблицы сохраняются в памяти и уничтожаются при закрытии таблицы. Есть возможность сохранять и считывать данные из файла. Не требует ни каких дополнительных библитек. Полностью родной Delphi-ский компонент. Структуры таблицы вы можете задать в дизайнере Delphi с помощью редактора компоненты "Fields Editor", или скопировать из другого набора данных в run-time с помощью метода CopyStructure. В настоящее время объектные поля (Delphi 4) не поддерживаются. Внимание Компонента TRxMemoryData реализована только для Delphi версии 3.0 и выше. »»» kig - kig@slc.ru (08.08.00 21:48) Как алтернативу TRxMemoryData можно использовать TClientDataSet (правда надо тащить stdvcl40.dll и dbclient.dll). В информационном поле можно хранить HTML и пользовать их TWebBrowser (или TEmbeddedWB) -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
Как создать базу данных Acceess во время выполнения Можно применить DAO
Выдается такое сообщение: Error creating cursor handle. »»» Сергей (13.07.00 17:10) Выдается такое сообщение: Error creating cursor handle. Смысл понятен, но не понятно, что нужно сделать. Спасибо! »»» Mike Goblin - mgoblin@mail.ru (13.07.00 18:13) Это выдается когда запрос не выдает данные, т.е не select, необходимо делать не Query1.Open или Query1.Active:=true, а Query1.ExecSQL -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
»»» Merle Corey (07.07.00 12:36) Существует следующая проблема: есть 4 таблицы в БД ORACLE -- Карточки, Пересылки, Исполнители и Департаметы. Связь сл. : К каждому департаменту привязаны исполнители. С исполнителями связаны пересылки. Ну а Пересылки связаны с карточками. Необходимо подсчитать кол-во карточем для каждого департамента. Как это сделать пошустрее. »»» kingdom - kingdom@tepkom.ru (08.07.00 21:27) У меня были похожие проблемы, пришлось делять вложенный СКуЛь запрос типа select ... from (select .. from (select ...)) ну и применить соответсвующую функцию для подсчета (если очень дано могу позже написать как сейчас не помню), ... ну млм же вот в Access можно делать запросы прямо в самой MS-Access к которым можно обращаться как к обычным таблицам только понятно их физически нет, так вот в запрос включить все столбцы Карточек и столбец с ID из Департамента тогда все должно быть быстро, попробуй... -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
Проблема совместимости BDE и ODBC Александр (18.08.00 10:36) У меня следующая схема доступа к базе : Программа -> BDE -> ODBC -> Oracle 8i При выборке из некоторых таблиц возникает следующая ошибка : General SQL error. [Oracle][ODBC]Restricted data type attribute violation. SELECT * FROM "DBO".ViewOperTypeForLoad ORDER BY "ID" Версии: BDE 5.01, Oracle ODBC 8.1.6, Oracle Net8 Client 8.1.6, Oracle Server 8.1.6 Может кто сталкивался ? По идее эта проблема выскакивает на поля типа integer. Alexey (19.08.00 17:28) У меня такая вещь выправлялась убиранием кавычек из имени поля (иногда приходилось вместо них печатать []) Из конференции Masters of Delphi
Как послать на Delphi комманды SQL - DELETE и INSERT ? »»» Sergey (04.08.00 10:30) Попытался присвоить код DELETE FROM MyTable WHERE (условие) в TQuery, а он не хочет выполняться. =( Какие еще есть способы организовать управление через комманды SQL базой, как, например, это делает SQL Explorer? »»» ASCRUS - ascrus@aport.ru (04.08.00 10:53) Во первых такую команду через TQuery надо вызывать методом ExecSQL. А во вторых можно через TDataBase методом Execute. Ну и если не поможет, то третий, самый надежный метод: напрямую через API BDE процедурой DbiQExecDirect (конечно если у тебя база через BDE подключенна). »»» Andrew - abaid@cit.belgtts.ru (04.08.00 11:05) Подобное SQL выражение нужно выполнять методом ExecSQL TQuery а не Open(Active := True) так как оно не возвращает ни какого набора данных или методом ExecSQL RX компоненты TSQLScript, она кстати может выполнять несколько подобных выражений в одном scripte. »»» Kinder - rednik@ukr.net (04.08.00 11:38) Запрос для удаления по условию: ' Delete Table_name where Никаких "from" Ну ExecSQL »»» Sergey - mover@mail.ru (04.08.00 18:40) Аааа! =)) Спасибо. Как же я про ExecSQL забыл, хотя применяю его очень часто, но после чего открываю запрос, а он следовательно не открывается, так как результат не возвращается. Это я понял. Тем не менее, я выкрутился составлением RequestLive=True запроса с указаным условием, где на каждой записи делаю свое черное дело. =) -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
[InterBase+Delphi] Refresh Query »»» AlBit (28.07.00 16:17) К копоненту TQuery (реализованы кэшированные изменения при помощи TUpdateQuey) привязан TDBGrid и TDBNavigtor и все пекрасно работает, но при нажатии кнопки Refresh на навигаторе выскакивет ошибка "Table does not support this operation because it is not uniquely indexed". Таблица имеет первичный ключ и один дополнительный индекс по символьному полю. »»» Alexander - avolkov@infostroy.ru (28.07.00 16:36) С таким встречался, если в Query определены Lookup поля. В Вашем случае это так? »»» AlBit - alex@shf.keytown.com (01.08.00 08:55) Lookup поля не определены. Но такое происходит как в отдельной таблице без всяких Lookup, но с внешним ключем, так и в таблицах со связкой Master-Detail. »»» maestro - maestro@bashneft.ru (01.08.00 09:40) под какой СУБД работает ваша программа ? »»» AlBit - alex@shf.keytown.com (02.08.00 16:19) Программа работает в СУБД InterBase 5.0 »»» Vader (18.08.00 18:31) Почитай внимательно родной делфийский хелп по TQuery, там же чёрным по белому написано что метод Refresh работает ТОЛЬКО для таблиц PARADOX или DBase!!! А в твоём случае надо просто закрывать и снова открывать запрос, других методов для IB я пока не встречал! -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
Как мне упаковать Paradox или DBF таблицу? Самый простой метод -- воспользоваться функцией PackTable из rxLib. В версии 2.32 и, наверное, раньше, есть ошибка в процедуре PackTable: измените кусок:
Источник: Дельфи. Вокруг да около.
Gurin Sergey 1. Дважды щелкнуть на DBGrid 2. Добавить колонку 3. Указать поле которое будет показываться (свойство FieldName) 4. Заполнить список (свойство PickLis dim А можно в место заполнения списка подключить сразу таблицу? Mike Goblin Да можно, Вам нужно в компоненте данных сделать Lookup поле. 1. Дважды щелкнуть мышкой на допустим TTable появится редактор полей 2. В редакторе полей правой кнопкой и New Field 3. Появится диалог в нем тип поля Lookup, настоить остальные св-ва (если надо подробнее про другие св-ва пишите). dim Если не затруднит, то от описания я бы не отказался Mike Golovanov Итак, есть две таблицы, одна из них содержит ссылку (числовой ID) на вторую, где есть текствое описание чего-либо. Допустим - это таблица человек и его специальность. Наша цель - сделать так, чтобы при вводе/редактировании ФИО человека итд в DBGrid из выпадающего списка можно было выбрать специальность. Таблица человек --> Table1 Таблица специальности --> Table2 Путь решения - создание Lookup поля в Table1. Этапы 1. Вызываем редактор полей Table1, Click мышой 2. В редакторе полей правой кнопкой и New Field -> видим диалог 3. В диалоге Name --> Profession (или как Вы его обзовете) Type --> String Size --> длина наименования профессии в Table2 FieldType --> Lookup KeyFields --> имя числового поля Table1, в которое связывает нас с Table2 (например prof_id) Dataset --> откуда мы будем брать строки описания, т.е Table2 LookupKeys --> Ключевое поле Table2 ResultField --> наименование профессии из Table2 Жмем ОК Теперь в DBGrid для Table1 данное поле будет содержать выпадающий список с профессиями из Table2 dim Спасибо за описание, но есть еще вопрос: Если нет к примеру такой професии, то как добавить новую через это же поле? Mike Goblin проще всего добавить в Table2 новую запись
»»» Шевелев Дмитрий (21.07.00 12:41) Допустим 2 пользователя редактируют одну и ту же строку таблицы (TQuery.CachedUpdates = True). Один из них сбрасывает содержимое кэша в таблицу (UPDATE), изменяя при этом значение первичного ключа. За ним второй пользователь проделывает ту же операцию, но поскольку значение ключа изменилось команда UPDATE не затронет ни одной строки, что повлечет за собой исключение: "Update failed". Что необходимо сделать, чтобы это исключение не генерировалось. Заранее благодарю за советы. »»» Mike Goblin - mgoblin@mail.ru (21.07.00 14:15) Дык мне кажется его надо корректно обработать, т.к юзер должен знать, что изменения не внесены. »»» SergSuper - sergsuper@mail.ru (21.07.00 15:22) А мне кажется первичный ключ он на то и первичный, что не должен меняться. Но по теме подсказать не могу. -= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-
Как получить список пользователей BDE Это возможно для Paradox
У меня в программе происходит очень большой запрос -- в районе нескольких тысяч или десятков тысяч записей. Соответственно, большой сетевой трафик, программа тормозит и так далее. Можно ли как-нибудь оптимизировать это все? Постарайтесь изменить логику приложения так, чтобы таких запросов не возникало. Обычно подобные вещи свидетельствуют о несколько неверной архитектуре приложения.
Как активизировать компоненты доступа к данным связанные с определенным TDatabase
Какой формат данных предпочесть в Delphi? dBase или Paradox? Если вам действительно все равно, то вот несколько пунктов 'за' формат Paradox: Широкий выбор типов полей, включая автоинкремент, BLOBs, и т.п. Соблюдение целостности данных, контроля данных, обновления индексов на уровне ядра BDE. Первичный индекс таблицы автоматически соблюдает уникальность записей, вторичные индексы обеспечивают отсортированный "вид" на записи таблицы.
Как проверить инсталлирована ли BDE Проверить реестр
Я безуспешно пытался использовать данные из Microsoft Access иначе, нежели просто с помощью TTable. Используя TQuery я могу только читать результат, но не могу редактировать. После "login screen" возникает сообщение типа 'Passthrough SQL connection must be shared'. Измените в настройке псевдонима (alias) пункт 'SQLPASSTHRU MODE' на 'SHARED AUTOCOMMIT'.
Как полчить список связанных с TDatasource элементов управления
Как узнать, что пользователь перешел на другую запись, например, в TDBGrid? Переход на новую запись - это событие, которое относится не к визуальному компоненту, а к источнику данных. Соответствующее событие называется OnDataChange и имеется у компонента TDataSource.
|
![]() |
Сайт клуба любителей Delphi - Masters of Delphi Designed by MoveR Studio © 2000 - | - Вопросы? Предложения? пишите |
---|
![]() |