![]() |
![]() |
![]() |
|
V8: Работа с ADO Ø |
☑ | ||
---|---|---|---|---|
0
DiUs
19.04.05
✎
20:22
|
Вылетает странная ошибка при синтаксическом контроле (!) на строке НаборЗаписей.Fields("n_booklet") = инд;
ВнешняяОбработка.ВыгрузкаWC(19,37)}: Неопознанный оператор НаборЗаписей.Fields("n_booklet") <<?>>= инд; Вот текст: ... Соединение = Новый COMОбъект("ADODB.Connection"); СтрокаСоединения = ... Соединение.Open(СтрокаСоединения); НаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); Соединение.Execute("delete from orders"); Если НаборЗаписей.State = 1 ТОгда НаборЗаписей.Close(); КонецЕсли; НаборЗаписей.Open("orders",Соединение, 1, 3); Для инд = 0 По 9 Цикл НаборЗаписей.Fields("n_booklet") = инд; КонецЦикла; Соединение.Close(); По идее при синтакс-контроле 1С не знает какие методы есть у COMОбъектов. В чем может быть дело? |
|||
1
НВ
19.04.05
✎
20:58
|
Она считает Fields() за функцию и справедливо не дает присвоить
|
|||
2
черная лошадка
20.04.05
✎
09:09
|
нужно писать вот так:
НаборЗаписей.Fields("название_колонки").Value = НашаПеременная; |
|||
3
Gloom
20.04.05
✎
09:11
|
Вообще довольно замысловатый код...
|
|||
4
DiUs
20.04.05
✎
09:17
|
Спасибо. Помогло так:
ТекПоле1 = НаборЗаписей.Fields("n_booklet"); ТекПоле1 = инд; Но теперь проблема с MySQL (я к нему соединяюсь по ADO): Для инд = 0 По 9 Цикл НаборЗаписей.AddNew(); ТекПоле1 = НаборЗаписей.Fields("n_booklet"); ТекПоле1 = инд; НаборЗаписей.Update(); КонецЦикла; Ошибка при вызове метода контекста (Update): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT VALUES' at line 1 С MySQL никто не дружит? |
|||
5
Денис2
20.04.05
✎
09:20
|
(4) может, не выделываться и сотварить непосредственно ыражение Update?
|
|||
6
черная лошадка
20.04.05
✎
09:21
|
у меня есть смутное подозрение, что мускул ругается на то, что вы пытаетесь добавить в него запись, не установив какое-то обязательное для заполнение поле. то есть в каком-то поле таблицы не стоит значение по умолчанию и вы его тоже не заполняете. отсюда и ошибка.
|
|||
7
Gloom
20.04.05
✎
09:21
|
(4)Смотри, чего у тебя получается:
ТекПоле1 = НаборЗаписей.Fields("n_booklet"); //Сейчас в переменной ТекПоле1 находится ссылка на объект adodb.field ТекПоле1 = инд; //ссылка на adodb.field уничтожена, переменной ТекПоле1 присвоено значение переменной инд *** Не знает 1цэ ничего про члены классов по-умолчанию, ей надо всё явно указывать - см. (2) |
|||
8
черная лошадка
20.04.05
✎
09:23
|
ребят, код в (2) работал у меня из 7.7 и с мусколом, и с акцессом. не думаю, что из-под 8.0 работа с АДО отличается принципиально
|
|||
9
DiUs
20.04.05
✎
09:30
|
Понял. Спасибо.
НаборЗаписей.Fields("n_booklet").Value = инд; прохавало. Но теперь проблема со строковым значением (с числом и датой все ок) НаборЗаписей.Fields("name").Value = "тест"; Ошибка при установке значения атрибута контекста (Value): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена. Очень информативно. |
|||
10
черная лошадка
20.04.05
✎
09:58
|
может там длина строки 1 символ всего? проверь тип с пристрастием
|
|||
11
DiUs
20.04.05
✎
10:03
|
Исключено: varchar(128).
Вручную вставляется аж бегом.Тут похоже проблема на уровне ADO... До MySQL еще не добирается, иначе от него бы ошибка выскакивала |
|||
12
черная лошадка
20.04.05
✎
10:48
|
может попробовать еще одинарные кавычки добавить? не помню, как в мускуле задаются строки, но не в одинарных ли кавычках? может в этом дело все?
а у меня при работе с акцессом строки проходили на ура. так что имхо это связано с мускулом именно. |
|||
13
DiUs
20.04.05
✎
10:56
|
Да, в одинарных, но ADO ведь должно преобразовывать
Попробовал НаборЗаписей.Fields("name").Value = "'тест'"; - та же ошибка. Наверное, в 1С 8.0 и Аксессе немного разные форматы строк, что 1С-ский АДО не хавает.... |
|||
14
Gloom
20.04.05
✎
11:02
|
А в таблице первичный ключ имеется?
|
|||
15
SlavaZ
20.04.05
✎
11:06
|
Так ты ставишь значение НаборЗаписей.Fields("name").Value = "'тест'"; ?
Ведь результат НаборЗаписей - это результат селекта (таблица). Куда же ты 'тест' присваиваешь? |
|||
16
DiUs
20.04.05
✎
11:16
|
2 (14) Да, конечно:
create table orders( id int unsigned not null auto_increment, n_booklet int, name varchar(128), date_addr timestamp, cost int, PRIMARY KEY(id) ); 2 (15). Нет, это не тупо выборка, это RecordSet в терминах ADO. И код НаборЗаписей.AddNew(); НаборЗаписей.Fields("n_booklet").Value = инд; НаборЗаписей.Fields("date_addr").Value = ТекущаяДата(); НаборЗаписей.Fields("cost").Value = инд*10; НаборЗаписей.Update(); Работает отлично. Но если пытаюсь строку вставить (см. выше), то выскакивает ошибка. |
|||
17
SlavaZ
20.04.05
✎
11:20
|
Извени, не знал...
Тогда проблема с типами. Попробуй колонке name дать другой тип (ntext, nchar, char и т.п.) |
|||
18
Gloom
20.04.05
✎
11:22
|
Версия одбц-драйвера?
|
|||
19
DiUs
20.04.05
✎
11:27
|
При смене типа на char ничего не изменилось, а вот на text вылезла другая ошибка чуть ниже:
Ошибка при вызове метода контекста (Update): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Недопустимая длина строки или буфера НаборЗаписей.Update(); Интересно, в 1С-как-то можно явно указать, что строка -неограниченной длины: может в этом причина? |
|||
20
SlavaZ
20.04.05
✎
11:28
|
Можно попробывать на форме создать реквизит, записывать в него строку и подставлять в Update...
|
|||
21
DiUs
20.04.05
✎
11:29
|
MySQL ODBC 3.51 Driver
WinXP SP2 Itel Pentium (R) 4 CPU 3.00GHZ |
|||
22
Gloom
20.04.05
✎
11:40
|
Попробуй добавить в строку подключения опцию "Option=3" ...
|
|||
23
DiUs
20.04.05
✎
11:50
|
ПОЛУЧИЛОСЬ!!!
Спасибо всем. 2(22) А что это было? Потому что у меня в док-ции только ConnectOptionEnum Constant Value Description adConnectUnspecified -1 Default. Opens the connection synchronously (after). adAsyncConnect 16 Opens the connection asynchronously (before). |
|||
24
Gloom
20.04.05
✎
11:56
|
(23)Это не адошная опция, а MyODBC. Соотвествует флагам "Don't Optimize Column Widths"(1) и "Return Matching Rows"(2) в настройках DSN.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |