powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP+MSSQL
20 сообщений из 20, страница 1 из 1
VFP+MSSQL
    #33530728
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ,
У меня вот такой вопрос:
Есть курсор VFP - MyCursor который по структуре аналогичетс таблицей SQL Server 2000.
Пытаюсь этот курсор залить в таблицу SQL через
= SQLEXEC(gnConnHandle, "INSERT INTO Goods1 SELECT * FROM MyCursor")
Понятно что эта конструкция не работает.
Сделал по-другому

cursorName = 'MyCursor'
Create CURSOR (cursorName)....
= SQLEXEC(gnConnHandle, "INSERT INTO Goods1 SELECT * FROM ?cursorName")
Тоже не хочет...
Как првильно такую идею воплотить в жизнь?
Всем спасибо....
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33530859
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
*придется делать так
select MyCursor

scan

= SQLEXEC(gnConnHandle, "INSERT INTO Goods1(field1,field2,...) values (?MyCursor.Field1, ?MyCursor.Field2,...)")

endscan

*или так:
scan

= SQLEXEC(gnConnHandle, "MyDB.dbo.MySPImport ?MyCursor.Field1, ?MyCursor.Field2,...")

endscan
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33530872
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-*придется делать так
select MyCursor

scan

= SQLEXEC(gnConnHandle, "INSERT INTO Goods1(field1,field2,...) values (?MyCursor.Field1, ?MyCursor.Field2,...)")

endscan

*или так:
scan

= SQLEXEC(gnConnHandle, "MyDB.dbo.MySPImport ?MyCursor.Field1, ?MyCursor.Field2,...")

endscan
А разве по-дргому никак нельзя? То что ты предложил - это понятно...
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33530889
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-*придется делать так
select MyCursor

scan

= SQLEXEC(gnConnHandle, "INSERT INTO Goods1(field1,field2,...) values (?MyCursor.Field1, ?MyCursor.Field2,...)")

endscan

*или так:
scan

= SQLEXEC(gnConnHandle, "MyDB.dbo.MySPImport ?MyCursor.Field1, ?MyCursor.Field2,...")

endscan
Вот ошибка, SQL Server хочет создать переменную какуюто...
1526
Connectivity error: [Microsoft][ODBC SQL Server Driver][SQL Server]Must declare the variable '@P1'.
[Microsoft][ODBC SQL Server Driver][SQL Server]Must declare the variable '@P1'.
37000
137
3
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33530907
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
авторА разве по-дргому никак нельзя?

По-другому можно со стороны сервера, используя DTS или утиллиту bcp.exe

авторТо что ты предложил - это понятно...
А мне не понятно, что тебе понятно)
Ты пытался локальный VFP-шный курсор "засунуть" в конструкцию T-SQL сервера...
Как может знать сервер о твоем локальном курсоре?))
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33530920
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Приведи свой код полностью
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33531134
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Приведи свой код полностью
myCursor = SYS(2015)
SELECT key, parent, text FROM tmp_goods INTO CURSOR (myCursor)

gnConnHandle = SQLSTRINGCONNECT("Driver=SQL Server;SERVER=10.36.0.9;DBMSSOCN=TCP/IP;DATABASE=Test")

IF gnConnHandle <= 0
= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')
RETURN
ELSE
= MESSAGEBOX('Connection made', 48, 'SQL Connect Message')
ENDIF

c = SQLEXEC(gnConnHandle, "INSERT INTO Goods1 SELECT * FROM ?myCursor ")
IF C<0
= AERROR(aErrorArray)
strerror = STR(aErrorArray(1))+aErrorArray(2)+aErrorArray(3)+aErrorArray(4)+STR(aErrorArray(5))+STR(aErrorArray(6))
Wait window strerror
ENDIF

= SQLCOMMIT(gnConnHandle)
= SQLEXEC(gnConnHandle, "SELECT * FROM goods1", "ResultCursor")
= SQLDISCONNECT(gnConnHandle)

* смотрим...
SELECT ResultCursor
BROW
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33531506
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Создай на сервере пользователя "MyLogin" с SQL Server Authentication, паролем "figvam" и необходимыми правами

Далее:

cStringConnect = 'DRIVER=SQL Server;SERVER=10.36.0.9;UID=MyLogin;PWD=figvam'

*если используется Windows Authentication, то
cStringConnect = 'DRIVER=SQL Server;SERVER=10.36.0.9'

gnConnHandle = SQLSTRINGCONNECT(cStringConnect)

IF gnConnHandle <= 0
= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')
RETURN
ELSE
= MESSAGEBOX('Connection made', 48, 'SQL Connect Message')
ENDIF


myCursor = SYS(2015)
*SELECT key, parent, text FROM tmp_goods INTO CURSOR (myCursor)
*!!key, parent, text эти названия полей лучше сменить или придется использовать [] скобки

select tmp_goods

Предполагается, что на сервере существует таблица Goods1 в базе Test с соответствующей структурой

scan
= SQLEXEC(gnConnHandle, 'INSERT INTO Goods1([key],[parent],[text]) values (?tmp_goods.key, ?tmp_goods.parent, ?tmp_goods.text ')
endscan


= SQLEXEC(gnConnHandle, 'select * from test.dbo.Goods1 ', 'MyCursor')

*смотрим результат
browse


= SQLDISCONNECT(gnConnHandle)
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33531555
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
...поторопился,
так правильно

...
scan
= SQLEXEC(gnConnHandle,'use test')
= SQLEXEC(gnConnHandle, 'INSERT INTO Goods1([key],[parent],[text]) values (?tmp_goods.key, ?tmp_goods.parent, ?tmp_goods.text ')
endscan
...
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33531564
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
...до чего доводят бессонные ночи...
Так еще правильнее:)
...
= SQLEXEC(gnConnHandle,'use test')
scan
= SQLEXEC(gnConnHandle, 'INSERT INTO Goods1([key],[parent],[text]) values (?tmp_goods.key, ?tmp_goods.parent, ?tmp_goods.text ')
endscan
...
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33531813
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-...до чего доводят бессонные ночи...
Так еще правильнее:)
...
= SQLEXEC(gnConnHandle,'use test')
scan
= SQLEXEC(gnConnHandle, 'INSERT INTO Goods1([key],[parent],[text]) values (?tmp_goods.key, ?tmp_goods.parent, ?tmp_goods.text ')
endscan
...
Конечно огромноеспасибо, эту технику я и предполагал, но неужели нет возможности впихнуть целый курсор в таблицу...
Есть ведь оператор INSERT INTO... FROM SELECT * FROM [талица SQL Server]WHERE....??????.....
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33531852
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriiКонечно огромноеспасибо, эту технику я и предполагал, но неужели нет возможности впихнуть целый курсор в таблицу...
Есть ведь оператор INSERT INTO... FROM SELECT * FROM [талица SQL Server]WHERE....??????.....
Оператор есть (но без первого FROM, если быть точным), но он оперирует объектами сервера!!!
А вы хотите объект клиента (курсор) "запихнуть" в объект сервера !
Ни один клиент не может такого делать с SQL Server!
Можно конечно написать свою оболочку, которая будет "парсить" вашу команду типа "INSERT INTO ... SELECT FROM ... но... в конечном итого все сведется к записи в цикле во временную таблицу сервера и затем INSERT INTO ... SELECT ...FROM #temp_table
С уважением, Алексей.
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33531920
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-K ValeriiКонечно огромноеспасибо, эту технику я и предполагал, но неужели нет возможности впихнуть целый курсор в таблицу...
Есть ведь оператор INSERT INTO... FROM SELECT * FROM [талица SQL Server]WHERE....??????.....
Оператор есть (но без первого FROM, если быть точным), но он оперирует объектами сервера!!!
А вы хотите объект клиента (курсор) "запихнуть" в объект сервера !
Ни один клиент не может такого делать с SQL Server!
Можно конечно написать свою оболочку, которая будет "парсить" вашу команду типа "INSERT INTO ... SELECT FROM ... но... в конечном итого все сведется к записи в цикле во временную таблицу сервера и затем INSERT INTO ... SELECT ...FROM #temp_table
С уважением, Алексей.
Спасибо Алексей за совет... В голове много фоксовых стереотипов, которыми очень часто оперировал и которые, честно говоря, очень удобны, которых нет в технологии по SQL Server-a...
Я могу нвпряму обращаться если возникнут вопросы?
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33532950
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно обращайтесь и ко мне и ко всему сообществу форума. Он для этого и существует.
С уважением, Алексей
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33536241
dmitryx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возник похожий вопрос, правда, у меня не MSSQL, а Oracle, но суть таже. Необходимо в таблицу на сервере записать данные из курсора. В общем я ее решил, создав CursorAdapter привязанный через ODBC к удаленному источнику данных - моей таблице. Данные закинул в курсор CursorAdapter'а с помощью простейшего
Код: plaintext
1.
INSERT INTO orarbb (uchid, nr, objid1, objid2) SELECT uchid, nr, objid1, objid2 FROM rbbloc
Где, orarbb курсор привязанный к таблице на Оракле, а rbbloc локальный курсор фокспро.
Но возник другой вопрос, у меня на форме есть грид, у которого RecordSource является тот самый курсор orarbb моего CursorAdapter'а. Я пытаюсь перезапросить данные с сервера. Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
lcSelectCmd = 'SELECT uchid, nr, objid1, objid2 FROM RBB_DEMO WHERE UCHID=800'
loObj = GETCURSORADAPTER( 'ORARBB' )
IF TYPE('loObj')='O'
	loObj.SelectCmd = lcSelectCmd
	IF loObj.CursorRefresh()
	   ThisForm.grdUchGrid1.Refresh 
	ENDIF 
ENDIF 
CursorRefresh отрабатывает, но данные не обновляются. Может кто подскажет почему?
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33536665
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryxВозник похожий вопрос, правда, у меня не MSSQL, а Oracle, но суть таже. Необходимо в таблицу на сервере записать данные из курсора. В общем я ее решил, создав CursorAdapter привязанный через ODBC к удаленному источнику данных - моей таблице. Данные закинул в курсор CursorAdapter'а с помощью простейшего
Код: plaintext
1.
INSERT INTO orarbb (uchid, nr, objid1, objid2) SELECT uchid, nr, objid1, objid2 FROM rbbloc
Где, orarbb курсор привязанный к таблице на Оракле, а rbbloc локальный курсор фокспро.
Но возник другой вопрос, у меня на форме есть грид, у которого RecordSource является тот самый курсор orarbb моего CursorAdapter'а. Я пытаюсь перезапросить данные с сервера. Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
lcSelectCmd = 'SELECT uchid, nr, objid1, objid2 FROM RBB_DEMO WHERE UCHID=800'
loObj = GETCURSORADAPTER( 'ORARBB' )
IF TYPE('loObj')='O'
	loObj.SelectCmd = lcSelectCmd
	IF loObj.CursorRefresh()
	   ThisForm.grdUchGrid1.Refresh 
	ENDIF 
ENDIF 
CursorRefresh отрабатывает, но данные не обновляются. Может кто подскажет почему?

я бы написал хранимую процедуру на сервере Оракла - и через нее вносил данные.
ИМХО конечно
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33539242
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi dmitryx!

Не видно кода который "открывает" курсор (т.е. вызывает CursorFill()) и
кроме того не понятно почему это SelectCmd присваивается только перед
CursorRefresh() - он должен быть присвоен гораздо раньше - ещё на момент
открытия курсора.
Также непонятна твой уверенность в том что CursorRefresh() отрабатывает - он
вообще-то не должен отрабатывать, если в курсоре есть несохранённые (но
изменённые) данные. Твой же код с INSERT ... SELECT ... как раз и напихивает
в курсор массу записей, которые будут считаться "новыми" - и которые по
хорошему нужно либо сохранить, либо отменить перед попыткой перезапроса.
P.S. А вообще не ясна сама идея - зачем нужно было в курсор запихивать
какие-то локальные данные, если потом нужно туда-же забирать данные с
сервера. Конечно CAD можно обмануть - чтоб он считал эти самые локальные
данные "как будто" полученными с сервера - но для начала лучше уточнить саму
цель подобных манипуляций.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33540030
dmitryx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Igor Korolyov!

Возможно, я немного непонятно описал ситуацию. Код с инсертом и перезапросом это грубо говоря разные программки, и про инсерт я написал человеку, который хотел закинуть данные из фокса на сервер.

Теперь про SelecetCmd и т.п. Я присваиваю ему новое значение в тот момент, когда у меня уже открыта форма (в data environmet'е которой есть cursoradapter связанный с таблицей оракла). При запуске формы у меня из этого курсора наполняется грид формы, при этом данные не меняются вообще. Затем, грубо говоря, мне необходимо перезапросить данные с оракла новым запросом и я формирую новый SelectCmd и делаю CursorRefresh (который, как написано в хелпе, в случае успеха возвращает true, у меня возвращает, но данные ни в курсорадаптере, ни в, соответственно, гриде не обновляются). Скорее всего я чего-то недопонимаю, но из хелпа ничего пока выудить по моему вопросу не удалось.
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33547859
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi dmitryx!

> Возможно, я немного непонятно описал ситуацию

Есть такое.

> Теперь про SelecetCmd и т.п.

CursorRefresh() повторно исполняет ту самую команду, которая была прописана
в свойстве SelectCmd (и возможно изменена в обработчике события
BeforeCursorFill) на момент выполнения метода CursorFill() - никакие
изменения этого свойства ПОСЛЕ исполнения CursorFill() уже не помогут. Равно
как и попытка изменить параметр в методе BeforeCursorRefresh() - читай
внимательно хелп по темам CursorRefresh, BeforeCursorRefresh,
BeforeCursorFill.
Короче единственный способ получить "динамику" в запросе - это отказаться от
CursorRefresh() в пользу CursorFill() - конечно "сохраняя" грид - т.к.
CursorFill полностью пересоздаёт курсор. Единственно чем можно рулить при
CursorRefresh() - это значения параметров (если конечно в запросе они
имеются).
P.S. Старый добрый метод REQUERY() для представлений работает точно так-же.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
VFP+MSSQL
    #33548675
dmitryx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Игорь! С CursorFill все работает как я и хотел :)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP+MSSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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