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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Den, по вариантам 1 и 2 отрабатывает минуту где-то. Без attrval за 3-4 сек. Короче, пробую делать времянку для attrval.
Не по теме: плюсую тебе, а счетчик не увеличивается. Сообщение валит: "You must spread your reputation point to other users before giving to the same user." Это так и надо??
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL" и там "временные пользовательские таблицы в прямом sql"
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Документацию-то я читал, но на примерах все понятнее гораздо...
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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.
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

По ходу никак не ускорить, attrval слишком большая таблица... :sad: Печаль...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

Ну если запускать вот это :

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

на самом инструментарии сервера и долго выполняется такой запрос - то да..галактика тут не причем точно..
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Den писал(а):Ну если запускать вот это :

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

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

Саппортом выполняется запрос такой мгновенно, а если в девелопере оракловом к базе выполнять такой селект, то минуту где-то отрабатывает....
Как так???
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Все-таки разобрался!!! :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.
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Den, если в курсе... Плюсую тебе, а счетчик не увеличивается.. Неудобно :oops: Хочу отблагодарить, а не получается...
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Эпопея с мемо-полями продолжается.... Каким образом можно апдейтить мемо-поля? ExportMemoToFile, а потом ImportFileToMemo???
Starry
Посетитель
Сообщения: 33
Зарегистрирован: 20 июл 2012, 15:13

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

Сообщение Starry »

Пользуйтесь методами и функциями объекта File.
Открываете мемо-поле как файл с помощью OpenMemo и вперед (Read, ReadLn, Write, WriteLn). Посмотрите в хелпе - там есть примеры.
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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

Сообщение Руслан »

Starry писал(а):Пользуйтесь методами и функциями объекта File.
Открываете мемо-поле как файл с помощью OpenMemo и вперед (Read, ReadLn, Write, WriteLn). Посмотрите в хелпе - там есть примеры.
Это функции записывают данные мемо-поля в файл, а мне надо обратное сделать - из файла в мемо записать...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

есть такая штука как поиск по форуму...или Вы ему не доверяете ? (как и хэлпу....)
Starry
Посетитель
Сообщения: 33
Зарегистрирован: 20 июл 2012, 15:13

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

Сообщение Starry »

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