Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 ADODB.Connection и XMLTOCURSOR  [new]
Semen81
Member

Откуда:
Сообщений: 160
Всем привет!!! Замучился уже. В VFP 9 использую ADODB для получения данных из оракла и получившуюся выборку скидываю в курсор с помощью XMLTOCURSOR
CREATE CURSOR temp_prix_wms (isn c(10), isnd c(10), kol n(10))
loXML = CREATEOBJECT('MSXML.DOMDocument') 
oResult.Save(loXML, 1) 
XMLTOCURSOR(loXML.xml, 'temp_prix_wms', 8192) 

Так мои мучения заключаются в том, что один и тот же запрос, который выполняется через ADODB.Command и в среде оракл возвращает разные результаты. Правильные те, что получаются в среде оракл. А в FOX такое ощущение, что цепляются какие-то старые данные, которые участвовали в предыдущих выборках. Куда копать? Всем спасибо
7 фев 13, 11:45    [13889445]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Semen81,
а чем вызван такой, прямо скажем, необычный способ общения с сервером?
7 фев 13, 11:47    [13889472]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Semen81
Member

Откуда:
Сообщений: 160
Sergey Sizov,
)) Не могу ответить. Просто так сделал. Через ODBC все норм работало, за исключением постоянно открывающегося окна для ввода пользователя и пароля, а через ADO программа может работать в теневом режиме.

На всякий случай напишу полный код
oConn=CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString="строка подключения"
oConn.Open()

LOCAL oCmd AS ADODB.Command, oResult AS ADODB.Recordset 
LOCAL loXML as MSXML.DOMDocument 

oCommand=CREATEOBJECT("ADODB.Command")
oCommand.ActiveConnection=oConn
oCommand.CommandType = 1 
oCommand.CommandTimeout = 0 

CREATE CURSOR temp_prix_wms (isn c(10), isnd c(10), kol n(10))
oCommand.CommandText="SELECT ..... "
oResult=oCommand.Execute()
loXML = CREATEOBJECT('MSXML.DOMDocument') 
oResult.Save(loXML, 1) 
XMLTOCURSOR(loXML.xml, 'temp_prix_wms', 8192) 
oResult.Close() 
7 фев 13, 11:51    [13889509]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Semen81
Member

Откуда:
Сообщений: 160
Переделал все на это
CREATE CURSOR temp_prix_wms (isn c(10), isnd c(10), kol n(10))
oConn=CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString="строка подключения"
oConn.Open()
rs=CREATEOBJECT("ADODB.Recordset")
rs.Open ("select .....", oConn, 1, 3)
rs.MoveFirst
DO WHILE !rs.Eof()
	INSERT INTO temp_prix_wms (isn, isnd, kol) VALUES(rs.Fields("isn").Value, rs.Fields("isnd").Value, rs.Fields("kol").Value)
	rs.MoveNext
ENDDO


Все равно возвращает не то что в оракле. RecordSet возвращает 37452 записи, а в оракле 16199. ЗАПРОС ОДИН И ТОТ ЖЕ Что он тащит такое?
7 фев 13, 12:46    [13890065]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Dima T
Member

Откуда:
Сообщений: 15297
Semen81
Через ODBC все норм работало, за исключением постоянно открывающегося окна для ввода пользователя и пароля

Это легко лечится
SQLSETPROP(0,"DispLogin",3)
7 фев 13, 12:49    [13890099]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Semen81
Member

Откуда:
Сообщений: 160
Может он дату воспринимает как-то по другому, не как в среде оракл? Поэтому и тянет мне записи не за указаный диапазон а за гораздо больший? Только чтоб это проверить не понимаю как тогда дату написать
7 фев 13, 12:50    [13890108]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Semen81
Member

Откуда:
Сообщений: 160
Dima T
Semen81
Через ODBC все норм работало, за исключением постоянно открывающегося окна для ввода пользователя и пароля

Это легко лечится
SQLSETPROP(0,"DispLogin",3)


Сейчас попробую. Если получится забуду как страшный сон этот ADO с RecordSet-ом
7 фев 13, 12:51    [13890119]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Dima T
Member

Откуда:
Сообщений: 15297
Возможно еще это пригодится
SQLSETPROP(0,"DispWarnings",.F.)

Тут полный список: help SQLSETPROP()
7 фев 13, 12:53    [13890153]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Semen81
Member

Откуда:
Сообщений: 160
Сделал вот так и все стало хорошо и быстро

LOCAL lnHandle as Integer 
LOCAL loMyCA as CursorAdapter
lnHandle = SQLSTRINGCONNECT("строка подключения", .T.)
loMyCA = CREATEOBJECT("CursorAdapter")
WITH loMyCA
	.DataSourceType = "ODBC"
	.DataSource = lnHandle
	.SelectCmd = "select ..."
	.CursorSchema = "isn C(10), isnd C(10), kol N(10)"
	.Alias = "temp_prix_wms"
	.FetchMemo = .F.
	.MapVarchar = .T.
	.MapBinary = .T.
	.UseCursorSchema = .T.
	.FetchAsNeeded = .F.
	IF .CursorFill()
		SELECT * FROM temp_prix_wms INTO CURSOR wms_prix
	ENDIF
ENDWITH 

=SQLDISCONNECT(lnHandle)
7 фев 13, 14:03    [13890745]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Осталось выяснить назначение этой команды.
Semen81
		SELECT * FROM temp_prix_wms INTO CURSOR wms_prix

Почему нельзя сразу в wms_prix? Зачем лишний курсор?
7 фев 13, 14:48    [13891240]     Ответить | Цитировать Сообщить модератору
 Re: ADODB.Connection и XMLTOCURSOR  [new]
Semen81
Member

Откуда:
Сообщений: 160
Sergey Sizov
Осталось выяснить назначение этой команды.
Semen81
		SELECT * FROM temp_prix_wms INTO CURSOR wms_prix

Почему нельзя сразу в wms_prix? Зачем лишний курсор?


Да это я сделал потому, что после заполнения курсора tmp_prix_wms он почему то не отображается, а как будто закрывается )) Не стал долго разбираться в чем дело и что я опустил, а сделал SELECT
11 фев 13, 11:53    [13907521]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить