Может быть не в этот подфорум писать надо, посему заранее прошу прощения.
Мне необходимо понять причину ошибки "Multi-step operation generated errors...", и в качестве последней попытки я хотел бы вычитать коллекцию ошибок самого ADO — может быть там содержится больше информации. Проблема в том, что Recordset у меня создан с помощью rs.Open 123.xml, соответственно у него нет объекта Connection, к которому уже принадлежала бы коллекция Errors.
Я новичок и в VB, и в ADO одновременно, поэтому ответ может быть где-то совсем на поверхности, но я не вижу его, уже потратив рабочий день. Буду заранее благодарен за любые наводки.
С уважением,
NPC
PS Ошибка, описанная выше, возникает при присвоении строкового значения полю. AddNew (без параметров) проходит без проблем, после Update даже запись появляется, но как только пытаюсь присвоить строку в один из fields (а они все string у меня, и размер я дергал, и 100, и 255 ставил), даже если Null пытаюсь присвоить — сразу падает.
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, Вы писали:
PF>Recordset соответствует требованиям? Т.е., XML-файл получен путем rs.save? Если не так, то содержание файла не годится для этой технологии.
Он пустой, я его в качестве шаблона получаю из .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
И все же, к моему основному вопросу — можно ли получить некий Connection для рекордсета, загруженного из XML строки? Мне это надо ради доступа к коллекции Connection.Errors, поскольку я надеюсь, что это может мне помочь обнаружить больше информации по происходящей ошибке.
(я уже в таком состоянии, что готов проверить абсолютно все, даже дурацкие, идеи)
Re[3]: Connection.Errors of disconnected recordset
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
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[4]: Connection.Errors of disconnected recordset
Петр, я очень благодарен тебе за потраченное время и желание мне помочь. Возможно, я в шаге от решения своих проблем.
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
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" попало на туда!