Интерфейс с memo-полями
Модераторы: m0p3e, edward_K, Модераторы
Re: Интерфейс с memo-полями
Den, по вариантам 1 и 2 отрабатывает минуту где-то. Без attrval за 3-4 сек. Короче, пробую делать времянку для attrval.
Не по теме: плюсую тебе, а счетчик не увеличивается. Сообщение валит: "You must spread your reputation point to other users before giving to the same user." Это так и надо??
			
			
									
						
										
						Не по теме: плюсую тебе, а счетчик не увеличивается. Сообщение валит: "You must spread your reputation point to other users before giving to the same user." Это так и надо??
Re: Интерфейс с memo-полями
Добавил вторую временную таблицу по attrval, но кидает ошибку при компиляции "Нет такой функции, поля или метода : TATTRVAL.VLVAR"
			
			
									
						
										
						Код: Выделить всё
// http://forum.galaktika.by
Interface SelectMemo, doaccept;
	show at (6,6,65,20)
	var
	cnRec   : comp;
	table struct tbasedoc
		(
			nrec : comp,
			ddoc : date,
			nodoc : string
		);
	table struct tattrval
		(
			nrec : comp,
			crec : comp,
			wtable : word,
			vlvar : lvar
		);
	create view
	as select *
	from tbasedoc, tattrval, ttndoc
	where
	((
		comp(tBaseDoc.Nrec) == TTNDOC.CDOC
		and word(1102) == ttndoc.wtable
		and ttndoc.nrec == tattrval.CREC
		and word(1150) == tattrval.wtable
	));
	parameters cnRec;
	browse brSelPers;
		show at (,,,10);
		table tbasedoc;
		fields
		tBasedoc.ddoc  'Дата документа' : [15], protect;
		tBasedoc.nodoc  'Номер документа': [15], protect;
	end;
	panel panText;
		show at (,11,,);
		table tattrval;
		Text memoid=memo1 tattrval.vlvar 'Мемо-поле';
	end;
handleevent
	cmInit:
	{
		SQL select attrval.nrec, attrval.crec, attrval.wtable, attrval.vlvar
		from attrval
		where
		attrval.cattrnam = comp('281474976711112')
		into tattrval
		SQL select basedoc.nrec, basedoc.ddoc, basedoc.nodoc
		from basedoc
		inner join ttndoc on (BaseDoc.Nrec = TTNDOC.CDOC) and ttndoc.wtable=1102
		inner join tattrval on ttndoc.nrec = tattrval.CREC// and attrval.cattrnam = comp('281474976711112')
		order by basedoc.ddoc
		INTO tbasedoc
		}
	end;
End.
- 
				Den
- Местный житель
- Сообщения: 1847
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL" и там "временные пользовательские таблицы в прямом sql"
			
			
									
						
										
						Re: Интерфейс с memo-полями
Документацию-то я читал, но на примерах все понятнее гораздо...
			
			
									
						
										
						Re: Интерфейс с memo-полями
Во временную таблицу нельзя вставлять мемо-поля...
Сделал так и все равно минуту открывает и в итоге ничего не выводит:
			
			
									
						
										
						Сделал так и все равно минуту открывает и в итоге ничего не выводит:
Код: Выделить всё
Interface SelectMemo 'Особые заявления отправителя', doaccept;
	show at (6,6,65,20)
	var
	cnRec   : comp;
	stmt, astmt : longint;
	table struct tbasedoc
		(
			nrec : comp,
			ddoc : date,
			nodoc : string
		)
		with index (n = nrec);
	table struct tattrval
		(
			nrec : comp,
			crec : comp
		)
		with index (c = crec);
	create view
	as select *
	from tbasedoc, tattrval, attrval, ttndoc
	where
	((
		comp(tBaseDoc.Nrec) == TTNDOC.CDOC
		and word(1102) == ttndoc.wtable
		and ttndoc.nrec == tattrval.CREC
		and tattrval.nrec == attrval.nrec
	));
	parameters cnRec;
	browse brSelPers;
		show at (,,,10);
		table tbasedoc;
		fields
		tBasedoc.ddoc  'Дата документа' : [15], protect;
		tBasedoc.nodoc  'Номер документа': [15], protect;
	end;
	panel panText;
		show at (,11,,);
		table attrval;
		Text memoid=memo1 attrval.vlvar 'Мемо-поле';
	end;
handleevent
	cmInit:
	{
		 stmt := sqlAllocStmt;
		  //Создаем ВТ
		  sqlCreateTmpTable('Table tattrval (nrec : comp, crec : comp);', ctmNormal);
		  //Заполняем ВТ
		  sqlExecStmt(stmt,'select attrval.nrec, attrval.crec from attrval where attrval.cattrnam = comp(''281474976711112'')');
		  sqlFetchInto(stmt, tntattrval);
		  sqlFreeStmt(stmt);
		 stmt := sqlAllocStmt;
		  //Создаем ВТ
		  sqlCreateTmpTable('Table tbasedoc (nrec : comp, ddoc : date, nodoc : string);', ctmNormal);
		  //Заполняем ВТ
		  sqlExecStmt(stmt,'select basedoc.nrec, basedoc.ddoc, basedoc.nodoc from basedoc inner join ttndoc on (BaseDoc.Nrec = TTNDOC.CDOC) and ttndoc.wtable=1102 inner join tattrval on ttndoc.nrec = tattrval.CREC');
		  sqlFetchInto(stmt, tntbasedoc);
		  sqlFreeStmt(stmt);
		}
end;
End.
Re: Интерфейс с memo-полями
По ходу никак не ускорить, attrval слишком большая таблица...  Печаль...
  Печаль...
			
			
									
						
										
						 Печаль...
  Печаль...- 
				Den
- Местный житель
- Сообщения: 1847
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
Ну если запускать вот это :
select attrval.nrec, attrval.crec from attrval where attrval.cattrnam = comp(''281474976711112'')
на самом инструментарии сервера и долго выполняется такой запрос - то да..галактика тут не причем точно..
			
			
									
						
										
						select attrval.nrec, attrval.crec from attrval where attrval.cattrnam = comp(''281474976711112'')
на самом инструментарии сервера и долго выполняется такой запрос - то да..галактика тут не причем точно..
Re: Интерфейс с memo-полями
Den писал(а):Ну если запускать вот это :
select attrval.nrec, attrval.crec from attrval where attrval.cattrnam = comp(''281474976711112'')
на самом инструментарии сервера и долго выполняется такой запрос - то да..галактика тут не причем точно..
Саппортом выполняется запрос такой мгновенно, а если в девелопере оракловом к базе выполнять такой селект, то минуту где-то отрабатывает....
Как так???
Re: Интерфейс с memo-полями
Все-таки разобрался!!!  Оказывается в запрос надо добавлять и таблицу attrnam, т.е. выгрузка во временную таблицу будет выглядеть так
 Оказывается в запрос надо добавлять и таблицу attrnam, т.е. выгрузка во временную таблицу будет выглядеть так
select basedoc.nrec, basedoc.ddoc, basedoc.nodoc from basedoc, ttndoc, attrval, attrnam where BaseDoc.Nrec = TTNDOC.CDOC and ttndoc.wtable=1102 and ttndoc.nrec = attrval.CREC and attrval.cattrnam = attrnam.nrec and attrnam.nrec = comp('281474976711112')
Исходник всего интерфейса:
			
			
									
						
										
						 Оказывается в запрос надо добавлять и таблицу attrnam, т.е. выгрузка во временную таблицу будет выглядеть так
 Оказывается в запрос надо добавлять и таблицу attrnam, т.е. выгрузка во временную таблицу будет выглядеть такselect basedoc.nrec, basedoc.ddoc, basedoc.nodoc from basedoc, ttndoc, attrval, attrnam where BaseDoc.Nrec = TTNDOC.CDOC and ttndoc.wtable=1102 and ttndoc.nrec = attrval.CREC and attrval.cattrnam = attrnam.nrec and attrnam.nrec = comp('281474976711112')
Исходник всего интерфейса:
Код: Выделить всё
Interface SelectMemo 'Особые заявления отправителя', doaccept;
	show at (6,6,65,20)
	var
	cnRec   : comp;
	stmt, astmt : longint;
	table struct tbasedoc
		(
			nrec : comp,
			ddoc : date,
			nodoc : string
		)
		with index (n = nrec);
	create view
	as select *
	from tbasedoc, attrval, ttndoc
	where
	((
		comp(tBaseDoc.Nrec) == TTNDOC.CDOC
		and word(1102) == ttndoc.wtable
		and word(1150) == attrval.wtable
		and ttndoc.nrec == attrval.CREC
		and word(1150) == attrval.wtable
		and '281474976711112'  == attrval.cattrnam
	));
	parameters cnRec;
	browse brSelPers;
		show at (,,,10);
		table tbasedoc;
		fields
		tBasedoc.ddoc  'Дата документа' : [15], protect;
		tBasedoc.nodoc  'Номер документа': [15], protect;
	end;
	panel panText;
		show at (,11,,);
		table attrval;
		Text memoid=memo1 attrval.vlvar 'Мемо-поле';
	end;
handleevent
	cmInit:
	{
		 stmt := sqlAllocStmt;
		  //Создаем ВТ
		  sqlCreateTmpTable('Table tbasedoc (nrec : comp, ddoc : date, nodoc : string);', ctmNormal);
		  //Заполняем ВТ
		  sqlExecStmt(stmt,'select basedoc.nrec, basedoc.ddoc, basedoc.nodoc from basedoc, ttndoc, attrval, attrnam where BaseDoc.Nrec = TTNDOC.CDOC and ttndoc.wtable=1102 and ttndoc.nrec = attrval.CREC and attrval.cattrnam = attrnam.nrec and attrnam.nrec = comp(''281474976711112'')');
		  //Читаем ВТ
		  sqlFetchInto(stmt, tntbasedoc);
		  sqlFreeStmt(stmt);
	}
end;
End.
Re: Интерфейс с memo-полями
Den, если в курсе... Плюсую тебе, а счетчик не увеличивается.. Неудобно  Хочу отблагодарить, а не получается...
 Хочу отблагодарить, а не получается...
			
			
									
						
										
						 Хочу отблагодарить, а не получается...
 Хочу отблагодарить, а не получается...Re: Интерфейс с memo-полями
Эпопея с мемо-полями продолжается.... Каким образом можно апдейтить мемо-поля? ExportMemoToFile, а потом ImportFileToMemo???
			
			
									
						
										
						Re: Интерфейс с memo-полями
Пользуйтесь методами и функциями объекта File.
Открываете мемо-поле как файл с помощью OpenMemo и вперед (Read, ReadLn, Write, WriteLn). Посмотрите в хелпе - там есть примеры.
			
			
									
						
										
						Открываете мемо-поле как файл с помощью OpenMemo и вперед (Read, ReadLn, Write, WriteLn). Посмотрите в хелпе - там есть примеры.
Re: Интерфейс с memo-полями
Это функции записывают данные мемо-поля в файл, а мне надо обратное сделать - из файла в мемо записать...Starry писал(а):Пользуйтесь методами и функциями объекта File.
Открываете мемо-поле как файл с помощью OpenMemo и вперед (Read, ReadLn, Write, WriteLn). Посмотрите в хелпе - там есть примеры.
- 
				Den
- Местный житель
- Сообщения: 1847
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
есть такая штука как поиск по форуму...или Вы ему не доверяете ? (как и хэлпу....)
			
			
									
						
										
						Re: Интерфейс с memo-полями
Вот, поискал для вас. А в хелпе еще подробнее есть.
http://www.tyumbit.ru/gal_forum/viewtop ... t=openmemo
			
			
									
						
										
						http://www.tyumbit.ru/gal_forum/viewtop ... t=openmemo