Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с unidac и ehlib, вопросы начинающего 
V
    Опции темы
KAMIKAZE
Дата 7.2.2011, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Установил сегодня компоненты  unidac и ehlib. Подключился к базе и вывел ее содержимое, все кажется довольно просто.  

Появились вопросы: 
1. увидел очень полезную вещь в DBGridEh - можно включить TRowDetailPanelEh, что дает "+" для каждой записи. Это то что мне нужно, я хочу отображать дополнительную информацию на нажатии на "+" из другой базы по общему ключу. Для примера я прикрепил архив, в нем в папке "Mysql Db query" есть два SQL файла для создания таблиц в MySQL.  Таблица test1 содержит поля: id и name, а таблица test2 поля: idimageurl .... и т.д.
Как сделать, что бы по нажатию на "+" в открытом TRowDetailPanelEh отображалась информация(тоже в DBGridEh ) из таблицы test2
Квери которая выберет колонку должна быть(немного абстрактно smile) : select * from test2 where id="DBGridEh.selected.id"

2.  как обрабатывать исключения о любых ошибках связанных с запросами.
3. у меня есть поле imageurl, она указывает на картинку в интернете, как лучше загрузить эту картинку и отобразить в базе? или проще в Image, рядом с панелью? делать это когда пользователь кликает на любом Row.

4. как лучше и быстрее всего записывать информацию в базутаблицу используя эти компоненты? Например прикрепленные SQL файлы содержат квери для создания таблицы и наполнения. Просто в UniQuery загружаю ее и все? А как получать лог выполненного действия? Ошибки записи и\или выборки.

5. как получить в TreeView все базы и таблицы? 

Хотелось бы еще услышать наставления smile  Может я немого не тем путем иду? Какие то подводные камни есть? Как Вы считате? Хочется увидеть толковые примеры.




Это сообщение отредактировал(а) KAMIKAZE - 8.2.2011, 01:28

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  SQL.rar 712,95 Kb
PM MAIL   Вверх
superVad
Дата 7.2.2011, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



Задавай лучше вопросы по одному. А то их тут много и почти все заданы не корректно. Как то колупаться в этом потоке сознания не хочется.
PM MAIL   Вверх
KAMIKAZE
Дата 7.2.2011, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Я не знаю как перефразировать smile  Вроде бы по одному разделил вопросы. Один вопрос по TRowDetailPanelEh, другой по исключениям, третий по загрузке изображения ну и т.д.  По вложениям видно что у меня получилось и о чем задаю вопросы.
PM MAIL   Вверх
superVad
Дата 7.2.2011, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



KAMIKAZE, ну для начала ты очень вольно используешь слово "база". В первом вопросе, скорее всего, имеется ввиду таблица, в третьем - грид, в последнем вообще не понятно, что ты кроме таблиц еще собираешься отображать в дереве.
Под разделить я имел ввиду - по теме на каждый вопрос. Чего то мне кажется, что всем так будет удобнее.

Тут такая ссылка вверху раздела есть - лишним не будет почитать.

Это сообщение отредактировал(а) superVad - 7.2.2011, 23:15
PM MAIL   Вверх
KAMIKAZE
Дата 8.2.2011, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Кажется все правильно, в 4-м вопросе только исправил слову базу на таблицу, но и так понятно.... 

Вот как нужно сделать ( это вопрос №5) 


user posted image


Это сообщение отредактировал(а) KAMIKAZE - 8.2.2011, 01:31
PM MAIL   Вверх
Vas
Дата 8.2.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



1. select * from test2 where id=:ID
свойство MasterSource:= датасурс первого датасета. Все само будет связываться

2. try
except
end;

3. Загрузить в БД, url может быть недоступным. А как отобразить из базы, посмотри примеры, в папке дельфи/Demos есть аналогичное

4. Для скриптов создания таблиц и запихивания в БД лучше использовать соответствующий компонент UniScript, посмотри есть такой или нет, у меня в ODAC есть (производитель тот же, только компоненты не универсальные)

5. Ну это целая история. Читаешь БД, запихиваешь в TreeView и ChildNode им пустые создаешь, чтобы можно было ветвь открыть, затем при открытии (Expanding) читаешь соответствующие ресурсы и аналогично добавляешь, только уже к ветке выделенной, соответственно пустую ветвь сразу надо удалить. С уровнями придется определиться заранее.

Добавлено через 2 минуты и 39 секунд
Да, кстати, один вопрос - одна тема. Так ща запутаемся на что отвечали, на что нет.

Это сообщение отредактировал(а) Vas - 8.2.2011, 16:14


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
KAMIKAZE
Дата 14.2.2011, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



1. Немного не понял. Получилось сделать  select * from test2 where id=:ID, только немного глючит, не сразу понимает. Я обрабатываю метод "DBGridEh1CellClick" 
В нем ставлю переменную ID=Column.Field.AsString; Далее  DBGridEh1RowDetailPanelShow  формирует квери используя переменную ID. Но метод DBGridEh1CellClick не обрабатывается сразу на клике по +. Как его обработать то, клик на "+"?   (что получилось прикрепил)
А вот "MasterSource:= датасурс первого датасета"   это как сделать не понятно.

2. Решен  smile 
3. Решен.
4. Решен.
5. Как считать БД? Получить список баз и таблиц в них?


з.ы. у меня столько мелких вопросов, что на каждый тему создавать... smile 



Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  DbTester.rar 770,10 Kb
PM MAIL   Вверх
Vas
Дата 15.2.2011, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(KAMIKAZE @  14.2.2011,  22:37 Найти цитируемый пост)
1. Немного не понял. Получилось сделать  select * from test2 where id=:ID, только немного глючит, не сразу понимает. Я обрабатываю метод "DBGridEh1CellClick" 
В нем ставлю переменную ID=Column.Field.AsString; Далее  DBGridEh1RowDetailPanelShow  формирует квери используя переменную ID. Но метод DBGridEh1CellClick не обрабатывается сразу на клике по +. Как его обработать то, клик на "+"?   (что получилось прикрепил)
А вот "MasterSource:= датасурс первого датасета"   это как сделать не понятно.

Чего не понятного то? ДБГрид у тебя связан с DataSource1, а тот в свою очередь с UniQuery1. С запросом типа
Код

select id, name from table1

На RowPanel датагрида вешаем еще один грид и кидаем на форму DataSource2 и UniQuery2, связываем их с ДБГридом вторым, пишем запрос типа
Код

select * from table2 where id_из_табла1=:ID

И свойству UniQuery2.MasterSource:=DataSource1;
Ну и открываем их оба, больше ничего обрабатывать не надо, при изменении положения курсора в 1 таблице, вторая будет автоматом показывать подчиненные ей записи

Цитата(KAMIKAZE @  14.2.2011,  22:37 Найти цитируемый пост)
5. Как считать БД? Получить список баз и таблиц в них?

Ну, а это смотря какая БД. Читай доки на нее и выполняй запросы.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
KAMIKAZE
Дата 15.2.2011, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Цитата(Vas @  15.2.2011,  08:40 Найти цитируемый пост)
Чего не понятного то? ДБГрид у тебя связан с DataSource1, а тот в свою очередь с UniQuery1. С запросом типа

Да.


Цитата(Vas @  15.2.2011,  08:40 Найти цитируемый пост)
На RowPanel датагрида вешаем еще один грид и кидаем на форму DataSource2 и UniQuery2, связываем их с ДБГридом вторым, пишем запрос типа

Так и сделано. А куда писать запрос? На каком событии? 

Цитата(Vas @  15.2.2011,  08:40 Найти цитируемый пост)
И свойству UniQuery2.MasterSource:=DataSource1;

ТОже непонятно на каком событии, и потом назад ставить нужно?

PM MAIL   Вверх
KAMIKAZE
Дата 15.2.2011, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



А нету готового примера для построения дерева баз и таблиц?
PM MAIL   Вверх
Vas
Дата 16.2.2011, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(KAMIKAZE @  15.2.2011,  23:17 Найти цитируемый пост)
Так и сделано. А куда писать запрос? На каком событии? 

Ни на каком событии, запрос пишешь в свойстве SQL компонента UniQuery1 и UniQuery2.

Цитата(KAMIKAZE @  15.2.2011,  23:17 Найти цитируемый пост)
ТОже непонятно на каком событии, и потом назад ставить нужно?

Связываем в дизайн-тайм в инспекторе объектов.

Единственное условие - это при показе формы или в дизайнере надо открыть оба набора данных и все должно само связаться. А ну еще в первом запросе должно быть поле с именем параметра второго запроса, смотри мой предыдущий пост, там в первом запросе явно выбрано поле ID, а во втором параметр с таким же именем.

Цитата(KAMIKAZE @  15.2.2011,  23:33 Найти цитируемый пост)
А нету готового примера для построения дерева баз и таблиц? 

Примера нет, ищи в инете, в частности основы вот
Для мускуля выбор всех БД
Код

show databases

Выбор всех таблиц
Код

show tables



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
KAMIKAZE
Дата 16.2.2011, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Цитата(Vas @  16.2.2011,  08:59 Найти цитируемый пост)
Единственное условие - это при показе формы или в дизайнере надо открыть оба набора данных и все должно само связаться. А ну еще в первом запросе должно быть поле с именем параметра второго запроса, смотри мой предыдущий пост, там в первом запросе явно выбрано поле ID, а во втором параметр с таким же именем.


т.е. квери будет такая(я еще не работе, не могу проверить, вечером помучаю  smile ) 

Код

select * from table2 where table1.id????   // не понятно)


Квери ведь должна быть сформирована с проверкой на полей айди, текущей выделенной, мне не понятно какого она рода должна быть.

Может я не правильно спросил насчет дерева таблиц. Мне нужно сделать копию функционала как в SQLYog т.е. при подключении в любому серверу(либо MySQL либо MSSQL), у меня отображаются все базы. Ну это делается запросом  
Код

show databases

 а вот далее как пройтись по этому списку и сделать выборку таблиц? затем полей. И так для MySQL либо MSSQL в зависимости от текущего подключения. Очень странно, что нету готового компонента, например от UniDAC, придется что ли изобретать велосипед.

Это сообщение отредактировал(а) KAMIKAZE - 16.2.2011, 16:02
PM MAIL   Вверх
Vas
Дата 16.2.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Читай книги, в разделе по работе с БД есть примеры связывания таблиц, аналогично вяжутся и запросы.

Для каждой БД свой синтаксис запросов для получения БД, таблиц, я привел для MySQL. MSSQL я не знаю


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
KAMIKAZE
Дата 17.2.2011, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Все равно не понятно какую квери написать. Можешь пожалуйста на примере что я приатачил в постах выше написать как надо. 

И вот можно для MySQL использовать код 
Код

SHOW DATABASES;
SHOW TABLES IN <databasename>
USE <databasename>; EXPLAIN tablename;


А как получать результаты его выполнения? Например даже я делаю запрос выборки всех полей, то как его считать, результат запроса?
Можно с  помощью DBGridEh1 сделать такую деревовидную структуру, ну как в sqlyog? 


Это сообщение отредактировал(а) KAMIKAZE - 17.2.2011, 01:09
PM MAIL   Вверх
Vas
Дата 17.2.2011, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(KAMIKAZE @  17.2.2011,  00:03 Найти цитируемый пост)
Можешь пожалуйста на примере что я приатачил в постах выше написать как надо.

Не могу, у меня нет компонентов UniDac.
Прежде чем показать таблицы БД, надо выбрать БД в MySQL, т.е. выполнить запрос
Код

use имя_базы_данных;


Ну когда запрос открыт перемещаешься по строкам выборки и добавляешь данные в TreeView. И добавляешь фиктивную пустую ветвь. Затем, когда пользователь тыркает + на раскрытие ветви выполняешь запрос на выбор БД, удаляешь пустую ветвь у выбранной, потом выполянешь запрос на выбор таблиц
Код

show tables;

И строишь подчиненную ветвь. 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.