|
ADO Excel, пакетный INSERT | ☑ | ||
---|---|---|---|---|
0
decdmb
18.01.12
✎
09:19
|
Пытаюсь сделать запись в excel через ADO:
СтрокаПодключения = " |Provider=Microsoft.Jet.OLEDB.4.0; |Data Source=" + ИмяФайла + "; |Extended Properties=""Excel 8.0;HDR=No;"";"; // Создаем объект ADOX.Catalog Catalog = Новый COMОбъект("ADOX.Catalog"); Catalog.ActiveConnection = СтрокаПодключения; // Создаем таблицу и добавляем в неё столбцы Table = Новый COMОбъект("ADOX.Table"); Table.Name = "Table"; Table.Columns.Append("col1"); Table.Columns.Append("col2"); // Присоединяем таблицу Catalog.Tables.Append(Table); Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрокаПодключения); Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Command.CommandType = 1; ////////// Command.CommandText = "INSERT INTO [Table] VALUES('1', 'aaaa'); |INSERT INTO [Table] VALUES('2', 'bbbb');" ; Command.Execute(); Connection.Close(); С одним INSERT за вызов Execute() все работает. Если в command пишу 2 подряд INSERTа то вылетает ошибка: Произошла исключительная ситуация (Microsoft JET Database Engine): Обнаружены символы за пределами инструкции SQL. Находил вариант, что запрос необходимо помещать между BEGIN ... END; При таком раскладе вылетает ошибка: {Форма.Форма.Форма(143)}: Ошибка при вызове метода контекста (Execute) Command.Execute(); по причине: Произошла исключительная ситуация (0x80004005) |
|||
1
DCKiller
18.01.12
✎
09:21
|
А мож в конце текста последнее ";" - того?.. лишнее? Не?
|
|||
2
decdmb
18.01.12
✎
09:23
|
(1) Ты имеешь ввиду после 2-го insert ;? если убрать то первая ошибка вылетает
|
|||
3
decdmb
18.01.12
✎
09:36
|
up...
|
|||
4
shuhard
18.01.12
✎
09:36
|
(0) будь скромнее,
используй метод ADDNEW рекосрдсета |
|||
5
Ковычки
18.01.12
✎
09:54
|
ограничения джета
|
|||
6
decdmb
18.01.12
✎
20:35
|
(4) А как в Recordset добавить несколько записей?
Пробую так: recSet.Open("[Table]", Connection, 2, 4, 2); recSet.AddNew(); recSet.Fields(0).Value = "1"; recSet.Fields(1).Value = "aaaa"; recSet.AddNew(); recSet.Fields(0).Value = "2"; recSet.Fields(1).Value = "bbbb"; recSet.UpdateBatch(3); На 2ом AddNew вылетает: {Форма.Форма.Форма(175)}: Ошибка при вызове метода контекста (AddNew) recSet.AddNew(); по причине: Произошла исключительная ситуация (Provider): Число строк с отложенными изменениями превышает предельно допустимое. |
|||
7
ilya_i
18.01.12
✎
20:43
|
Есть еще COMSAFEARRAY
|
|||
8
decdmb
19.01.12
✎
08:24
|
(7) Там почти то же самое как и на прямую через COMОбъект("Excel.Application"). А хочется без этого объекта и побыстрее
|
|||
9
Паучог
19.01.12
✎
08:40
|
А если в (0) после VALUES перечислять пары значений, а не несколькими INSERTами пользоваться?
VALUES('1', 'aaaa'),('2', 'bbbb') |
|||
10
decdmb
19.01.12
✎
08:59
|
(9)
Количество = 0 {Форма.Форма.Форма(155)}: Ошибка при вызове метода контекста (Execute) Command.Execute(); по причине: Произошла исключительная ситуация (Microsoft JET Database Engine): Пропущен символ (;) в конце инструкции SQL. Ставлю в конце запроса ";" - ошибка та же. |
|||
11
Ковычки
19.01.12
✎
09:01
|
(9) такой синтаксис у мускуля, но не у джета
|
|||
12
Паучог
19.01.12
✎
09:08
|
(6) у RecordSet'а какие параметры установлены, после Новый COMОбъект?
|
|||
13
Паучог
19.01.12
✎
09:10
|
к (12). Вижу.. в Open установлены.
|
|||
14
decdmb
19.01.12
✎
09:17
|
(12)
Выражение Значение recSet COMОбъект AbsolutePage Ошибка чтения значения AbsolutePosition Ошибка чтения значения ActiveCommand ActiveConnection BOF Ошибка чтения значения Bookmark Ошибка чтения значения CacheSize 100 CursorLocation 2 CursorType 2 DataMember "" DataSource COMОбъект EOF Ошибка чтения значения EditMode Ошибка чтения значения Fields COMОбъект Filter 0 Index "" LockType 4 MarshalOptions 0 MaxRecords 0 PageCount Ошибка чтения значения PageSize 10 Properties COMОбъект RecordCount Ошибка чтения значения Sort "" Source "" State 0 Status Ошибка чтения значения StayInSync Истина |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |