Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор адаптер: не изменяются данные / 13 сообщений из 13, страница 1 из 1
13.03.2009, 12:04
    #35867049
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
На SQL Server есть таблица “Zakaz” и три поля kod; kod_i,kol и табл. ni с полями kod; naim
Создаю курсор адаптер
lczayv_str="select ni.naim,zakaz.kol from zakaz left join ni on zakaz.kod_i=ni.kod "
oca_zayav=CREATEOBJECT('CursorAdapter')
WITH oca_zayav
.ALIAS = 'zakaz'
.DATASOURCETYPE = 'ODBC'
.DATASOURCE = lnconnection2
.SELECTCMD = lczayv_str
.CURSORSCHEMA = "naim C(40), kol I"
.UPDATABLEFIELDLIST = 'naim, kol'
.UPDATENAMELIST = 'naim ni.naim,kol zakaz.kol'
ENDWITH
SELECT 0
oca_zayav.CURSORFILL(.T.,.T.)
DO FORM forms\zayavka

На форме грид, и кнопка «сохранить изменения»

oca_zayav.CURSORREFRESH
This.parent.grid1.setfocus

я делаю изменения кол-ва в гриде
Нажимаю кнопку, а изменения не сохранились, почему?, и как сделать чтоб эти изменения зафиксировались в таблице SQL Server “Zakaz”
...
Рейтинг: 0 / 0
13.03.2009, 12:09
    #35867073
Курсор адаптер: не изменяются данные
q1w1e1как сделать чтоб эти изменения зафиксировались в таблице SQL Server “Zakaz”Изучить и правильно настроить свойства адаптера UpdatebleFields, Tables, KeyFields и т.д.
...
Рейтинг: 0 / 0
13.03.2009, 12:19
    #35867109
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
Спасибо, блин, как я сам не догадался об очевидном...
...
Рейтинг: 0 / 0
13.03.2009, 12:23
    #35867123
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
вот пример.
в примере скрипт для создания таблички и показан пример настройки св-в КАДа.
Поиграйтесь - там все пока просто и понятно.
...
Рейтинг: 0 / 0
13.03.2009, 12:38
    #35867177
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
Спасибо, но у Вас простая таблица, а у меня курсор состоит из выборки двух таблиц...
Извиняюсь, что-то я сильно загнул с SQL(ем) :-))...надо упростить задачу для понимания, и сделать базу данных на VFP9 состоящую из двух таблиц(tabl1 kod;naim и tabl2 kod; kod_t1,kol), и сделать КА с курсором получающимся из двух таблиц, и если я делаю изменения кол-ва, то как указать КА, чтоб он нашёл код именно второй таблицы и внёс изменения кол-ва второй таблицы..
...
Рейтинг: 0 / 0
13.03.2009, 12:41
    #35867190
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
Да и у меня тоже кстати Cursorrefresh() стоит, ну а изменений нет...
...
Рейтинг: 0 / 0
13.03.2009, 12:51
    #35867224
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
автори сделать КА с курсором получающимся из двух таблиц, и если я делаю изменения кол-ва, то как указать КА, чтоб он нашёл код именно второй таблицы и внёс изменения кол-ва второй таблицы..

Вам нужно создать второй курсорадаптер, в который синхронизировать изменения и выполнять
метод сохранения доп-го КАДа

авторИзвиняюсь, что-то я сильно загнул с SQL(ем)
Вам для какого источника нужен пример? для родных таблиц или ?

авторДа и у меня тоже кстати Cursorrefresh() стоит, ну а изменений нет...
покажите выражение селекткмд, изменяете(параметризуется) ли выражение?
...
Рейтинг: 0 / 0
13.03.2009, 12:56
    #35867243
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
авторВам нужно создать второй курсорадаптер, в который синхронизировать изменения и выполнять
метод сохранения доп-го КАДа

к примеру имеется 1 КАД

select *
from table 1
left join table2 ....


если Вы желаете вносить изм-я в table2 и ..., то
должны создать доп. КАД для table2 с выражением селекдкмд:

select * from table2 where ...=?table1.Key

необходимо вносить изм-я в курсор КАД table2, сохранять изм-я, рефрешить курсор КАД table1
...
Рейтинг: 0 / 0
13.03.2009, 12:59
    #35867253
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
Всё преполнение памяти...буду разбираться...
...
Рейтинг: 0 / 0
13.03.2009, 13:03
    #35867268
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
авторНажимаю кнопку, а изменения не сохранились, почему?,
+ чтобы сохранить изм-я,
необходимо конечно проверить наличие изменений и позвать tableupdate()

то, что Вы желаете реализовать называется - каскадное сохранение (создание каскадных КАДов)

если желаете создать универс-ю библиотеку классов,
позволяющих делать это автом-ки,
как пример кода к дей-ю, возможно натолкнет на мысль
(это метод сохр-я изм-й обратите внимание на блок сохр-я каскадов)
Код: 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.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
with this
	local lnUpdatedRecn, lnOldRecNo
	if !deleted(.Alias)
		lnOldRecNo = recno(.Alias)
	else
		skip in (.Alias)
		if !bof(.Alias)
			lnOldRecNo = recno(.Alias)
		else
			skip - 1  in (.Alias)
			lnOldRecNo = recno(.Alias)
		endif 	
	endif
	if lnOldRecNo< 0 
		.BeforeCursorRefresh()
	endif 
	lnUpdatedRecn = .getModified()
	if !empty(lnUpdatedRecn) && в курсоре что-то потрогали
		local lnSqlTranOld, llSuccess, laErrors[ 1 ], lcOldStatusBar
		lcOldStatusBar = _vfp.StatusBar
		_vfp.StatusBar = 'Ждите ... Происходит обновление данных на сервере ...'
		if !.lLockTransactions
			lnSqlTranOld = sqlgetprop(.nConnection, "Transactions")
			llSuccess    = (sqlsetprop( .nConnection, "Transactions",  2 )= 1 )
		else
			llSuccess    = .t.
		endif
		if llSuccess
			.cError = ""
			if !.lCascad
				* обновление всего курсора кучей
				local laUpdErrArray[ 1 ]
				if !tableupdate(  2 , !empty(.nForceUpdate), .Alias, laUpdErrArray)
					=aerror(laErrors)
					text to .cerror noshow textmerge pretext  3 
						Курсорадаптер. Ошибка группового обновления.
						
						Не обновлено <<str(alen(laUpdErrArray,  1 ))>>  записей.
					endtext
					llSuccess = .f.
				endif
			else
				* Обновление каскадов
				* Обновляем последовательно все измененные записи в курсоре
				do while !empty(lnUpdatedRecn)
					go (lnUpdatedRecn) in .alias
					if !.updateRecord(@laErrors)
					    llSuccess = .f.
					    exit
					endif
					lnUpdatedRecn = getNextModified(lnUpdatedRecn,.alias)
					if empty(lnUpdatedRecn)
						exit
					endif    
				enddo
			endif
			if !llSuccess
				* ошибка, не смогли сохранить изменения на сервер
				if !.lLockTransactions
					=sqlrollback(.nConnection)
					=sqlsetprop( .nConnection, "Transactions", lnSqlTranOld)
				endif
				_vfp.StatusBar = ""
				local lcErrMessage
				text to lcErrMessage textmerge noshow pretext  3 
					Курсорадаптер. Ошибка сохранения изменений в таблице <<.Tables>>.
					
					Ошибка: <<iif(alen(laErrors)>= 2 ,laErrors[ 2 ],'Ошибка не идентифицирована.')>>
					<<iif(!empty(.cError), "Доп.информация: " + .cError, "")>>
				endtext
				=messagebox(lcErrMessage, 16 ,'Класс КАД')
				return .f.
			else
				* все хорошо, сохранились
				if !.lLockTransactions
					=sqlcommit(.nConnection)
				endif
			endif
		else
			_vfp.StatusBar = 'КАД. Ошибка выполнения транзакции на сервере.'
			return .f.
		endif
		if !.lLockTransactions
			* восстанавливаем состояние
			=sqlsetprop( .nConnection, "Transactions", lnSqlTranOld)
		endif
		_vfp.StatusBar = lcOldStatusBar  &&'КАД. Данные на сервере обновлены успешно.'
	else
		* в курсоре ничего не трогали - нечего обновлять на сервере
		return .t.
	endif
	select (.Alias)
	if lnOldRecNo> 0  and recno(.Alias)<>lnOldRecNo
		locate record lnOldRecNo
	else
		if lnOldRecNo< 0 
			.AfterCursorRefresh()
		else
			go top
		endif
	endif
endwith 
return .t.
...
Рейтинг: 0 / 0
13.03.2009, 13:30
    #35867385
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
авторВсё преполнение памяти...буду разбираться...

с КАДами связываться стоит если Вы желаете создать библиотеку классов,
чтобы быстро и без проблем решать задачи,
иначе, если нет задачи создания универс.библиотек, то не стоит осуществлять
погружение в изучение вышеобозначенных идей

модули памяти остынут - приходите.
...
Рейтинг: 0 / 0
14.03.2009, 16:30
    #35869317
gepard45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
Вот более или мене стандартная процедура для получения результата из хранимой процедуры.
Совет: Получения данных и их отображения две разные вещи

PROCEDURE MsSQLSpisok
LPARAMETERS lc_Cursor,lc_BazaName,lc_ExecStr
LOCAL lc_TempCursor
lc_TempCursor=SYS(2015)
IF VARTYPE(GN_ConSql)<>"N" OR GN_ConSql=0
GN_ConSql = SQLCONNECT(lc_BazaName)
IF GN_ConSql < 0
MessageBox("Ошибка. Не удалось подсоединиться к SQL Server",0,"Работа с MSSQL")
RETURN
ENDIF
ENDIF

_Screen.MousePointer = 11

IF SQLEXEC(GN_ConSql,lc_ExecStr,lc_TempCursor) <> -1
IF USED((lc_Cursor))
USE IN (lc_Cursor)
ENDIF
IF USED((lc_TempCursor))
USE DBF(lc_TempCursor) IN 0 ALIAS (lc_Cursor) AGAIN SHARED
USE IN (lc_TempCursor)
endif
=SQLDISCONNECT(GN_ConSql)
GN_ConSql=0
_Screen.MousePointer = 0
ELSE
=SQLDISCONNECT(GN_ConSql)
_Screen.MousePointer = 0
MessageBox("Ошибка. Не удалось получить данные из хранимой процедуры",0,"Работа с MSSQL")
ENDIF
RETURN
...
Рейтинг: 0 / 0
14.03.2009, 19:49
    #35869454
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор адаптер: не изменяются данные
авторВот более или мене стандартная процедура для получения результата из хранимой процедуры.
Совет: Получения данных и их отображения две разные вещи

2gepard45

зачем Вы влезли и опубликовали Ваш код?
изв., анализируя код, можно сделать вывод, что Вы на уровне неандертальца.

Вопрос был изначально по использованию курсорадаптера. Что
в данном контексте демонстрирует Ваш пример.

авторПолучения данных и их отображения две разные вещи
к чему эта фраза?
вопрошавший получает данные и задумался над тем как без особых трудозатрат
вносить изменения м автоматически сохранять результаты в источнике.
каким образом Вы с SQLEXEC желаете помочь?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор адаптер: не изменяются данные / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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