Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sqlexec(). как задать имена таблиц ч\з параметр / 5 сообщений из 5, страница 1 из 1
28.08.2008, 10:25
    #35510201
Nasmus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlexec(). как задать имена таблиц ч\з параметр
помогите пож-та.
задача примерно такая:
пытаюсь задать имя таблицы ч\з параметр.
nam="D_job" &&& имя талицы их несколько
sqlexec("select * from ?nam","Mycursor") выдает ошибку.
...
Рейтинг: 0 / 0
28.08.2008, 11:00
    #35510276
karat4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlexec(). как задать имена таблиц ч\з параметр
sqlexec(hConnect,"select * from "+nam,"Mycursor")
...
Рейтинг: 0 / 0
28.08.2008, 11:00
    #35510279
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlexec(). как задать имена таблиц ч\з параметр
Можно, например, так:
Код: plaintext
1.
2.
3.
4.
5.
LOCAL m.lcCommand, m.nam
nam="D_job"
TEXT TO lcCommand TEXTMERGE NOSHOW PRETEXT  7 
      select * from <<m.nam>>
ENDTEXT
SQLEXEC(m.lnHC, m.lcCommand, "Mycursor")
С уважением, Алексей
...
Рейтинг: 0 / 0
28.08.2008, 11:07
    #35510307
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlexec(). как задать имена таблиц ч\з параметр
пример ООП

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
#define defMessageCaption "MS SqlServer SqlExec"

lparameters tcSqlCmd, 			 ;	&& команда, которую неоходимо выполнить на сервере
			tcAliasNameOfResult, ;	&& имя курсора, в который необходимо вернуть рез-т выборки
			tuDataSession			&& номер датасессии или объект, имеющий приватную датасессию	

if empty(nvl(tcSqlCmd,""))
	local lcMessage, laStack[ 1 ]
	astackinfo(laStack)
	text to lcMessage noshow textmerge pretext  3 
		Команда, отправленная на SQL сервер, имеет пустое значение!
		
		Стек вызова:
		Модуль:  <<transform(laStack[ 1 , 4 ])>>
		Строка:  <<transform(laStack[ 1 , 5 ])>>
		Команда: <<transform(laStack[ 1 , 6 ])>>
		
 	endtext
	messagebox( lcMessage,  16 , defMessageCaption)
	return - 1 
endif

if empty(this.nConnection) or this.nConnection< 0 
	return - 2 
endif

local llResult

if !empty(tcAliasNameOfResult)
	if vartype(tuDataSession)="O"
		if pemstatus( tuDataSession, "DataSessionId",  5 ) ;
		   and set("dataSession")<>tuDataSession.DataSessionId
			   	set datasession to tuDataSession.DataSessionId
		endif
	else
		if vartype(tuDataSession)="N" and !empty(tuDataSession) ;
		   and set("dataSession")<>tuDataSession
		   		set datasession to tuDataSession
		endif
	endif		
	llResult = (sqlexec(this.nConnection, tcSqlCmd, tcAliasNameOfResult)> 0  and used(tcAliasNameOfResult))
else
	llResult = (sqlexec(this.nConnection, tcSqlCmd)> 0 )
endif

if !llResult
	local laSQlExecError[ 1 ]
	if aerror(laSQlExecError)> 0 
		local lcMessage, laStack[ 1 ]
		astackinfo(laStack)
		text to lcMessage noshow textmerge pretext  3 
			Внимание! На сервере произошла ошибка выполнения запроса.
			Последняя выполненная команда:
	
			<<tcSqlCmd>>
				
			Стек вызова:
			Модуль:  <<transform(laStack[ 1 , 4 ])>>
			Строка:  <<transform(laStack[ 1 , 5 ])>>
			Команда: <<transform(laStack[ 1 , 6 ])>>
			
			
			Полученные сообщение об ошибках с сервера:
						
		endtext 		
		this.checkErrorSqlExec( lcMessage, @laSQlExecError)
	endif
endif 	

return iif(llResult,  1 , - 3 )

...
Рейтинг: 0 / 0
28.08.2008, 11:09
    #35510315
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlexec(). как задать имена таблиц ч\з параметр
пример формирования селекткмд в классе курсорадаптер

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
lparameters tcSql_updateTableName, 	;  	&& таблица на сервере	
			tcCADkeyFieldList, 		;	&& ключь-линк в таблице
			tcCADupdatableFieldList,;	&& обновляемые поля в таблице  (список через запятую)
			tcCADcursorSchema, 		;	&& схема - преобразов-е типов  (список через зяпятую)
			tcWhere, 				;	&& условие в запросе (выражение после WHERE)
			tcSelectedFieldsList,   ;	&& поля в строке запроса (необяз-й параметр)
			tcGroupBy,				;	&& строка - список через запятую
			tcOrderBy,				;	&& строка - список через запятую
			tcSelectCmdADD,			;	&& добавчик к SelectCmd
			tcSelectCmd					&& если уж совсем нестандартный запрос, то передаем сюда уже готовый запрос
with this
	if !.CheckConnection()
		return .f.
	endif

	.Tables         	= tcSql_updateTableName
	.keyFieldList		= tcCADkeyFieldList
	* начитываем если необходимо список полей в таблице на Sql сервере
	.CheckUpdatableFieldList(@tcCADupdatableFieldList, tcSelectedFieldsList)
	.UpdatableFieldList = upper(strtran(strtran(tcCADupdatableFieldList, "[", ""), "]", "")) && строка в виде 'Fld1, Fld2'

	* номер соединения
	.DataSource = cast(.nConnection as integer)
	
	* формируем запрос для КАДа
	if !empty(tcSelectCmd) and vartype(tcSelectCmd)="C"
		.cSelectCmd_const = tcSelectCmd
	else
		text to .cSelectCmd_const noshow textmerge pretext  15  
			select
				<<iif(empty(tcSelectedFieldsList), tcCADkeyFieldList+","+tcCADupdatableFieldList, tcSelectedFieldsList)>>
				from <<tcSql_updateTableName>>
		endtext
	endif
	
	text to .cSelectCmd_ADD noshow textmerge pretext  15  
		<<iif(!empty(tcGroupBy), "GROUP BY "+tcGroupBy, "")>>
		<<iif(!empty(tcOrderBy), "ORDER BY "+tcOrderBy, "")>>
		<<iif(!empty(tcSelectCmdADD), tcSelectCmdADD, "")>>
	endtext	
	.cWhere	  = tcWhere && складываем все в строку
	
	if !empty(tcCADcursorSchema) and .checkcursorschema(@tcCADcursorSchema)
		.cursorsChema 	= tcCADcursorSchema   && строка в виде 'Fld c(16)'
	endif
	.UseCursorSchema = !empty(.cursorschema)
		
	local laFieldsArr( 1 ), lnField, lcField 
	* формируем строку для апдейта
	.updateNameList 	=  iif( !empty(tcCADkeyFieldList), ;
								tcCADkeyFieldList + ' ' + .Tables+'.'+tcCADkeyFieldList, ;
								"")
	for lnField= 1  to alines(laFieldsArr,tcCADupdatableFieldList,',')
		lcField = alltrim(laFieldsArr(lnField))
		if !empty(lcField)
			.updateNameList = .updateNameList +iif(!empty(.updateNameList),', ','') + ;
							  strtran(strtran(lcField, "[", ""), "]", "") + ' ' + .Tables+'.'+lcField
		endif
	endfor

endwith
return .t.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sqlexec(). как задать имена таблиц ч\з параметр / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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