powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sqlexec(). как задать имена таблиц ч\з параметр
5 сообщений из 5, страница 1 из 1
sqlexec(). как задать имена таблиц ч\з параметр
    #35510201
Nasmus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите пож-та.
задача примерно такая:
пытаюсь задать имя таблицы ч\з параметр.
nam="D_job" &&& имя талицы их несколько
sqlexec("select * from ?nam","Mycursor") выдает ошибку.
...
Рейтинг: 0 / 0
sqlexec(). как задать имена таблиц ч\з параметр
    #35510276
karat4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sqlexec(hConnect,"select * from "+nam,"Mycursor")
...
Рейтинг: 0 / 0
sqlexec(). как задать имена таблиц ч\з параметр
    #35510279
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, например, так:
Код: 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
sqlexec(). как задать имена таблиц ч\з параметр
    #35510307
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример ООП

Код: 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
sqlexec(). как задать имена таблиц ч\з параметр
    #35510315
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример формирования селекткмд в классе курсорадаптер

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


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