powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Пример работы с курсор-адаптерами 3-х таблиц
11 сообщений из 11, страница 1 из 1
Пример работы с курсор-адаптерами 3-х таблиц
    #39548734
vlgrech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите где есть пример работы в VFP-9 с курсор адаптерами трех (и более) таблиц? Таблицы связаны по ключевым полям.
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548790
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgrech,
а работа трех (и более) таблиц как-то сильно отличается от работы двух таблиц?
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548805
vlgrech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov, действительно отличается
* На форме Init() в случае 2-х таблиц:
PUBLIC loCmd as ADODB.Command
loCmd = CREATEOBJECT('ADODB.Command')
WITH ThisForm.dataenvironment.casotr2
loCmd.ActiveConnection=.parent.DataSource.ActiveConnection
lbIsFill = .CursorFill(.UseCursorSchema, .NoData, 1, loCmd)
ENDWITH
ThisForm.BindControls=.T.
ThisForm.Refresh

А в случае 3-х в примере который есть у меня
*Form Init()
IF this.bIsFatalError
RETURN .F.
ENDIF
WITH thisForm.DataEnvironment
IF !USED(.caCustomers.Alias) ;
OR !USED(.caOrders.Alias) ;
OR !USED(.caOrder_details.Alias)
RETURN .F.
ENDIF
ENDWITH
WITH ThisForm.cboCustomes
IF .ListCount > 0 AND .ListIndex = 0
.ListIndex = 1
ENDIF
endwith
*
И еще куча отличий.
Вот я и подумал можбыть у кого есть пример который корректно работает.
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548820
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgrech,
и какое отношение приведенный вами пример имеет к курсор-адаптерам? Проверка наличия трех курсоров, привязанных к курсор-адаптерам? А она сильно отличается от такой же проверки наличия курсоров при двух курсор-адаптеров?
И что в свете приведенных примеров называете "работой с курсор-адаптерами"?
И еще куча отличий. Каких?Вот я и подумал можбыть у кого есть пример который корректно работает.А это т работает некорректно? и в чем некорректность? И вообще, о каком примере идет речь?
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548861
vlgrech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov,
*Form Init()
IF this.bIsFatalError
RETURN .F.
ENDIF
WITH thisForm.DataEnvironment
IF !USED(.caCustomers.Alias) ;
OR !USED(.caOrders.Alias) ;
OR !USED(.caOrder_details.Alias)
RETURN .F.
ENDIF
ENDWITH
WITH ThisForm.cboCustomes
IF .ListCount > 0 AND .ListIndex = 0
.ListIndex = 1
ENDIF
endwith
*
*Form Load()
IF VERSION(5) < 800
RETURN .F.
ENDIF
WITH thisForm.DataEnvironment
IF !.AutoOpenTables AND !.OpenTables()
RETURN .F.
ENDIF
ENDWITH
IF this.bIsFatalError
RETURN .F.
endif
*
*dboCustomes InteractiveChange()
WITH thisForm.DataEnvironment
.caOrders.CursorRefresh()
.caOrder_details.CursorRefresh()
ENDWITH
WITH thisForm.grdOrders
.SetFocus()
.ActivateCell(1, .ActiveColumn)
ENDWITH
thisForm.grdOrder_details.Refresh()
*
*grdOrders AfterRowColChange()
LPARAMETERS nColIndex
thisForm.DataEnvironment.caOrder_details.CursorRefresh()
thisForm.grdOrder_details.Refresh()
*
*DE Destroy()
IF VARTYPE(This.DataSource) = 'O' AND This.DataSourceType = 'ADO'
IF This.DataSource.State <> 0
This.DataSource.Close()
ENDIF
IF VARTYPE(This.DataSource.ActiveConnection) = 'O' ;
AND This.DataSource.ActiveConnection.State <> 0
This.DataSource.ActiveConnection.Close()
ENDIF
This.DataSource = NULL
endif
*
*Dataenvironment Error()
LPARAMETERS nError, cMethod, nLine
IF TYPE('thisForm.bIsFatalError') = 'L' AND thisForm.bIsFatalError
RETURN
ENDIF
LOCAL ARRAY laErr[1]
= AERROR(laErr)
LOCAL lcMsg as String
lcMsg = 'Error: ' + LTRIM(STR(laErr[1]))
lcMsg = lcMsg + CHR(13) + CHR(10) + 'Message: ' + laErr[2]
IF !EMPTY(cMethod)
lcMsg = lcMsg + CHR(13) + CHR(10) + 'Method: ' + cMethod
ENDIF
IF !EMPTY(nLine)
lcMsg = lcMsg + CHR(13) + CHR(10) + 'Line: ' + LTRIM(STR(nLine))
ENDIF
IF TYPE('thisForm.bIsFatalError') = 'L'
thisForm.bIsFatalError = .T.
ENDIF
= MESSAGEBOX(lcMsg, 16, thisForm.Caption)
*
*DE Init()
LOCAL lbIsDeDsADO as Boolean, lbIsErr as Boolean, loCurObj as CursorAdapter
WITH this
lbIsDeDsADO = VARTYPE(.DataSource) = 'O' AND .DataSourceType = 'ADO'
FOR EACH loCurObj IN .Objects
WITH loCurObj
IF 'Cursoradapter' $ .BaseClass
IF !USED(.Alias) AND ('?' $ .SelectCmd) ;
AND (lbIsDeDsADO OR .DataSourceType = 'ADO')
LOCAL loCmd as ADODB.Command
loCmd = CREATEOBJECT('ADODB.Command')
IF lbIsDeDsADO
WITH this.DataSource
IF .State <> 0 && adStateClosed
.Close()
ENDIF
loCmd.ActiveConnection = .ActiveConnection
ENDWITH
ELSE
loCmd.ActiveConnection = .DataSource.ActiveConnection
ENDIF
LOCAL lbIsFill as Boolean
IF VERSION(5) < 900
lbIsFill = .CursorFill(.F., .F., 1, loCmd) && (adCmdText = 1)
ELSE
lbIsFill = .CursorFill(.UseCursorSchema, .NoData, 1, loCmd) && (adCmdText = 1)
ENDIF
IF !lbIsFill
lbIsErr = .T.
this.Error(1098, this.Name + '.Init', LINENO(1))
EXIT
ENDIF
ENDIF
ENDIF
ENDWITH
ENDFOR
ENDWITH
RETURN !lbIsErr
*
Выше текст всех методов как на форме, так и в DE.
Данные 3-го курсора (нижний грид) можно изменять и все отображается в таблицу.
А вот данные 2-го курсора при попытке их изменить вываливают ошибку:
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548877
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgrech,
и как обычно...
При чем тут количество таблиц? При чем тут курсор-адаптеры? На какой строке выскакивает ошибка? Откуда берется текст сообщения? О каких закладках речь в сообщении об ошибке? Или это всё надо отгадать?
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548880
vlgrech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov,
Посылаю Rar примера
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548884
vlgrech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для работы примера необходимо на Sql-сервере записать б.д. Northwind
В строке соединения в DE формы исправить имя сервера
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39548895
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgrech,
читаем
Код: sql
1.
select ProductID, Quantity, UnitPrice, OrderID from [Order Details] WHERE [Order Details].OrderID=?Orders.OrderID


и внимательно сравниваем написанное в квадратных скобках с тем, что написано у вас. И при чем тут количество таблиц? И нерабочесть примера? И прочие, как бы помягче... странные вопросы...
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39549316
vlgrech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица в б.д. Northwind называется Order_Details, поэтому скобки не нужны.
В прилагаемом примере используется Northwind.mdb и Sql сервер не нужен.
Ошибка "Недопустимая закладка" происходит при попытке изменить к-либо поле таблицы Orders.
...
Рейтинг: 0 / 0
Пример работы с курсор-адаптерами 3-х таблиц
    #39549584
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgrech,
при замене ADO на ODBC все работает. Отсюда вывод - не надо пользоваться ADO.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Пример работы с курсор-адаптерами 3-х таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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