Имя: Пароль:
1C
 
Ошибка при преобразовании типа данных nvarchar к bit
0 Мисти
 
21.08.14
19:10
Из 1С записываю в базу скл.
Ругается на Cmd.Execute(), когда определены 12 параметров.
bit из них только один. Пыталась туда 0 засунуть, Ложь... Что она хочет??
1 Мисти
 
21.08.14
19:13
FALSE тоже не хочет.
2 Господин ПЖ
 
21.08.14
19:13
bit она хочет
3 Voronve
 
21.08.14
19:14
-1 запихни
4 Мисти
 
21.08.14
19:19
Почему-то пару дней назад 0 и 1 ее устраивали.
Как бит изобразить в 1С?
5 _fvadim
 
21.08.14
19:21
а нолик не в кавычках?
6 Мисти
 
21.08.14
19:22
Нет, я просто 0 писала. Теперь никак не хочет.
7 _fvadim
 
21.08.14
19:23
а поле обязательное? мож его вообще опустить?

ну и запрос бы увидеть.
8 Мисти
 
21.08.14
19:25
Ага, поле обязательное.
9 Мисти
 
21.08.14
19:43
Добилась новой ругани!
Конфликт типов операндов: bit несовместим с uniqueidentifier
Это я закомментировала всё, что можно не писать (вдруг где-то еще проблема?

            ТекстЗапроса = "INSERT INTO gtw_ContractImport VALUES
            |(?,
            |NULL,    
            |NULL,  
            |?,      
            |?,      
            |NULL,
            |NULL,
            |NULL,
            |NULL,
            |NULL,
            |NULL,
            |?,

            |NULL)";
            
            //[Id] [uniqueidentifier] NULL,               1
            //    [UI1C] [nvarchar](50) NULL,               2
            //    [ModifiedOn1C] [datetime2](7) NULL,       3
            //    [DoDelete] [bit] NOT NULL,                4
            //    [Number] [nvarchar](250) NOT NULL,        5
            //    [ContractType] [nvarchar](50) NULL,       6
            //    [ContractDate] [datetime2](7) NULL,       7
            //    [StartDate] [datetime2](7) NULL,          8
            //    [DueDate] [datetime2](7) NULL,             9
            //    [AccountId] [nvarchar](50) NULL,           10
            //    [TerminationContractDate] [datetime2](7) NULL,  11
            //    [TerminationReason] [nvarchar](250) NOT NULL,   12
            //    [PrimaryContractId] [uniqueidentifier] NUL        13
            Cmd.CommandText = ТекстЗапроса;  
            Если СокрЛП(СтрДоговорСКЛ.ID)=""  Тогда
            Иначе
                Cmd.Parameters(0).Value = СтрДоговорСКЛ.ID;
            КонецЕсли;
            
            Cmd.Parameters(1).Value = FALSE;//СтрДоговорСКЛ.DoDelete;
            
            Cmd.Parameters(2).Value = СтрДоговорСКЛ.Number;
            
            Cmd.Parameters(3).Value = СтрДоговорСКЛ.TerminationReason;
            
            Cmd.Execute();
10 vicof
 
21.08.14
20:04
молотком уже воспользоваться предлагали?
11 ДенисЧ
 
21.08.14
20:08
(10) молоток в данном случае не поможет. Только стена и цианид. Причём совместно.
12 vicof
 
21.08.14
20:13
" Пыталась туда 0 засунуть, Ложь... Что она хочет??"
не нужно "туда" что попало совать)
13 Мисти
 
21.08.14
21:39
Так чего, есть мысль, или только издевательства?
14 Jaap Vduul
 
21.08.14
23:07
(13)
Т.к. при вставке имена полей у тебя не обозначены, то, скорее всего, порядок полей в таблице не соответствует твоим ожиданиям.
Для проверки можешь выполнить такой запрос:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'gtw_ContractImport'
ORDER BY ORDINAL_POSITION

и проверить, соответствует ли полученный результат тому, что указано в (9)
15 Мисти
 
22.08.14
09:36
Так а я же порядок полей описала! Я их вижу в таблице, они что, могут выглядить одним способом, а стоять - другим?
16 ДенисЧ
 
22.08.14
09:39
(15)
insert into table (fld1, fld2, ....) values (val1, val2,...)

но ты всё упорно не хочешь читать документацию...
17 Мисти
 
22.08.14
09:45
ТекстЗапроса = "  SELECT COLUMN_NAME
|FROM INFORMATION_SCHEMA.COLUMNS
|WHERE TABLE_NAME = N'gtw_ContractImport'
|ORDER BY ORDINAL_POSITION";
        Cmd.CommandText = ТекстЗапроса;
        Выборка = Cmd.Execute()
А где я увижу результат? Я согласна в отладчике, но как?

(16) - в смысле, что все можно поименовать?
Я знаю, но я уже написала 3000 без имен, потому что все подряд записываю и всё работало, а тут вдруг перестало.
18 ДенисЧ
 
22.08.14
09:46
(17) та под действием санкций пока ещё, не забыла?
19 Мисти
 
22.08.14
10:06
Не понимаю.
Мне всего - то - заполнить все столбцы. Вот найти всё нужное в 1с - это задача!!
20 Мисти
 
22.08.14
10:08
Если я вижу такую таблицу
CREATE TABLE [dbo].[gtw_ContractImport](
    [Id] [uniqueidentifier] NULL,
    [UI1C] [nvarchar](50) NULL,
    [ModifiedOn1C] [datetime2](7) NULL,
    [DoDelete] [bit] NOT NULL,
    [Number] [nvarchar](250) NOT NULL,
    [ContractType] [nvarchar](50) NULL,
    [ContractDate] [datetime2](7) NULL,
    [StartDate] [datetime2](7) NULL,
    [DueDate] [datetime2](7) NULL,
    [AccountId] [nvarchar](50) NULL,
    [TerminationContractDate] [datetime2](7) NULL,
    [TerminationReason] [nvarchar](250) NOT NULL,
    [PrimaryContractId] [uniqueidentifier] NULL
) ON [PRIMARY]
Неужели там может быть другой порядок??
21 igork1966
 
22.08.14
10:11
мне показалось что
Cmd.Parameters(1).Value = FALSE;//СтрДоговорСКЛ.DoDelete;
[ModifiedOn1C] [datetime2](7) NULL,

Не?
22 _fvadim
 
22.08.14
10:13
забавная табличка
[Id] [uniqueidentifier] NULL,
зато
[DoDelete] [bit] NOT NULL

(20) надо сделать как в (16)
23 igork1966
 
22.08.14
10:17
(22) так скорее всего bit это для Булево
и иметь три состояния в большинстве случаев совершенно излишне
24 Мисти
 
22.08.14
10:18
(22) Зачем??
Мне тоже странно, что без идентификатора - пожалуйста, а причина расторжения, хоть в реальност обычно не существует - нужна!
25 igork1966
 
22.08.14
10:19
(23) + чтобы потом не писать такое везде

ISNULL([DoDelete],0) = @Фильтр
26 Мисти
 
22.08.14
10:19
(21) Не поняла вопрос!
Я закомментировала потом всё, что можно.
27 igork1966
 
22.08.14
10:20
(26) в приведенном тобой явно смещены параметры
28 Мисти
 
22.08.14
10:20
(25) О чем ркечь???
29 Мисти
 
22.08.14
10:21
нет!! Где? целиком описано в 9
30 igork1966
 
22.08.14
10:21
(25) Если "[DoDelete] [bit] NULL"
то это уже три состояния, не два
31 igork1966
 
22.08.14
10:22
(30) -> (28)
32 Мисти
 
22.08.14
10:22
Раньше я туда писала 0 и 1 и всё работало. Наверное, и правда, что-то с порядком.
33 Мисти
 
22.08.14
10:23
А! Это объяснение, почему не нулл, да? Чтобы было только 2 состояния, дошло.
34 igork1966
 
22.08.14
10:24
(33) именно
35 Мисти
 
22.08.14
10:25
ТекстЗапроса = "INSERT INTO gtw_ContractImport (DoDelete,Number,TerminationReason) VALUES (0,""345"",""финита"")"

Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Недопустимое имя столбца "345".
36 Мисти
 
22.08.14
10:30
ТекстЗапроса = "INSERT INTO gtw_ContractImport (DoDelete,Number,TerminationReason) VALUES (0,’345’,’финита’)";

Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Неправильный синтаксис около конструкции "’".
37 ДенисЧ
 
22.08.14
10:34
'345'
38 igork1966
 
22.08.14
10:34
(36) где ты такие берешь
INSERT INTO gtw_ContractImport (DoDelete,Number,TerminationReason) VALUES (0,'345','финита')
39 Мисти
 
22.08.14
10:39
(38) в книжке!
40 Мисти
 
22.08.14
10:41
Так кто мне скажет, если я в самой базе вижу определенный порядок столбцов - он может быть не таким??
Ура. Так съела.
41 Torquader
 
22.08.14
23:13
А [Number] написать так не пробовали ?
Что-то мне кажется, что не все слова SQL правильно переваривает.
42 Torquader
 
22.08.14
23:15
И Можно CAST(0 AS BIT) попробовать, если хочется чудо.
Но у вас, как всегда, бобики зарыты в соседнем районе.
P.S. борьба женщины с SQL-сервером часто заканчивается победой женщины, и потом, пока админы поднимают базу из BackUp-а женщина начинает решать другую задачу.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший