Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Flash Builder + PHP (http://www.flasher.ru/forum/showthread.php?t=149088)

sdsfy 19.01.2011 06:38

Flash Builder + PHP
 
Приветствую коллеги!

На PHP имеется скрипт, достающий все поля из некоторой таблицы в Firebird 2.0, в которой есть кроме трех Int, VarChar и TimeStamp полей, поле BLOB.

На Flash Builder сервис цепляется нормально и публикует абсолютно все данные, кроме BLOB поля, в котором содержится обычный многострочный текст.

К стандартному DataGrid отображающему записи из таблицы прицеплена mx:Form, в которую включена

Цитата:

<mx:FormItem label="Комментарий">
<s:TextArea text="{aDeviceClasses.COMMENT}"/>
</mx:FormItem>
s:TextArea выводит не текст, а какое-то Hex число, которое, судя по всему, является каким-то указателем на поле, или что-то вроде того.
Помогите пожалуйста извлечь из BLOB поля многострочный текст. Буду так же благодарен, если скажете как его обратно передать, если конечно есть тонкости и отличия от процесса извлечения.

Заранее спасибо!

MainCraft 19.01.2011 10:49

Я мало что ещё понимаю в Flex-e, но мне кажется в вашем случае удобнее было бы удобнее заранее подготовить данные на стороне PHP.

sdsfy 19.01.2011 15:52

Цитата:

Сообщение от MainCraft (Сообщение 965752)
Я мало что ещё понимаю в Flex-e, но мне кажется в вашем случае удобнее было бы удобнее заранее подготовить данные на стороне PHP.

Вот встает вопрос - как их правильно подготовить? Я понимаю, что поле BLOB надо через поток читать. Т.е. создавать потоковый буффер, указатель на этот буффер как-то сообщить Flex-у, а там правильно загрузить поток в компонент.

Вопрос в том - КАК?


По крайней мере в случае с текстом в Firebird/Borland Interbase, решение нашлось: оно и лежало в описании PHP.

Для чтения BLOB поля
PHP код:

$res ibase_execute($stmt);
                
$this->throwExceptionOnError();    
                
                
$rows = array();
                
                
                while (
$row ibase_fetch_object($res)) {
                
                    
//Getting end recoding BLOB
                    
if(sizeof($row->COMMENT)){
                        
                        
$blobinfo ibase_blob_info($row->COMMENT); 
                        
$blobhandle ibase_blob_open($row->COMMENT);
                        
$commentblob NULL;
                        for(
$i 0$i $blobinfo[1]; $i++){
                            
$readsize $blobinfo[2];
                            if(
$i == ($blobinfo[1] - 1)){
                                
$readsize $blobinfo[0] - (($blobinfo[1] - 1) * $blobinfo[2]);
                            }
                            
$commentblob .= ibase_blob_get($blobhandle$readsize);
                        }
                        
ibase_blob_close($blobhandle);
                        
$row->COMMENT = ($commentblob);
                    }
                    
$rows[] = $row;
                }
                
ibase_free_query($stmt);
                
$this->Disconnect();
                return 
$rows;        
        } 

Flash Builder на своем уровне поле COMMENT распознает как текстовое. Совершенно спокойно отображает в соответствующем компоненте.

Для записи (Insert, Update):

PHP код:

                $blh ibase_blob_create($this->connection);
                
ibase_blob_add($blh$item->COMMENT);
                
$blobid ibase_blob_close($blh);

                
$res ibase_execute($stmt$item->CLASSNAME$blobid); 



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

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