Имя: Пароль:
1C
 
Внешние источники данных. Узнать ID добавленной записи
0 Stim
 
27.05.15
14:43
Подключена БД на MySQL.
Добавляю запись:

//1. Занести запись в SITE
OPER_ID    = MAX_ID;
SITENAME  = Транскрипция(OPERNAME);

Стр = "INSERT INTO `SITE` (OPER_ID, SITENAME) VALUES("+OPER_ID+", "+SITENAME+")";

Попытка
      Соединение.Execute(Стр);
Исключение
      //Сообщить("Что то пошло не так :( ");
      сообщить(ОписаниеОшибки());
      Возврат;
  КонецПопытки;
  
Добавление отрабатывает без проблем.
Теперь хочу получить ID добавленной записи:


Запрос = новый запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    SITE.ID
               |ИЗ
               |    ВнешнийИсточникДанных.Биллинг.Таблица.SITE КАК SITE
               |ГДЕ
           |    SITE.SITENAME = &SITENAME
               |И    SITE.OPER_ID = &OPER_ID";
запрос.УстановитьПараметр("SITENAME",SITENAME);              
запрос.УстановитьПараметр("OPER_ID",OPER_ID);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ID_SITE = Выборка.ID;
КонецЕсли;

Ошибка:
Ошибка выполнения запроса
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42000
Номер ошибки: 1064
Описание: [MySQL][ODBC 5.1 Driver][mysqld-5.1.69-log]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 '"OPER_ID" = 252)' at line 4


почему так?
Поле OPER_ID - числовое.
1 ЧеловекДуши
 
27.05.15
14:47
(0) ID и OPER_ID , как то разные поля, нет? :)
2 Fragster
 
гуру
27.05.15
14:49
а почему добавляешь через ADO, а получаешь через ВИД?
3 ЧеловекДуши
 
27.05.15
14:50
А вообще, SQL запросы лучше отладить на SQL сервере. А не из 1С.
4 Stim
 
27.05.15
14:50
(2) потому что через ВИД нельзя добавить.
или можно?
5 Stim
 
27.05.15
14:50
(1)разные. читай внимательнее код
6 eklmn
 
гуру
27.05.15
14:51
лучше все-таки посылать запрос скуля..
7 Fragster
 
гуру
27.05.15
14:52
(4) или можно, начиная с 8.3.что-то
8 Fragster
 
гуру
27.05.15
14:53
а вообще - в описании ВИД точно правильно тип указан? и в параметрах подклчения тип СУБД?
9 ЧеловекДуши
 
27.05.15
14:56
(5) Ага Увидел. Ты надеялся, что при добавлении записи, ИД ему присвоить автоматом.
10 Stim
 
27.05.15
14:56
(7) ну не важно как добавлять.

даже простой код:

Запрос = новый запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    SITE.ID
               |ИЗ
               |    ВнешнийИсточникДанных.Биллинг.Таблица.SITE КАК SITE
               |ГДЕ
               |     SITE.OPER_ID = &OPER_ID";
запрос.УстановитьПараметр("OPER_ID",252);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ID_SITE = Выборка.ID;
КонецЕсли;


выдает ошибку
11 Fragster
 
гуру
27.05.15
14:57
(9) ты не поверишь, но как раз это норма.
12 ЧеловекДуши
 
27.05.15
14:57
(10) А на том сервере, где вертится эта БД, такой запрос тоже ошибку выдает?

Я имею ввиду, такой же, но преобразованный в SQL-T
13 Stim
 
27.05.15
14:59
(8) в описании OPER_ID - число(10,0)
14 sapphire
 
27.05.15
14:59
(0) Так тебе и надо, Паша, MySQL не твоё. Почитал бы чаво нить.
15 ЧеловекДуши
 
27.05.15
14:59
И еще, в Запросе ты передаешь значения "OPER_ID". И какого оно типа?
16 sapphire
 
27.05.15
15:00
(13) И с чего вдруг оно должно автоматом присваивается?
Где уверенность, что поле автоинкрементальное?
17 sapphire
 
27.05.15
15:01
Биллинг на мускуле, это, конечно, жесть :)
18 Stim
 
27.05.15
15:02
(16) присваивается, автоинкрементальное
19 Stim
 
27.05.15
15:02
(15) см 13
20 Fragster
 
гуру
27.05.15
15:02
(17) а что? до пары сотен тысяч абонентов - взлетит без проблем. не надо просто покупать шаред хостинг за 100 рублей для него, а купить дедик за 3к
21 Fragster
 
гуру
27.05.15
15:03
(13) а тип СУБД прописан в подключении?
22 sapphire
 
27.05.15
15:04
Для того, что бы нормально отрабатывал внешний источник на мускуле... Я бы.. Но, это же я, а не Паша.
Прилинковал бы мускул к скулю. и там уже исвращался.
23 Asmody
 
27.05.15
15:06
SELECT LAST_INSERT_ID()
24 sapphire
 
27.05.15
15:08
(20) Та речь-то не о том.
Бог с ним, мс мускулом и его форками,кому нравится пусть юзает.
Но, Павлик решил, что робята из 1С такие светлоголовые, что переварят любой диалект СУБД, лично я в этом не уверен, и (0) тому подтверждение.
25 sapphire
 
27.05.15
15:08
(23) Это, Вить, еще знать надоть.
26 Stim
 
27.05.15
15:09
(21) да. сейчас передобавил таблицу SITE с типом СУБД MySQL
27 Asmody
 
27.05.15
15:10
(25) Так это гуглится на раз. 7.5 из 10 "веб-программистов" регулярно задают этот вопрос.
28 Stim
 
27.05.15
15:10
(23) не взлетит. Нужен ID добавленной записи, а не последней.
мб между добавлением и чтением еще с 10 записей добавится
29 sapphire
 
27.05.15
15:11
(27) Павлика в гугле забанели, наверное:)
На дубовом или 330 спрашивал - ему не ответили - решил клоунаду здесь продолжить.
30 Stim
 
27.05.15
15:11
+26 все равно выдает ошибку.

если искать по SITENAME (строка), то находит без проблем.
А по числовому полю выдает ошибку
31 Stim
 
27.05.15
15:11
(29) Пожалуйста, не флуди
32 sapphire
 
27.05.15
15:13
(31) Ты бы почитал что-нибудь про диалект MySQL
33 Stim
 
27.05.15
15:18
запрос
Запрос = новый запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    SITE.ID
               |ИЗ
               |    ВнешнийИсточникДанных.Биллинг.Таблица.SITE КАК SITE
               |ГДЕ
               |     SITE.ID = &ID";          
запрос.УстановитьПараметр("ID","14");

выполняется без ошибок.

Единственное отличие ID от OPER_ID в том, что у OPER_ID стоит признак "разрешить NULL"
34 Stim
 
27.05.15
15:18
+
запрос.УстановитьПараметр("ID",14);

отрабатывает так же
35 НЕА123
 
27.05.15
15:19
(33)+
символ "_"
36 sapphire
 
27.05.15
15:25
выложи результат
SHOW COLUMNS FROM SITE
37 Stim
 
27.05.15
15:27
(35) а что не так с символом _ ?
38 Stim
 
27.05.15
15:30
(36)
команда Select all Statement:


SELECT `SITE`.`ID`,
    `SITE`.`SITENAME`,
    `SITE`.`rate_t`,
    `SITE`.`rate_o`,
    `SITE`.`OPER_ID`,
    `SITE`.`roum_rate_s`,
    `SITE`.`roum_rate_b`,
    `SITE`.`client_rate`,
    `SITE`.`rate_inet`,
    `SITE`.`rate_inet_o`,
    `SITE`.`rate_inet_t`,
    `SITE`.`hunt_mode`,
    `SITE`.`disc_rate_o`,
    `SITE`.`disc_rate_t`,
    `SITE`.`disc_roum_rate_s`,
    `SITE`.`disc_roum_rate_b`,
    `SITE`.`disc_client_rate`,
    `SITE`.`disc_inet_t`,
    `SITE`.`disc_inet_o`,
    `SITE`.`serve_rate_o`,
    `SITE`.`serve_roum_rate_s`,
    `SITE`.`serve_inet_t`,
    `SITE`.`serve_inet_o`,
    `SITE`.`serve_client_rate`,
    `SITE`.`serve_rate_t`,
    `SITE`.`serve_roum_rate_b`,
    `SITE`.`RGRP_ID_O`,
    `SITE`.`RGRP_DENY_ID_O`,
    `SITE`.`RGRP_ID_T`,
    `SITE`.`RGRP_DENY_ID_T`
FROM `voip`.`SITE`;
39 sapphire
 
27.05.15
15:30
(37) Тип в мускуле у поля OPER_ID?
40 sapphire
 
27.05.15
15:31
(38) Тяжелый случай.
41 Ёпрст
 
27.05.15
15:32
хз че там за синтекс, так катит ?

where `SITE`.`OPER_ID`=252
42 Stim
 
27.05.15
15:33
(39) Int(11)
43 sapphire
 
27.05.15
15:33
https://dev.mysql.com/doc/refman/5.7/en/show-columns.html
SHOW [FULL] COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]
SHOW COLUMNS displays information about the columns in a given table. It also works for views. The LIKE clause, if present, indicates which column names to match. The WHERE clause can be given to select rows using more general conditions, as discussed in Section 20.31, “Extensions to SHOW Statements”.

SHOW COLUMNS displays information only for those columns for which you have some privilege.
44 sapphire
 
27.05.15
15:34
(41) Это одинце так транслирует
45 Fragster
 
гуру
27.05.15
15:34
короче, гугли, в каком релизе 1с была исправлена ошибка 10103123  (SW672486)  Поле внешнего источника данных MySQL, содержащее знак подчеркивания в имени
46 НЕА123
 
27.05.15
15:35
(37)
может нормально.
но у меня были проблемы именно с этим символом в идентификаторах в запросах (когда, в какой СУБД - не помню) .
47 sapphire
 
27.05.15
15:36
(45) Я б прилинковал мускул к сакле и не парился
48 Stim
 
27.05.15
15:38
(45)
10103123  (SW672486)  Поле внешнего источника данных MySQL, содержащее знак подчеркивания в имени

Проблема:
При обращении к полю внешнего источника данных MySQL, содержащему в имени знак подчеркивания, происходит ошибка
Ошибка выполнения запроса по причине: Ошибка внешней базы данных: ошибка при выполнении запроса по причине: Ошибка ODBC. SQLSTATE: 42000 Номер ошибки: 1064 Описание: [MySQL][ODBC 5.1 Driver][mysqld-5.0.51a-24+lenny5-log] 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 '"partner_id"

Дата публикации:
2012-06-14
49 Барматолог
 
27.05.15
15:39
Нахер бы они усгались эти внешние источники. Толку от них, как с козла молока.
50 Stim
 
27.05.15
15:40
интересное решение
http://catalog.mista.ru/public/176787/
51 sapphire
 
27.05.15
15:41
52 sapphire
 
27.05.15
15:41
(49) +1
53 Stim
 
27.05.15
15:42
Дата публикации:
2012-06-14
у меня платформа этого года.
неужели они за 3 года не исправили эту ошибку?
54 sapphire
 
27.05.15
15:45
(53) Говорят, что в 8.3.1.531 исправлено см (51)
55 НЕА123
 
27.05.15
15:47
(49)
динамический список внешнего источника мне нравится.
56 Stim
 
27.05.15
15:50
(54) Значит, не исправлено.
или ошибка в другом
57 Ёпрст
 
27.05.15
15:56
А экранировать кавычками или еще как нельзя этот "_" ?
58 sapphire
 
27.05.15
15:59
(57) говорят, можно, см (50)
59 sapphire
 
27.05.15
15:59
(56) Да поставь МС СКЛ Экспресс присоедени к нему мускул и не мучайся
60 Барматолог
 
27.05.15
16:15
(55) Он часто применяется?
61 Барматолог
 
27.05.15
16:16
(58) мысль годная, но похоже у него вебка на мускуле висит
62 Fragster
 
гуру
27.05.15
16:16
там в комментах хороший способ - создать вьюху без "_". И не надо ничего устанавливать, линковать
63 Барматолог
 
27.05.15
16:16
(59) сорри, не дочитал)
64 Stim
 
27.05.15
17:04
(62) это как?
65 Fragster
 
гуру
27.05.15
17:26
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.