Вход

Просмотр полной версии : Flash Builder + PHP


sdsfy
19.01.2011, 06:38
Приветствую коллеги!

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

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

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


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

Для чтения BLOB поля
$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):

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

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