Имя: Пароль:
1C
1С v8
Выгрузка в скл
0 Мисти
 
30.07.14
10:09
Уже мильон табличек в скл из 1С заполнила!
И вдруг - затык, вроде, всё, как обычно, а она ругается -
{Форма.Форма1.Форма(1104)}: Ошибка при вызове метода контекста (Parameters)
            Cmd.Parameters(0).Value = СтрОбъектСКЛ.UI1C;
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Сведения о параметрах не могут быть выведены из инструкций SQL. Задайте сведения о параметрах перед командой подготовки.
1 Мисти
 
30.07.14
10:12
Для Каждого СтрОбъектыАр из ОбъектыАр Цикл
        ЗаписатьОбъектыПолн(СтрОбъектСКЛ,СтрОбъектыАр);
        ОбработкаПрерыванияПользователя();          
        ТекстЗапроса = "SELECT top(1) * FROM gtw_Object WHERE [UI1C] = ?";
        Cmd.CommandText = ТекстЗапроса;
        Cmd.Parameters(0).Value = СтрОбъектСКЛ.UI1C;
        Выборка = Cmd.Execute();
        Если Выборка.EOF() Тогда //- нет такой строки, надо добавить              
            ТекстЗапроса = "INSERT INTO gtw_Object VALUES
            |(NULL,
            |?,    
            |?,  
            |?,      
            |?,      
            |?,
            |?,
            |?,
            |NULL,
            |NULL,
            |NULL,
            |?,
            |?,
            |?,
            |NULL,
            |?,    
            |?,  
            |?,      
            |?,      
            |?,
            |NULL,
            |?,    
            |?,    
            |?,  
            |?,      
            |?,      
            |?,
            |?)";
            Cmd.CommandText = ТекстЗапроса;
            //Cmd.Parameters(0).Value = СтрОбъектСКЛ.ID;
            Cmd.Parameters(0).Value = СтрОбъектСКЛ.UI1C;

Вот на последней строчке ругается.
2 Wobland
 
30.07.14
10:15
что-то не похоже на правду
3 Wobland
 
30.07.14
10:16
текст запроса крив: селект топ 1 ...
4 Cube
 
30.07.14
10:17
(1) У тебя параметров в запросе-то нет... Массив параметров пуст, а ты обращаешься к первому элементу пустого массива...
5 Wobland
 
30.07.14
10:17
(4) окстись. WHERE [UI1C] = ?
6 Cube
 
30.07.14
10:18
(1) Какой ужас... Писать код красиво не пробовала? :)
7 Мисти
 
30.07.14
10:18
Так она ругается на 2 запрос!
ТекстЗапроса = "INSERT INTO gtw_Object VALUES
            |(NULL, ...,...
(6) Нет, а как красиво?
8 Cube
 
30.07.14
10:19
(5) Это первый запрос... Потом есть второй...
9 Мисти
 
30.07.14
10:20
(8) А там и не должно быть никаких условий - добавляем строку и заполняем столбцы.
10 Wobland
 
30.07.14
10:20
(8) с кучей параметров...
11 Мисти
 
30.07.14
10:21
(3) Это мне поправил хозяин базы
"SELECT top(1) * FROM gtw_Object WHERE [UI1C] = ?" - говорит, надо так.
12 Cube
 
30.07.14
10:21
(7) "Нет, а как красиво?"
На Великом и Могучем с нормальными названиями переменных, для начала...
13 Wobland
 
30.07.14
10:23
(12) ПОВСТАВИТЬ В gtw_ObjectЪ ЭТИ ЗНАЧЕНИЯ
(НУЛЛЪ, ?...)
14 Cube
 
30.07.14
10:23
Ай, блин! Это вы же с SQL работаете))) Я что-то пропустил :))
Не обращайте на меня внимания)
15 Мисти
 
30.07.14
10:23
(12) А какие там названия не такие?
16 Cube
 
30.07.14
10:25
(15) Всё нормально, не обращай внимания))
17 Wobland
 
30.07.14
10:25
короче, я за (2) ;)
18 Мисти
 
30.07.14
10:32
Что именно не похоже на правду?
ТекстЗапроса = "INSERT INTO gtw_Object VALUES ? Вообще, возможно, после массовых исправлений этот кусок ни разу и не работал - таблицы уже все были (старые) заполнены и работает второй кусок, где замена.
19 Wobland
 
30.07.14
10:33
строка 1104 - это та крайняя из (1)?
20 Andrewww123
 
30.07.14
10:35
В (4) же написано всё..
21 Мисти
 
30.07.14
10:37
(19) Да!
(20) А какие параметры, если это новая строка?
22 Wobland
 
30.07.14
10:37
(20) текст запроса е подскажешь?
23 Andrewww123
 
30.07.14
10:38
(21) В том-то и дело :)
Параметров нет в запросе, значит строка "Cmd.Parameters(0).Value = СтрОбъектСКЛ.UI1C;" лишняя
24 Andrewww123
 
30.07.14
10:39
(22) Ну там вроде написано всё, выше
25 Мисти
 
30.07.14
10:40
А как тогда добавить строку?
26 Andrewww123
 
30.07.14
10:43
(25) Закомментировать последнюю строку, которая "Cmd.Parameters(0).Value = СтрОбъектСКЛ.UI1C;"
27 Wobland
 
30.07.14
10:46
кстати, как насчёт parameters.refresh?
28 rsv
 
30.07.14
10:51
(0) Если 1С  на SQL - не проще ли встроенной службой экспорта данных ?
29 Мисти
 
30.07.14
11:05
Не проще, потому что я не знаю, что это такое, а таким способом уже всё понаписано.
(26) А заполнить-то как строку?
(27) А раньше-то почему работало?
30 Andrewww123
 
30.07.14
11:11
(29) Что значит заполнить строку?
31 Мисти
 
30.07.14
11:18
Проставить значения столбцов.
32 Andrewww123
 
30.07.14
11:23
(31) Уже не знаю что отвечать :) Наверное нужно знаки вопроса заменить какими-то значениями и выполнить запрос
33 Мисти
 
30.07.14
11:29
Может, у меня второй запрос перестал работать из-за того, что изменился первый?
34 Andrewww123
 
30.07.14
11:30
Может, всё может быть :)
35 Мисти
 
30.07.14
11:38
Само по себе вот это работает!
    Cmd = СоединитьсяСSQL();
    ТекстЗапроса = "INSERT INTO gtw_Route VALUES
    |(NULL,    
    |?,  
    |?)";     
    Cmd.CommandText = ТекстЗапроса;
    Cmd.Parameters(0).Value = "Тренировка";
    Cmd.Parameters(1).Value = ТекущаяДата();
    Cmd.Execute();
    Сообщить("Готово!");
36 Мисти
 
30.07.14
11:39
(23) Все знаки вопроса - и есть параметры, а не перечислены поименно, потому что идут по порядку.
37 Мисти
 
30.07.14
11:44
ТекстЗапроса = "SELECT top(1) * FROM gtw_Object WHERE [UI1C] = ?"; - надо править первый запрос.
Как?? Он у меня работал раньше (не помню, как именно), а потом мне хозяин базы его поправил, сам-то запрос работает и сейчас, но, видимо, это как-то повлияло на второй запрос.
38 katc
 
30.07.14
11:47
(0)
  Cmd.Parameters(0).Value = "{" +СтрОбъектСКЛ.UI1C + "}";

пиши так, если тип в скуле уникидентификатор.
39 Wobland
 
30.07.14
11:48
(38) от скобок сразу параметр найдётся?
40 Wobland
 
30.07.14
11:49
(39) причём двойных. там в строке уже со скобками
41 Мисти
 
30.07.14
11:49
(38) Это мы уже проходили! Там он уже построен как надо, ругань - на вообще параметр.
42 Мисти
 
30.07.14
11:49
(40) Скажи, пожалуйста, как там первый был запрос написан раньше, ты же знаешь? :)
43 Wobland
 
30.07.14
11:50
(42) не скажу - не помню. я ошибков не вижу
44 Мисти
 
30.07.14
11:55
По-моему, было
SELECT top 1
вместо  
SELECT top(1) *
45 Wobland
 
30.07.14
11:57
(44) сходи в консоль и сделай там select top (1) 'with brackets'. так узнаешь о допустимости скобок. я впервые вижу такое
46 Wobland
 
30.07.14
11:57
1ска, кстати, не даёт
{(1, 16)}: Ожидается константа
выбрать первые <<?>>(1) "со скобками"
47 Мисти
 
30.07.14
12:00
"SELECT top 1 FROM gtw_Object WHERE [UI1C] = ?" - вот так пишу?
48 Wobland
 
30.07.14
12:01
(47) 1. select top (1) 'with brackets'
2. select top 1 'with brackets'
49 Wobland
 
30.07.14
12:01
опять текстовая отладка начинается ;)
50 Мисти
 
30.07.14
12:03
{Форма.Форма1.Форма(1071)}: Ошибка при вызове метода контекста (Execute)
        Выборка = Cmd.Execute();
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Неправильный синтаксис около ключевого слова "FROM".
51 Мисти
 
30.07.14
12:04
Что такое - 'with brackets' ??
52 Wobland
 
30.07.14
12:05
(50) в консоли
(51) левый строковый литерал. пиши 40, если смущает
53 Мисти
 
30.07.14
12:10
SELECT TOP 1 * - работает
54 Wobland
 
30.07.14
12:11
(53) не верю. а со скобками?
55 Мисти
 
30.07.14
12:14
А второй запрос всё равно не работает!
{Форма.Форма1.Форма(1104)}: Ошибка при вызове метода контекста (Parameters)
            Cmd.Parameters(0).Value = СтрОбъектСКЛ.UI1C;
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Сведения о параметрах не могут быть выведены из инструкций SQL. Задайте сведения о параметрах перед командой подготовки.

И со скобками первый работал.
56 Мисти
 
30.07.14
12:26
Может, ну ее, ошибку?
Как-нибудь по-другому переписать?
57 Wobland
 
30.07.14
12:27
(56) у меня вот прямо сейчас есть два варианта для попробовать. но кому это интересно?
58 Мисти
 
30.07.14
12:28
Мне, конечно, кому же еще?
59 Wobland
 
30.07.14
12:29
(58) -> (27), (32)
60 Мисти
 
30.07.14
12:30
Отлично, как это написать-то?
parameters.refresh или
знаки вопроса заменить какими-то значениями и выполнить запрос
61 Wobland
 
30.07.14
12:34
Cmd.Parameters.Refresh(); после установки текста
62 Мисти
 
30.07.14
13:18
Форма.Форма1.Форма(1110)}: Ошибка при вызове метода контекста (Refresh)
            Cmd.Parameters.Refresh();
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Сведения о параметрах не могут быть выведены из инструкций SQL. Задайте сведения о параметрах перед командой подготовки.
63 Мисти
 
30.07.14
13:20
Если Выборка.EOF() Тогда //- нет такой строки, надо добавить              
            ТекстЗапроса = "INSERT INTO gtw_Object VALUES
            |(NULL,
            |?,    
            |?,  
            |?,      
            |?,      
            |?,
            |?,
            |?,
            |NULL,
            |NULL,
            |NULL,
            |?,
            |?,
            |?,
            |NULL,
            |?,    
            |?,  
            |?,      
            |?,      
            |?,
            |NULL,
            |?,    
            |?,    
            |?,  
            |?,      
            |?,      
            |?,
            |?)";
            
            
            Cmd.CommandText = ТекстЗапроса;
            Cmd.Parameters.Refresh();
64 Wobland
 
30.07.14
13:21
а дай пощупать
65 Мисти
 
30.07.14
13:29
С удовольствием!
67 Fragster
 
гуру
30.07.14
13:37
кто-нибудь уже написал использовать для каждого повторяющегося запроса отдельный объект Adodb.command?
68 Wobland
 
30.07.14
13:46
подумаешь, одно поле в запросе лишнее. вот текст и не узнавался
69 Мисти
 
30.07.14
13:46
Ларчик просто открывался!!