Информацию (файлы) большого размера (изображения, документы, архивы) оптимально размещать в отдельном файле (например, с именем BIGCONTENT) Структура файла: При этом имя загруженного файла хранится в родительской таблице (например, поле ANAME). В описание родительского экрана вносим следующее содержание:
1. В экран добавим пустой виджет для последующего размещения в нем виджета zzContent: 2. В фрагменте SETUP вставляем виджет zzContent в экран, и загружаем данные из таблицы BIGCONTENT
mem.heap.wco=zzContent() mem.w.wco.layout().addWidget(mem.heap.wco) if mem.editMode in ["EDIT"]: mem.heap.wco.acontent=gi("bigcontent","parent_uid",mem.s.uid,"content") mem.heap.wco.setFileName(mem.s.aname) if mem.editMode in ["COPY"]: mem.heap.wco.acontent=gi("bigcontent","parent_uid",mem.t.r.uid,"content") mem.heap.wco.setFileName(mem.s.aname) mem.heap.wco.butRefresh()
3. В фрагменте VALID размещаем код для сохранения данных в таблицу BIGCONTENT.
mem.s.aname=mem.heap.wco.afile if mem.writeData(): bc=zzCursor("select 1 as bc from bigcontent where PARENT_UID=%s" % mem.s.uid).r.bc if bc=="1": uid=gi("bigcontent","parent_uid",mem.s.uid,"uid") update("bigcontent",{'CONTENT':mem.heap.wco.acontent,'UID':uid,'PARENT_UID':mem.s.uid}) else: insert("bigcontent",{'CONTENT':mem.heap.wco.acontent,'PARENT_UID':mem.s.uid}) RETURN=True
4. В фрагменте INIT размещаем код для удаления записи из BIGCONTENT при удалении родительской записи.
def afterScDelete(mem): def realDo(): zzCursor("delete from bigcontent where parent_uid=%s" % mem.t.r.uid) return realDo mem.afterScDelete=afterScDelete(mem)
5. Код для выгрузки и просмотра содержимого, вставляется в меню для родительской таблицы (mem.t.r).
if mem.t.r.aname!="": if glob.glob("temp")==[]: try: os.mkdir("temp") except: zzMess(u"Не удалось создать папку для размещения временных файлов") if glob.glob("temp")!=[]: try: up=open("temp/%s" % mem.t.r.aname, "wb") acontent=gi("bigcontent","parent_uid",mem.t.r.uid,"content") # print acontent up.write(acontent.strip().decode("hex")) up.close() try: os.startfile('temp\\%s' % mem.t.r.aname) except: zzMess(u"Не удалось запустить программу для просмотра файла %s" % mem.t.r.aname) except: zzMess(u"""Не удалось создать временный файл <b>%s</b>!!! Возможно файл с таким именем уже открыт в папке с временными файлами <b>%s\\temp</b>""" % (mem.t.r.aname,os.getcwd()))
Короткий код для выгрузки и открытия файла:
zz=zzContent() zz.acontent=gi("bigcontent","parent_uid",mem.t.r.uid,"content") zz.afile=gi("bigcontent","parent_uid",mem.t.r.uid,"aname") zz.contOpen()