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

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

касательно т-скл, для себя, для мс сервера использую такой код,
чтобы не убиваться руками и не писать св-ва,
билдером фокса не пользуюсь и Вам не советую
вот код для посмотреть и сделать какие-то выводы
с ораклом не помогу, за отсутствием оного
Код: 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
14.09.2009, 17:52
    #36194911
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VFP + Oracle. Курсорадаптер. Глюки с Update.
а самый простой способ найти причину
пишете простейший код

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


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