powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор адаптер: не изменяются данные
13 сообщений из 13, страница 1 из 1
Курсор адаптер: не изменяются данные
    #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
Курсор адаптер: не изменяются данные
    #35867073
q1w1e1как сделать чтоб эти изменения зафиксировались в таблице SQL Server “Zakaz”Изучить и правильно настроить свойства адаптера UpdatebleFields, Tables, KeyFields и т.д.
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #35867109
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, блин, как я сам не догадался об очевидном...
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #35867123
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пример.
в примере скрипт для создания таблички и показан пример настройки св-в КАДа.
Поиграйтесь - там все пока просто и понятно.
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #35867177
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, но у Вас простая таблица, а у меня курсор состоит из выборки двух таблиц...
Извиняюсь, что-то я сильно загнул с SQL(ем) :-))...надо упростить задачу для понимания, и сделать базу данных на VFP9 состоящую из двух таблиц(tabl1 kod;naim и tabl2 kod; kod_t1,kol), и сделать КА с курсором получающимся из двух таблиц, и если я делаю изменения кол-ва, то как указать КА, чтоб он нашёл код именно второй таблицы и внёс изменения кол-ва второй таблицы..
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #35867190
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и у меня тоже кстати Cursorrefresh() стоит, ну а изменений нет...
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #35867224
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автори сделать КА с курсором получающимся из двух таблиц, и если я делаю изменения кол-ва, то как указать КА, чтоб он нашёл код именно второй таблицы и внёс изменения кол-ва второй таблицы..

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

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

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

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

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


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

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

необходимо вносить изм-я в курсор КАД table2, сохранять изм-я, рефрешить курсор КАД table1
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #35867253
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё преполнение памяти...буду разбираться...
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #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
Курсор адаптер: не изменяются данные
    #35867385
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсё преполнение памяти...буду разбираться...

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

модули памяти остынут - приходите.
...
Рейтинг: 0 / 0
Курсор адаптер: не изменяются данные
    #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
Курсор адаптер: не изменяются данные
    #35869454
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВот более или мене стандартная процедура для получения результата из хранимой процедуры.
Совет: Получения данных и их отображения две разные вещи

2gepard45

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

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

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


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