|
Помогите с запросом SQL | ☑ | ||
---|---|---|---|---|
0
Longdimm
19.12.12
✎
11:20
|
Помогите пожалуйста с примером запроса из 1с 8 к SQL Базе.
Подключить подключился, а вот как записать в базу - непонятно. Буду примного благодарен! |
|||
1
Азат
19.12.12
✎
11:21
|
insert into table (col1, ..., colN) values (val1, ..., valN)
|
|||
2
Нуф-Нуф
19.12.12
✎
11:21
|
(1) откуда ты это знаешь? о_0
|
|||
3
shuhard
19.12.12
✎
11:22
|
(0) сложно придумать более невнятную формулировку задачи
|
|||
4
mikecool
19.12.12
✎
11:27
|
(3) это же форум телепатов
|
|||
5
Griffin
19.12.12
✎
11:30
|
(0) ТекстЗапроса="INSERT INTO [Какая-то база].[dbo].[Какак-то таблица]
|([Идентификатор] |,[МоментВремени] |,[ФлагВыполнения]) | VALUES | ('"+Формат(Счетчик,"ЧГ=0")+"' | ,'"+Формат(ТекущаяДата(),"ДФ=""гггг-ММ-дд Ч:мм:сс""")+".000' | , '0' )"; ЗапросАДО.CommandText=ТекстЗапроса; Попытка ЗапросАДО.Execute(); Исключение ОшибкаФиксацииЗапуска = Истина; Сообщить("Ошибка: " + ОписаниеОшибки()); КонецПопытки; |
|||
6
ДенисЧ
19.12.12
✎
11:30
|
(1) Ты не прав...
скорее update table set col1 = val1 where pk_table = val_pk |
|||
7
Undefined vs NULL
19.12.12
✎
11:34
|
(6) возможно также UPDATE OR INSERT...
|
|||
8
Азат
19.12.12
✎
11:51
|
(6) мне кажется, все-таки правильнее будет delete from Table
|
|||
9
Ёпрст
19.12.12
✎
11:55
|
лучше truncate table или drop
|
|||
10
Longdimm
19.12.12
✎
12:15
|
А подключение какое использовать? Connection ?
|
|||
11
МихаилМ
19.12.12
✎
12:17
|
(10)
откудаже нам знать какой механизм для подключения Вы используете и какая субд |
|||
12
Serginio1
19.12.12
✎
12:33
|
||||
13
Longdimm
19.12.12
✎
14:27
|
Мне надо из 1с 8.2 подключиться с MS SQL в таблицу и заполнить ее.
Вот такой код получился. objConn = Новый COMОбъект("ADODB.Connection"); //Определяем параметры подключения к базе данных ServerName = "sql2"; //имя или IP-адрес сервера DSN = "testdb"; //имя базы данных UID = "test"; //логин пользователя SQL-сервера PWD = "123"; //пароль пользователя SQL-сервера ConnectString = "Provider=SQLOLEDB;" + "Data Source=" + ServerName + ";Initial Catalog=" + DSN + ";UID=" + UID + ";PWD=" + PWD; objConn.ConnectionString = ConnectString; objConn.ConnectionTimeOut = 15; objConn.CommandTimeout = 30; //Подключаемся к базе данных objConn.Open(); //Выполняем запрос Табзнач = ПолучитьСписокРаботников(); Для Каждого ТекСтр из ТабЗнач цикл objRecordset = objConn.Execute("SELECT * FROM PersonalPosition a where a.TabNumber = '"+СокрЛП(ТекСтр.Сотрудник.Организация.Префикс)+СокрЛП(ТекСтр.ТабельныйНомер)+"'"); Пока objRecordset.EOF <> 1 Цикл БылаЗапись=Истина; //i = 0; //Пока i <= objRecordset.Fields.Count-1 Цикл // Сообщить(Строка(objRecordset.Fields(i).Value)); // i = i + 1; //КонецЦикла; //objRecordset.MoveNext(); ,TabNumber,Surname,Name,MiddleName,MiddleName,PositionName КонецЦикла; Если БылаЗапись<>Истина тогда //objConn.Execute("SELECT * FROM PersonalPosition a where a.TabNumber = "+СокрЛП(ТекСтр.Сотрудник.Организация.Префикс)+СокрЛП(ТекСтр.ТабельныйНомер)); ТекстЗапроса = "INSERT INTO PersonalPosition(Depnumber) VALUES('qweqwe')"; Сообщить(ТекстЗапроса); objConn.Execute(ТекстЗапроса); КонецЕсли; Прервать; КонецЦикла; При этом запрос на селект выполняется. А на вставить пишет ошибка запроса. |
|||
14
shuhard
19.12.12
✎
14:30
|
(13) копрокод
правильный через рекордсет и ADDNew |
|||
15
pessok
19.12.12
✎
14:31
|
(14) нормальный код, чо. сервак наглотается итераций после 2000 и пошлет наболт, все ок
|
|||
16
Longdimm
19.12.12
✎
14:38
|
Да надо заполнить 1 раз.
|
|||
17
МихаилМ
19.12.12
✎
14:39
|
(0)
какой тип поля Depnumber таблицы PersonalPosition |
|||
18
Longdimm
19.12.12
✎
15:08
|
Depnumber Строка.
|
|||
19
МихаилМ
19.12.12
✎
15:17
|
текст ошибки в студию
|
|||
20
Longdimm
20.12.12
✎
14:09
|
Просто пишет не верный запрос. Текст запроса в коде есть. И понять не могу - в чем же ошибка!
|
|||
21
olegves
20.12.12
✎
14:20
|
(14) +100
а еще для рекордсета надо тип его явно указать (на запись). Имя параметра к сожал-ю не помню, погугли. А то по умолчанию рекордсет создается только на чтение |
|||
22
Longdimm
21.12.12
✎
09:37
|
Вот такой код нашел!
Command = Новый COMОбъект("ADODB.Recordset"); Command.CursorLocation=3; Connection.DefaultDatabase = "test"; Command.Open(NameTable,Connection,3,4,2); СчетчикЛ = 1; Вр = Таблица.Количество(); Состояние("Загр. "+NameTable+" " + Строка(Счетчик)); Для i=0 По Таблица.Количество() -1 Цикл Command.AddNew(); Для j=0 По Таблица.Колонки.Количество() -1 Цикл Value = Таблица[i][j]; Если не обЗначениеНеЗаполнено(Value) Тогда //Сообщить(""+Таблица.Колонки[j].Имя+" ["+Value+"]"); Если (ТипЗнч(Value) = Тип("Число")) или (ТипЗнч(Value) = Тип("Дата")) тогда Command.Fields(Таблица.Колонки[j].Имя).Value=Value; Иначе // Сообщить(Таблица.Колонки[j].Имя); Попытка Command.Fields(Таблица.Колонки[j].Имя).Value=Строка(Value); Исключение Сообщить(Таблица.Колонки[j].Имя+ " "+Строка(Value)); КонецПопытки; КонецЕсли; КонецЕсли; КонецЦикла; Если СчетчикЛ = 3000 Тогда СчетчикЛ = 0; Command.UpdateBatch(); Счетчик = Счетчик + 1; Иначе СчетчикЛ = СчетчикЛ + 1; КонецЕсли; КонецЦикла; Попытка Command.UpdateBatch(); Command.Close(); Исключение Сообщить(NameTable); КонецПопытки; Вопрос теперь следующий: Connection - какая строка будет для SQL соединений? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |