Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid и SQL запрос / 6 сообщений из 6, страница 1 из 1
18.04.2006, 18:08
    #33674461
dj_raven
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid и SQL запрос
Доброго времени суток.
Ситуация следующая. На форме есть GRIDб нужно чтобы он получал данные с запроса. Например:
Select details, cost;
FROM sometable;
WHERE sometable.id=x
где x является id из другой таблицы, из которой он берется каждый раз из другого поля.

Пробовал это сделать через курсор, код расположен в event load event, также пробовал в init event. Оба event взяты относительно формы. Также в GRID поля RecordSourceType=1-Alias, Recordsource=temp.
Как было описано в Help\Populating Query Results in a Form Control.
Но к сожалению не работает, что делать?
...
Рейтинг: 0 / 0
18.04.2006, 18:20
    #33674505
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid и SQL запрос
1. В INIT формы у вас должен быть уже известен критерий отбора (x)
2. В INIT формы выполняете код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
LOCAL lnX
WITH THSFORM
   .grdList.RecordSource = ""
   lnX = X && Не понял точно откуда вы берет X (поле ?!)
   SELECT details, cost ;
   FROM sometable.id=lnX ;
   INTO CURSOR cTemp
   SELECT cTemp
   GOTO TOP
   WITH .grdList
      .RecordSource = "cTemp"
      .Column1.ControlSource = "cTemp.details"
      .Column2.ControlSource = "cTemp.cost"
   ENDWITH
ENDWITH
Если в самой форме предполагается изменение по какому-нибудь событию изменение условия отбора (X), то лучше весь это код перенести в свой метод формы и вызывать его из конструктора (Init) и при изменении этого самого x

В Destroy формы (если вам курсор cTemp не нужен) неплохо бы выполнить:
Код: plaintext
USE IN SELECT("cTemp")
С уважением, Алексей
...
Рейтинг: 0 / 0
18.04.2006, 18:21
    #33674507
SAM-FoxPro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid и SQL запрос
Про Grid читать здесь . Может-поможет :)
Успехов.
...
Рейтинг: 0 / 0
18.04.2006, 18:35
    #33674540
dj_raven
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid и SQL запрос
Spasibo bolshoje, ideja ponjatna, posle nebolshoj modifikacii srabotala :)
...
Рейтинг: 0 / 0
20.04.2006, 16:20
    #33679868
dj_raven
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid и SQL запрос
Bolshoje spasibo. Zarabotala zaraza :)
...
Рейтинг: 0 / 0
20.04.2006, 17:47
    #33680246
FoxLamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid и SQL запрос
Создайте грид, добавьте к нему свойства:
id,flag_poisk,calias,csql

и потом наследуйте от него объекты, где Вам надо отображать данные

Тогда Вам нужно будет для обновления только 2 строки
thisform.mygrid.csql='select ......'
thisform.mygrid.init

В метод инит грида-родителя добавьте код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
LOCAL lcSql, lcNameAlias, lcField

LOCAL m.nCount, m.i
m.nCount= 0 
m.i= 0 
lcNameAlias	=	'['+this.calias+']'
DIMENSION af[ 1 , 1 ]

this.RecordSource=''

cSql	=	this.csql
SQLExec(gnconnect,cSQL,&lcNameAlias)  && для клиент-сервера

SELECT &lcNameAlias
IF this.flag_poisk= 1 
	LOCATE FOR id=this.id
	IF NOT FOUND()
		GO top
	ENDIF 
ENDIF

this.id	=	id
IF this.RecordSourceType= 1 
	this.RecordSource=&lcNameAlias

	m.nCount=AFIELDS(af,&lcNameAlias)
	
	FOR m.i= 1  TO this.ColumnCount
		 this.Columns(m.i).controlsource= af(m.i, 1 )
	ENDFOR

ENDIF 


Этот пример для клиент-сервера.
Для файл-сервера почти также, толькл вместо sqlexec(....)
надо вызывать &this.csql
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid и SQL запрос / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]