Re[3]: Connection.Errors of disconnected recordset
От: Peter Fleischer Германия www.informtoools.de
Дата: 16.08.04 13:12
Оценка: 17 (1)
NPC wrote:
> И все же, к моему основному вопросу — можно ли получить некий
> Connection для рекордсета, загруженного из XML строки? Мне это надо
> ради доступа к коллекции Connection.Errors, поскольку я надеюсь, что
> это может мне помочь обнаружить больше информации по происходящей
> ошибке.
>
> (я уже в таком состоянии, что готов проверить абсолютно все, даже
> дурацкие, идеи)

Самые дурацкие идеи часто являются самыми гениальными

Я вывожу обычно всю инф. об ошобках так:

error_text = strSQL & vbCrLf ' SQL-String!
For Each e In cn1.Errors
error_text = error_text _
& "Error Number: " & e.Number & vbCrLf _
& "Description : " & e.Description & vbCrLf _
& "Source : " & e.Source & vbCrLf _
& "SQL State : " & e.SQLState & vbCrLf _
& "Native Error: " & e.NativeError & vbCrLf
Next e
MsgBox error_text

Peter
Posted via RSDN NNTP Server 1.8
Re[5]: Connection.Errors of disconnected recordset
От: Peter Fleischer Германия www.informtoools.de
Дата: 16.08.04 15:06
Оценка: 3 (1)
NPC wrote:
> Петр, я очень благодарен тебе за потраченное время и желание мне
> помочь. Возможно, я в шаге от решения своих проблем.
>
> PF>В этой секции не хватает разрешенеия на запись:
> PF>rs:write='true'
>
> Вот такой код (содранный у тебя до буквы, чтобы избежать ошибок)
> валится на rs!sign = "I" (и на rs.Fields("Sign") = "I", и на
> rs.Fields("Sign").Value = "I"):
...
> <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
> xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
> xmlns:rs="urn:schemas-microsoft-com:rowset"
> xmlns:z="#RowsetSchema"> <s:Schema id="RowsetSchema">
> <s:ElementType name="row" content="eltOnly"
> rs:write="true" rs:updatable="true"> <s:AttributeType

У меня стоит на OE автоматическое ограничение длиной строк. Поэтому rs:write="true" попало на туда!

Его надо ставить в описание столбца!

Значит так:

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:updatable="true">
<s:AttributeType name="Sign" rs:number="1" rs:baseCatalog="Location_Selection" rs:baseTable="BAPILOCRANGETable" rs:keycolumn="False" rs:autoincrement="False" rs:nullable="True" rs:write='true'>
<s:datatype dt:type="string" dt:maxlength="100" rs:maybenull="True" />
</s:AttributeType>
</s:ElementType>
</s:Schema>
<rs:data />
</xml>

Зуеук
Posted via RSDN NNTP Server 1.8
Connection.Errors of disconnected recordset
От: NPC  
Дата: 16.08.04 10:52
Оценка:
Может быть не в этот подфорум писать надо, посему заранее прошу прощения.

Мне необходимо понять причину ошибки "Multi-step operation generated errors...", и в качестве последней попытки я хотел бы вычитать коллекцию ошибок самого ADO — может быть там содержится больше информации. Проблема в том, что Recordset у меня создан с помощью rs.Open 123.xml, соответственно у него нет объекта Connection, к которому уже принадлежала бы коллекция Errors.

Я новичок и в VB, и в ADO одновременно, поэтому ответ может быть где-то совсем на поверхности, но я не вижу его, уже потратив рабочий день. Буду заранее благодарен за любые наводки.

С уважением,
NPC

PS Ошибка, описанная выше, возникает при присвоении строкового значения полю. AddNew (без параметров) проходит без проблем, после Update даже запись появляется, но как только пытаюсь присвоить строку в один из fields (а они все string у меня, и размер я дергал, и 100, и 255 ставил), даже если Null пытаюсь присвоить — сразу падает.
Re: Connection.Errors of disconnected recordset
От: NPC  
Дата: 16.08.04 11:06
Оценка:
И, вдогонку, как узнать для определенного Field из rs.Fields, nullable она или нет?

Заранее спасибо,
NPC
Re: Connection.Errors of disconnected recordset
От: Peter Fleischer Германия www.informtoools.de
Дата: 16.08.04 11:44
Оценка:
NPC wrote:
...
> Мне необходимо понять причину ошибки "Multi-step operation generated
> errors...", и в качестве последней попытки я хотел бы вычитать
> коллекцию ошибок самого ADO — может быть там содержится больше
> информации. Проблема в том, что Recordset у меня создан с помощью
> rs.Open 123.xml, соответственно у него нет объекта Connection, к
> которому уже принадлежала бы коллекция Errors.

Recordset соответствует требованиям? Т.е., XML-файл получен путем rs.save? Если не так, то содержание файла не годится для этой технологии.

"Multi-step operation generated errors..." свидетельствует о том, что проводится внутри несколько шагов по преобразовании данных, один из которых срывается.

> Я новичок и в VB, и в ADO одновременно, поэтому ответ может быть

> где-то совсем на поверхности, но я не вижу его, уже потратив рабочий
> день. Буду заранее благодарен за любые наводки.
...
> PS Ошибка, описанная выше, возникает при присвоении строкового
> значения полю. AddNew (без параметров) проходит без проблем, после
> Update даже запись появляется, но как только пытаюсь присвоить строку
> в один из fields (а они все string у меня, и размер я дергал, и 100,
> и 255 ставил), даже если Null пытаюсь присвоить — сразу падает.

Тут может быть, что в самый рекордсет можно писать, а банк данных не разрешает запись (readonly), либо не разрешает запись именно этих данных, потому-что они не соответствуют заданными ограничениями, напр. по ключу.

Peter
Posted via RSDN NNTP Server 1.8
Re[2]: Connection.Errors of disconnected recordset
От: Peter Fleischer Германия www.informtoools.de
Дата: 16.08.04 11:47
Оценка:
NPC wrote:
> И, вдогонку, как узнать для определенного Field из rs.Fields,
> nullable она или нет?
>
> Заранее спасибо,
> NPC

См. myTable.Columns.Item("myField").Properties.Item("Nullable") -> True/False

Peter
Posted via RSDN NNTP Server 1.8
Re[2]: Connection.Errors of disconnected recordset
От: NPC  
Дата: 16.08.04 12:25
Оценка:
Здравствуйте, Peter Fleischer, Вы писали:

PF>Recordset соответствует требованиям? Т.е., XML-файл получен путем rs.save? Если не так, то содержание файла не годится для этой технологии.


Все гораздо сложнее, xml получен из .net-овского DataTable после натравливания на него xsl-я, примерно следуя коду из http://support.microsoft.com/default.aspx?scid=kb;en-us;316337

Вот результирующий xml:

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:updatable="true">
<s:AttributeType name="Sign" rs:number="1" rs:baseCatalog="Location_Selection" rs:baseTable="BAPILOCRANGETable" rs:keycolumn="False" rs:autoincrement="False" rs:nullable="True">
<s:datatype dt:type="string" dt:maxlength="100" rs:maybenull="True" />
</s:AttributeType>
</s:ElementType>
</s:Schema>
<rs:data />
</xml>

Он пустой, я его в качестве шаблона получаю из .NET приложения в VB6, и должен заполнить данные, после чего передать обратно. Может, опытным взглядом оценишь, что в этом хмл-е может быть неверного? Я был бы очень благодарен за такую перекрестную проверку.

PF>"Multi-step operation generated errors..." свидетельствует о том, что проводится внутри несколько шагов по преобразовании данных, один из которых срывается.


Я вот такой строкой проверяю nullable — (rsLocSelection.Fields("Sign").Attributes = adFldIsNullable) -> True/False (предложенный тобой код не совсем работает, ибо ни columns нет у recordset-а, ни "nullable" в коллекции параметров у поля коллекции fields), так он действительно показывает false, хотя я уже тупо в xml-е прописал rs:nullable="true". Может в этом причина? Я в поле Sign на самом деле значение "I" пытаюсь передать, так что Null — не самоцель, но некорректная работа этого nullable неприятна сама по себе.

PF>Тут может быть, что в самый рекордсет можно писать, а банк данных не разрешает запись (readonly), либо не разрешает запись именно этих данных, потому-что они не соответствуют заданными ограничениями, напр. по ключу.


Большое спасибо за помощь.
Re[2]: Connection.Errors of disconnected recordset
От: NPC  
Дата: 16.08.04 12:40
Оценка:
И все же, к моему основному вопросу — можно ли получить некий Connection для рекордсета, загруженного из XML строки? Мне это надо ради доступа к коллекции Connection.Errors, поскольку я надеюсь, что это может мне помочь обнаружить больше информации по происходящей ошибке.

(я уже в таком состоянии, что готов проверить абсолютно все, даже дурацкие, идеи)
Re[3]: Connection.Errors of disconnected recordset
От: Peter Fleischer Германия www.informtoools.de
Дата: 16.08.04 12:45
Оценка:
NPC wrote:
...
> Все гораздо сложнее, xml получен из .net-овского DataTable после
> натравливания на него xsl-я, примерно следуя коду из
> http://support.microsoft.com/default.aspx?scid=kb;en-us;316337
>
> Вот результирующий xml:
>
> <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
> xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
> xmlns:rs="urn:schemas-microsoft-com:rowset"
> xmlns:z="#RowsetSchema"> <s:Schema id="RowsetSchema">
> <s:ElementType name="row" content="eltOnly"
> rs:updatable="true"> <s:AttributeType name="Sign"
> rs:number="1" rs:baseCatalog="Location_Selection"
> rs:baseTable="BAPILOCRANGETable" rs:keycolumn="False"
> rs:autoincrement="False" rs:nullable="True"> <s:datatype
> dt:type="string" dt:maxlength="100" rs:maybenull="True" />
> </s:AttributeType> </s:ElementType> </s:Schema> <rs:data /> </xml>
>
> Он пустой, я его в качестве шаблона получаю из .NET приложения в VB6,

Это пока работает:

Set cn1 = New ADODB.Connection
With cn1
   .Provider = "MSPersist"
   .Open
End With
Set rs = New ADODB.Recordset
With rs
   .ActiveConnection = cn1
   .CursorLocation = adUseClient
   .CursorType = adOpenStatic
   .LockType = adLockOptimistic
   .Source = Text1.Text ' здесь адрес и название файла!
   .Open
End With
Set DataGrid1.DataSource = rs


А дальше пока не получается.

Peter
Posted via RSDN NNTP Server 1.8
Re[3]: Connection.Errors of disconnected recordset
От: Peter Fleischer Германия www.informtoools.de
Дата: 16.08.04 13:08
Оценка:
NPC wrote:
...
> Вот результирующий xml:
>
> <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
> xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
> xmlns:rs="urn:schemas-microsoft-com:rowset"
> xmlns:z="#RowsetSchema"> <s:Schema id="RowsetSchema">
> <s:ElementType name="row" content="eltOnly"

В этой секции не хватает разрешенеия на запись:

rs:write='true'


> rs:updatable="true"> <s:AttributeType name="Sign"

> rs:number="1" rs:baseCatalog="Location_Selection"
> rs:baseTable="BAPILOCRANGETable" rs:keycolumn="False"
> rs:autoincrement="False" rs:nullable="True"> <s:datatype
> dt:type="string" dt:maxlength="100" rs:maybenull="True" />
> </s:AttributeType> </s:ElementType> </s:Schema> <rs:data /> </xml>

Peter
Posted via RSDN NNTP Server 1.8
Re[4]: Connection.Errors of disconnected recordset
От: NPC  
Дата: 16.08.04 14:03
Оценка:
Петр, я очень благодарен тебе за потраченное время и желание мне помочь. Возможно, я в шаге от решения своих проблем.

PF>В этой секции не хватает разрешенеия на запись:

PF>rs:write='true'

Вот такой код (содранный у тебя до буквы, чтобы избежать ошибок) валится на rs!sign = "I" (и на rs.Fields("Sign") = "I", и на rs.Fields("Sign").Value = "I"):

Private Sub btnTemp_Click()
Dim cn1 As ADODB.Connection

Set cn1 = New ADODB.Connection
With cn1
.Provider = "MSPersist"
.Open
End With

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With rs
.ActiveConnection = cn1
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Source = "c:\\tovb.xml"
.Open
End With

Set DataGrid1.DataSource = rs

Dim strVal As String

rs.AddNew
rs!sign = "I"

rs.Update
End Sub

В файле tovb.xml лежит следующая инфа:

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:write="true" rs:updatable="true">
<s:AttributeType name="Sign" rs:number="1" rs:baseCatalog="Location_Selection" rs:baseTable="BAPILOCRANGETable" rs:keycolumn="False" rs:autoincrement="False" rs:nullable="true">
<s:datatype dt:type="string" dt:maxlength="100" rs:maybenull="True" />
</s:AttributeType>
</s:ElementType>
</s:Schema>
<rs:data />
</xml>

В Connection.Errors — та же ошибка про "Multiple-step operation...".

Что ж не так-то?
Re[6]: Connection.Errors of disconnected recordset
От: NPC  
Дата: 16.08.04 15:21
Оценка:
Peter, это решило мою траблу! Низкий тебе поклон и нет конца моей благодарности

С глубочайшим уважением,
NPC
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.