Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Коннект к Oracle из Flex (http://www.flasher.ru/forum/showthread.php?t=121562)

BeautifulGirl 18.02.2009 12:11

Коннект к Oracle из Flex
 
Доброе утро!

Есть приложение, созданное на Flex Builder. Необходимо из него законнектиться к Oracle, передать туда SQL и соответственно вернуть из Oracle некий DataSet для отображения его в Flex - приложении.

Пока нашла только "кривое" решение: из Flex дергать сервис, который весь результат выполнения SQL запихивает в XML-файл. А Flex уже отображает данные из этого файла (при каждом новом запросе файл будет заменяться). Но это решение не подходит по той причине, что данных может быть ОЧЕНЬ много и на формирование такого файла и соответствующее его отображение уйдет слишком много времени.

Должна же быть возможность сделать это как-то проще. Никто не сталкивался с этим?

GBee 18.02.2009 12:17

Есть вариант, не слать сразу ОЧЕНЬ много данных. По-моемсу это вопрос не совсем по флексу.

ЗЫ А что хмл-файл так и сохраняется где-то на сервере, а потом его забирает флекс?

Bruiser 18.02.2009 12:43

Формируешь запрос к серверу (java, php), на сервере обрабатываешь запрос, формируешь строку в виде xml, отсылаешь ответом. Во flex, получим xml, присваиваешь dataProvider-у DataGrid-а.
Код:

private var myXML:XML = new XML();
private var XML_URL:String = "http://localhost:8080/project/Servlet";
private var urlReq:URLRequest = null;
private var myLoader:URLLoader = null;       

private function getRequest():void{
  urlReq = new URLRequest(XML_URL);
  urlReq.data = urlMap.toVariables();                       
  urlReq.method = URLRequestMethod.POST;
  myLoader = new URLLoader(urlReq);
  myLoader.addEventListener(Event.COMPLETE,getMetaDataOk);
  myLoader.load(urlReq);
}
               
private function getMetaDataOk(event:Event):void{       
  myXML = XML(myLoader.data);       
  // ЗАПОЛНЕНИЕ DATAPROVIDER
}

Если у вас слишком много данных, тогда стоит выгружать меньшее количество данных на уровне базы.

Foli 18.02.2009 14:07

Самое простое и удобное решение работать через RemoteObject :umnik2:
XML отпадает в этом случае. Как уже тут написал Bruiser, для работы с БД нужно всю бизнеслогику по работе с БД выносить на сервер. Серверная часть может быть написана на чём угодно.

Цитата:

Сообщение от Bruiser
Если у вас слишком много данных, тогда стоит выгружать меньшее количество данных на уровне базы.

Совершенно верно. Советую добавить пейджинг к DataGrid'у и порезать сумму записей в таблице на страницы, к примеру по 20 записей. :umnik2:

BeautifulGirl 18.02.2009 14:14

Я только начинаю изучать Flex, до этого интерфейс делали другими средствами. До последнего надеялась, что у Flex есть какое-нибудь встроенное визуальное средство для работы с БД, как у того же C++ Builder или .NET хотя бы... Эх :(

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

Bruiser 18.02.2009 15:20

Flex - это все-таки среда для разработки интерфейса, а не бизнес-логики.

Foli 18.02.2009 15:42

Цитата:

Сообщение от BeautifulGirl
Я только начинаю изучать Flex, до этого интерфейс делали другими средствами. До последнего надеялась, что у Flex есть какое-нибудь встроенное визуальное средство для работы с БД, как у того же C++ Builder или .NET хотя бы... Эх :(

Всё очень просто. Не вижу повода для паники :umnik2:
Нужно понять два момента:

1)
ClientSide - это всё, что у клиента будет. В данном случае это- Flash

2)
ServerSide - это, если нужно работать с БД, посылать почту, обрабатывать большие массивы данных, работать с сенсорами и так далее. Реализацию этих задач выполняют с помощью языков, которые это позволяют. Если нужно использовать .NET фреймвёрк, значит устанавливаем MVS2008 (к примеру) и пишем всё с комфортом. Всё, что будет написано потом вызывается из Flash приложения.

Цитата:

Сообщение от BeautifulGirl
Пейджинг, я так понимаю, надо делать самим? Никаких встроенных средств у DataGrid нет?

Совершенно верно. Это просто несколько кнопок по событию которых вы вызываете функцию (написанную к примеру на .NET фреймвёрке) на сервере. Вам вернётся результат для отображения в DataGrid.

Надеюсь, поможет. :umnik2:

Ales Protiv 18.02.2009 16:29

Я уже писал BeautifulGirl, на другом форуме...
Имхо, самый простой способ - это напрямую обращаться к Oracle либо через HTTP сервис, либо через Apex. Решение будет зависить от требований безопасности.

Есть еще всякие livecycle data services, но для этого понадобится сервер приложения. Если же промежуточное звено - не проблема, то реализуйте его на том, на чем вам удобнее - .NET тот же вполне подходит.

По поводу "очень много данных": как правило клиентское приложение не требует большого количества данных. Т.е. пользователь не в состоянии визуально переварить больше чем 20 записей допустим. Поэтому приложение нужно проектировать так, чтобы не гонять между базой и приложениям мегабайты холостой информации.

Добавлено через 49 часов 40 минут
Написал пример http://alp-it.ru/2009/02/simple-oracle-flex-connecting/
Удачи!


Часовой пояс GMT +4, время: 18:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.