Поиск:

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


Шустрый
*


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

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



Цитата(Vas @  17.2.2011,  08:09 Найти цитируемый пост)
Ну когда запрос открыт перемещаешься по строкам выборки и добавляешь данные в TreeView.


Цитата(KAMIKAZE)

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

Цитата(Vas @  17.2.2011,  08:09 Найти цитируемый пост)
Не могу, у меня нет компонентов UniDac.

Я конечно не могу просить их поставить  smile  но ведь это не трудно. smile 
PM MAIL   Вверх
Vas
Дата 17.2.2011, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



KAMIKAZE, ты издеваешься, хоть бы выложил свои варианты, а то может ты и не пробуешь ничего делать. 
Да если не знаешь как по строкам выборки бегать, то я бы посоветовал бросить писать такие проги, как ты задумал, еще и с коннектом к разным БД. Запросы для получения таблиц, БД, и всего прочего у них абсолютно разные. В оракуле например нет понятия БД, там есть схемы и выбираются они совсем по-другому, не так как в MySQL.
Код

Procedure TFormDevice.ExpandLevel(const Node: TTreeNode);
var TreeNode:TTreeNode;
Begin
      try
        UniQuery1.Open;
      TVOs.Items.BeginUpdate; //Отключаем прорисовку ветки
       // Для каждой строки из полученного набора данных
      // формируем ветвь в TreeView, как дочерние ветки к той,
      // которую мы только что "раскрыли"
      First; //указатель на первую запись открытого набора
      while not Eof do //пока не дошли до конца открытого набора выполняем следующий код
        begin
          // Запишем в поле Data ветки ее идентификационный номер(ID) в таблице
          TreeNode:=TVOs.Items.AddChildObject(Node,
                    UniQuery1.FieldByName('Name').AsString+' ('+UniQuery1.FieldByName('Fulladr').AsString+')', Pointer(UniQuery1.FieldByName('ID').AsInteger));

          TreeNode.ImageIndex:=190; //картинка для ветки
          TreeNode.SelectedIndex:=180; //картинка для выделенной ветки
         // Добавим фиктивную (пустую) дочернюю ветвь только для того,
         // чтобы был отрисован [+] на ветке и ее можно было бы раскрыть
          TVOs.Items.AddChildObject(TreeNode, '', nil);
          Next; //переходим на следующую запись в наборе данных
         end; //while
      TVOs.Items.EndUpdate; //включаем прорисовку ветки
      except
          ShowMessage('Блин, ошибка в 17 строке');  
      end;
End;



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


Шустрый
*


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

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



Я выложил что у меня получилось, самое последнее вложение DbTester.rar 770,10 Kb В нем не сразу обрабатывалось после открытия TRowDetailPanelEh. Дерево в нем еще не пытался делать, потому что ....

Цитата(Vas @  17.2.2011,  14:08 Найти цитируемый пост)
Да если не знаешь как по строкам выборки бегать, то я бы посоветовал бросить писать такие проги, как ты задумал

...Я вот и спрашиваю.  На яве это делается так http://www.kodejava.org/examples/280.html  А как на делфе не знаю.

Прогу делаю только для двух типов, запросы практически одинаковы, но это совсем не мешает. 

Я знаю как работать с TreeView, но как получать те самые First и Next? В этом и вопрос.   


PM MAIL   Вверх
Vas
Дата 17.2.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А причем тут Blob? 

Звиняюсь, процедура была с with переделывал уже когда вставил в форум
Код

Procedure TFormDevice.ExpandLevel(const Node: TTreeNode);
var TreeNode:TTreeNode;
Begin
      try
        UniQuery1.Open;
      TVOs.Items.BeginUpdate; //Отключаем прорисовку ветки
       // Для каждой строки из полученного набора данных
      // формируем ветвь в TreeView, как дочерние ветки к той,
      // которую мы только что "раскрыли"
      UniQuery1.First; //указатель на первую запись открытого набора
      while not Eof do //пока не дошли до конца открытого набора выполняем следующий код
        begin
          // Запишем в поле Data ветки ее идентификационный номер(ID) в таблице
          TreeNode:=TVOs.Items.AddChildObject(Node,
                    UniQuery1.FieldByName('Name').AsString+' ('+UniQuery1.FieldByName('Fulladr').AsString+')', Pointer(UniQuery1.FieldByName('ID').AsInteger));
          TreeNode.ImageIndex:=190; //картинка для ветки
          TreeNode.SelectedIndex:=180; //картинка для выделенной ветки
         // Добавим фиктивную (пустую) дочернюю ветвь только для того,
         // чтобы был отрисован [+] на ветке и ее можно было бы раскрыть
          TVOs.Items.AddChildObject(TreeNode, '', nil);
          UniQuery1.Next; //переходим на следующую запись в наборе данных
         end; //while
      TVOs.Items.EndUpdate; //включаем прорисовку ветки
      except
          ShowMessage('Блин, ошибка в 17 строке');  
      end;
End;


Здесь First и Next методы датасета.


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


Шустрый
*


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

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



Цитата(Vas @  17.2.2011,  16:05 Найти цитируемый пост)
А причем тут Blob? 

На это не обращай внимания)   просто: while (resultSet.next()) { 

Вот теперь уже понятно  smile  Спасибо попробую.
PM MAIL   Вверх
KAMIKAZE
Дата 17.2.2011, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чето не работает. Первое материться на   while not Eof do, ошибка I/O 6.  
Удалил фор, сделал просто

Код

UniQuery3.SQL.Clear;
UniQuery3.SQL.add('show databases');
UniQuery3.Open;
UniQuery3.First;
ShowMessage(UniQuery3.fieldbyname('Database').AsString);
UniQuery3.Next; //в принципе нет смысла писать)



Получаю имя первой базы. Ну а как пройтись по всем? Далее уже можно по ним делать выборки show tables in ...



PM MAIL   Вверх
Vas
Дата 18.2.2011, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

 while not UniQuery1.Eof do



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


Шустрый
*


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

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



Все получилось. 

Выборка баз: 

Код

var TreeNode:TTreeNode;
begin

UniQuery3.SQL.Clear;
UniQuery3.SQL.add('show databases');
UniQuery3.Open;
UniQuery3.First;
while not UniQuery3.Eof do begin
TreeNode:=Form1.TreeView1.Items.AddChild(nil,UniQuery3.fieldbyname('Database').AsString);
TreeNode.HasChildren:=true; // "+" в ноде
TreeNode.ImageIndex:=0;
UniQuery3.Next;
end;


Далее выборка таблиц 

Код

procedure ShowTables(DatabaseNode: TTreeNode);
var node: TTreeNode;
begin
Form1.UniQuery3.SQL.Clear;
Form1.UniQuery3.SQL.Add('show tables in '+DatabaseNode.Text);
Form1.UniQuery3.Open;
form1.UniQuery3.First;
while not form1.UniQuery3.Eof do begin
node:=Form1.TreeView1.Items.AddChild(DatabaseNode,form1.UniQuery3.fieldbyname('Tables_in_'+DatabaseNode.Text).AsString);
Form1.UniQuery3.Next;
node.ImageIndex:=1;
node.SelectedIndex:=1;
end;
end;

procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
  var AllowExpansion: Boolean);
begin
if node.ImageIndex=0 then begin
TreeView1.Items.BeginUpdate;
Node.DeleteChildren;
ShowTables(Node);
TreeView1.Items.EndUpdate;     end;

end;




p.s.  вообще можно получать список баз не думая о запросе....
Код

var i:Integer; list: TStringList;
TreeNode:TTreeNode;
begin
list:=TStringList.Create;
UniConnection1.GetDatabaseNames(list);
for i:=0 to list.Count-1 do begin
TreeNode:=Form1.TreeView1.Items.AddChild(nil,list.Strings[i]);
TreeNode.HasChildren:=true;
TreeNode.ImageIndex:=0;
end;



И почему мне никто сразу не подсказал  smile    Жаль что нет метода UniConnection1.GetTableNames(), в который необходимо передавать название базы из которой необходима выборка таблиц.




Вопрос: при просмотре различных таблиц, ширина колонок плавает, иногда они очень мелкие, иногда широкие, непонятно от чего отталкивается их ширина. Как сделать по нормальному выравнивание? 





Это сообщение отредактировал(а) KAMIKAZE - 26.2.2011, 15:17
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.1039 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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