powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + Oracle. Курсорадаптер. Глюки с Update.
4 сообщений из 4, страница 1 из 1
VFP + Oracle. Курсорадаптер. Глюки с Update.
    #36194733
Rounder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VFP 9.
Работаю с Oracle через курсорадаптеры. Всего их 7 штук. И вот при работе с двумя из них проблемы...
Все работает прекрасно до той поры, пока в этих самых двух курсорадаптерах не укажу через билдер в select перед названием таблицы схему. Грубо говоря: пока у меня "select * from table" все работает, как только "select * from program.table" - кирдык: перестают апдейтиться поля в этих таблицах.
Чего только не перепробовал - не помогает.
Может кто сталкивался с подобным или просто знает где правду искать?
...
Рейтинг: 0 / 0
VFP + Oracle. Курсорадаптер. Глюки с Update.
    #36194778
Rounder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и еще добавлю - такие глюки не с двумя, а с 4-мя курсорадаптерами (КА), именно с теми, которые построены на основе таблиц в базе, оставшиеся 3 - на основе вьюх.
Этот же глюк с апдейтом проявляется и когда на этих 4 КА в билдере выставляю галку: Use CursorSchema when filling cursor
...
Рейтинг: 0 / 0
VFP + Oracle. Курсорадаптер. Глюки с Update.
    #36194875
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сколько полей в выборке?
сколько перечисляете в строке курсорсхемы?

в курсорсхеме должны быть перечислены все поля
в той-же последовательности, что есть и в выборке

касательно т-скл, для себя, для мс сервера использую такой код,
чтобы не убиваться руками и не писать св-ва,
билдером фокса не пользуюсь и Вам не советую
вот код для посмотреть и сделать какие-то выводы
с ораклом не помогу, за отсутствием оного
Код: 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.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
lparameters tcCADcursorSchema
if !empty(tcCADcursorSchema)
	
	local llConvertData, lсCADcursorSchema
	llConvertData = (atc("#AllSqlDataToFox#", tcCADcursorSchema)> 0 )
	lсCADcursorSchema = ""
	
	with this
		if empty(.aSqlTableFields[ 1 ]) ;
		   and sqlcolumns(.nConnection, .Tables , "FOXPRO", "sqlTableFields")= 1  ;
		   and used("sqlTableFields")
		   
			select * ;
				from sqlTableFields ;
				into array .aSqlTableFields
		
		endif
		
		use in select("sqlTableFields")
		
		local lnArrayRow, lcFieldName, lcFieldName, lcFieldType, lcFieldAttrib
		* узнаем все поля, которые будут в выборке
		
		if .CursorFill(.f.,.f.) and afields( .aSqlTableFields, .Alias)> 0 
		
			for lnArrayRow= 1  to alen( .aSqlTableFields,  1 )
				
				lcFieldName = upper(alltrim(.aSqlTableFields[lnArrayRow, 1 ]))
				lcFieldType = alltrim(.aSqlTableFields[lnArrayRow, 2 ])
				
				lnPos =  atc(lcFieldName+" ", tcCADcursorSchema)
						
			    if empty(lnPos)
					if ascan( .aSqlTableFields, lcFieldName)> 0 
					   
							lсCADcursorSchema = lсCADcursorSchema + iif(!empty(lсCADcursorSchema), ", ", "") + ;
												lcFieldName + ;
												iif( llConvertData and inlist( lcFieldType, "D", "T") and lcFieldName<>"TIMESTAMP", ;
													 " d(8)", ;
													 " " + lcFieldType + " (" + transform(.aSqlTableFields[lnArrayRow, 3 ]) + ;
													 					        "," + ;
													 					        transform(.aSqlTableFields[lnArrayRow, 4 ]) + ")" ;
													)
					else
						* значение есть в массиве .aSqlTableFields - в выборке - какое-то дополнительное поле
						* но такого нет в самой табличке на сервере
						lсCADcursorSchema = lсCADcursorSchema + iif(!empty(lсCADcursorSchema), ", ", "") + ;
											lcFieldName + " " + lcFieldType + "(" + ltrim(str(.aSqlTableFields[lnArrayRow, 3 ])) + ;
																			  "," + ltrim(str(.aSqlTableFields[lnArrayRow, 4 ])) + ;
																			  ")"
					endif
				else
						lcFieldAttrib = strextract(upper(tcCADcursorSchema), lcFieldName, ",")
						if empty(lcFieldAttrib)
							lcFieldAttrib = alltrim(substr(upper(tcCADcursorSchema),lnPos + len(lcFieldName)+ 1 ))
						endif
						lсCADcursorSchema = lсCADcursorSchema + iif(!empty(lсCADcursorSchema), ", ", "") + ;
											lcFieldName + " " + lcFieldAttrib
				endif
				
			endfor
			
			tcCADcursorSchema = lсCADcursorSchema
		
		else
		
			* произошла ошибка
			local laErrors[ 1 ], lcErrorMessage
			=aerror(laErrors)
			text to lcErrorMessage noshow textmerge pretext  3 
				
					Курсорадаптер. Ошибка проверки курсорсхемы !
					
					Таблица: <<.Tables>>
					Метод: CursorFill
					Ошибка:	<<iif(type('laErrors[2]')='C',laErrors[ 2 ],'Неопознанная ошибка!')>>
					
			endtext
			messagebox(lcErrorMessage, 16 ,'Класс КАД')
			
			* ошибка курсорфилла
			tcCADcursorSchema = .f.
			return .f.
		
		endif
		 
	
	endwith

endif 
return .t.
...
Рейтинг: 0 / 0
VFP + Oracle. Курсорадаптер. Глюки с Update.
    #36194911
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а самый простой способ найти причину
пишете простейший код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
lnConnect = ....
loCad = createob("cursoradapter")
with loCad
    ....
     ***  тут постоянно что-то меняем
    .....
    if .cursorfill()
      insert into (.Alias) ...
      if !tableupdate()
         messagebox("бага")
      endif
    endif
endwith

постоянно подменяйте св-ва и играйтесь,
методом научного тыка поймете причину
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + Oracle. Курсорадаптер. Глюки с Update.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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