Страница 3 из 4

Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 12:08
Руслан
Den, по вариантам 1 и 2 отрабатывает минуту где-то. Без attrval за 3-4 сек. Короче, пробую делать времянку для attrval.
Не по теме: плюсую тебе, а счетчик не увеличивается. Сообщение валит: "You must spread your reputation point to other users before giving to the same user." Это так и надо??

Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 12:54
Руслан
Добавил вторую временную таблицу по 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.


Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 13:44
Den
см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL" и там "временные пользовательские таблицы в прямом sql"

Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 16:23
Руслан
Документацию-то я читал, но на примерах все понятнее гораздо...

Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 19:26
Руслан
Во временную таблицу нельзя вставлять мемо-поля...
Сделал так и все равно минуту открывает и в итоге ничего не выводит:

Код: Выделить всё

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-полями

Добавлено: 24 окт 2012, 20:09
Руслан
По ходу никак не ускорить, attrval слишком большая таблица... :sad: Печаль...

Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 20:16
Den
Ну если запускать вот это :

select attrval.nrec, attrval.crec from attrval where attrval.cattrnam = comp(''281474976711112'')

на самом инструментарии сервера и долго выполняется такой запрос - то да..галактика тут не причем точно..

Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 21:44
Руслан
Den писал(а):Ну если запускать вот это :

select attrval.nrec, attrval.crec from attrval where attrval.cattrnam = comp(''281474976711112'')

на самом инструментарии сервера и долго выполняется такой запрос - то да..галактика тут не причем точно..

Саппортом выполняется запрос такой мгновенно, а если в девелопере оракловом к базе выполнять такой селект, то минуту где-то отрабатывает....
Как так???

Re: Интерфейс с memo-полями

Добавлено: 24 окт 2012, 23:44
Руслан
Все-таки разобрался!!! :smile: Оказывается в запрос надо добавлять и таблицу 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-полями

Добавлено: 24 окт 2012, 23:46
Руслан
Den, если в курсе... Плюсую тебе, а счетчик не увеличивается.. Неудобно :oops: Хочу отблагодарить, а не получается...

Re: Интерфейс с memo-полями

Добавлено: 26 окт 2012, 11:06
Руслан
Эпопея с мемо-полями продолжается.... Каким образом можно апдейтить мемо-поля? ExportMemoToFile, а потом ImportFileToMemo???

Re: Интерфейс с memo-полями

Добавлено: 26 окт 2012, 12:17
Starry
Пользуйтесь методами и функциями объекта File.
Открываете мемо-поле как файл с помощью OpenMemo и вперед (Read, ReadLn, Write, WriteLn). Посмотрите в хелпе - там есть примеры.

Re: Интерфейс с memo-полями

Добавлено: 26 окт 2012, 14:00
Руслан
Starry писал(а):Пользуйтесь методами и функциями объекта File.
Открываете мемо-поле как файл с помощью OpenMemo и вперед (Read, ReadLn, Write, WriteLn). Посмотрите в хелпе - там есть примеры.
Это функции записывают данные мемо-поля в файл, а мне надо обратное сделать - из файла в мемо записать...

Re: Интерфейс с memo-полями

Добавлено: 26 окт 2012, 14:23
Den
есть такая штука как поиск по форуму...или Вы ему не доверяете ? (как и хэлпу....)

Re: Интерфейс с memo-полями

Добавлено: 26 окт 2012, 15:14
Starry
Вот, поискал для вас. А в хелпе еще подробнее есть.
http://www.tyumbit.ru/gal_forum/viewtop ... t=openmemo