|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
blob IBDATASET в IBSQL
Здравствуйте
столкнулся с проблемой следующего типа. Данные из таблицы просматриваю в длинной транзакции для чтения через IBDataSet а для редактирования, записи и удаления использую IBSQL в пишущей транзакции. В табле есть Blob (тип текст win1251) поле которое просматриваю через DBMEMO. При сохранении данных в базу использую следующую процу: Код:
dm.IBSQLTemp.SQL.Clear; if DM.IBDataSetNP.State in [dsInsert] then DM.IBSQLTemp.SQL.Text := DM.IBDataSetNP.InsertSQL.Text; if DM.IBDataSetNP.State in [dsEdit] then DM.IBSQLTemp.SQL.Text := DM.IBDataSetNP.ModifySQL.Text; try DM.IBTranExecute.StartTransaction; DM.IBSQLTemp.ParamByName('CITY').AsString := DM.IBDataSetNPCITY.AsString; ....... DM.IBSQLTemp.ParamByName('OPISANIE').Value := DM.IBDataSetNPOPISANIE.Value; ...... DM.IBSQLTemp.ParamByName('OLD_CODNASPUNKT').AsString := DM.IBDataSetNPCODNASPUNKT.AsString; DM.IBDataSetNP.Cancel; DM.IBSQLTemp.ExecQuery; DM.IBTranExecute.Commit; DM.IBDataSetNP.Refresh; except ShowMessage('Операция не произведена'); end; Пмогите пожалста мудрыми советами |
#2
|
|||
|
|||
пробовал сделать это через поток но IBSQL не имеет метода CreateBlobStream в отличии от IBQuery и ibDataset
самый простотй вариант заменить IBSQL на другой компонент, но будет ли данное решение оптимальным??? буду рад услышать любые варианты решения данного вопроса |
#3
|
|||
|
|||
А у тебя какая кодовая страница на этом поле стоит в БД? Хотя это не должно играть особой роли.
Вот только непонятно, зачем так все сложно? Любое BLOB поле можно откастить к TBlobField, у которого есть метод LoadFromStream. Это раз. Два. Возьми нормальный датасет и напиши к нему запросы управления данными (UpdateSQL, InsertSQL и т.д.). И он сам прекрасно будет работать с такими полями без твоего вмегшательства. |
#4
|
|||
|
|||
Цитата:
Спасиб за совет толькочто дошел до него сам : (Delphi 2010) var s : TIBDSBlobStream; ............. s := DM.IBDataSetNP.CreateBlobStream(DM.IBDataSetNP.Fie ldByName('OPISANIE'), bmRead)as TIBDSBlobStream; DM.IBSQLTemp.ParamByName('OPISANIE').LoadFromStrea m(s); ............. Цитата:
а с Dataset ом конечно проще но приложение многопользовательское и транзакции должны биться на длинные и коротки. запросы управления данными (UpdateSQL, InsertSQL и т.д.). я в смотрящем датасете сделал и передаю их в ibsql по мере надобности. както так если есть предложения по усовершенствованию этой схему буду рад услышать |