|
Запрос SQL | ☑ | ||
---|---|---|---|---|
0
Yorik
25.06.13
✎
14:32
|
Здравствуйте, у меня стоит 1с82 выполняется запрос к SQL , подскажите пожалуйста как мне сдалать выгрузку выполненного запроса в таблицу в 1С? Спасибо
|
|||
1
shuhard
25.06.13
✎
14:33
|
(0) формат выгрузки должен угадать форум ?
|
|||
2
ДенисЧ
25.06.13
✎
14:33
|
А как выполняешь?
Обходи результат запроса, грузи в ТЗ. Потом делай с этой ТХ шо хошь |
|||
3
mikecool
25.06.13
✎
14:33
|
бедный Ёрик!
результатзапроса.выгрузить() |
|||
4
ДенисЧ
25.06.13
✎
14:34
|
(3) Даааа? Покажи мне у ADODB.Recordset метод Выгрузить()...
|
|||
5
rs_trade
25.06.13
✎
14:35
|
(4) Да у него штатный запрос. Какой нафиг адодб.
|
|||
6
ДенисЧ
25.06.13
✎
14:36
|
(5) А что, штатный может выполнять "запрос к SQL"?
Ну, если не ВИД, разумеется |
|||
7
Yorik
25.06.13
✎
14:37
|
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open(стрПодключения); RS = Новый COMОбъект("ADODB.Recordset"); // Запрос к базе на языке SQL запросов. //RS.Open("Select * from _Reference35", Connection); RS.Open("Select * from "+ПолеСтр1, Connection); //RS.Fill(ТаблЗн123); Пока RS.EOF() = 0 Цикл //// Можно обращаться и обрабатывать значения полей выборки. //// ИД = RS.Fields(ПолеСтр2).Value; Дат =RS.Fields("dateout").Value; Если дат>=НачалоДня(Дата1) и дат<=КонецДня(Дата2) Тогда нс=тб.Добавить(); нс.дата =дат; нс.тикет =""+RS.Fields("postid").Value+"-"+Формат(RS.Fields("tid").Value,"ЧГ=0"); нс.Контракт =RS.Fields("Contr_no").Value; нс.Тип =RS.Fields("ScrapType").Value; нс.материал =RS.Fields("Material").Value; нс.Инспектор =RS.Fields("Inspector").Value; нс.машина =RS.Fields("LicenseN").Value; нс.кол1 =RS.Fields("FWeight").Value; нс.кол2 =RS.Fields("Loss").Value; нс.Стр1 =RS.Fields("vendor").Value; КонецЕсли; RS.MoveNext(); КонецЦикла; RS.Close(); Connection.Close(); Я хочу одним разом выгрузить выборку и закрыть соединение |
|||
8
ДенисЧ
25.06.13
✎
14:38
|
(7) Переходи на 77, там это реализовано :-)
Или, вспомнил, есть такая GameWithFire - там вроде есть такое. |
|||
9
Yorik
25.06.13
✎
14:40
|
...по твоему мне и ЗуП переписать на с 82 на77
|
|||
10
rs_trade
25.06.13
✎
14:41
|
(7) Функция перегрузки рекордсета в тз пишется 15 минут
|
|||
11
Yorik
25.06.13
✎
14:41
|
(1) формат не важен
|
|||
12
Maxus43
25.06.13
✎
14:42
|
(9) прямые запросы в 1с8 нарушают лицензионное соглашение
|
|||
13
shuhard
25.06.13
✎
14:42
|
(11) заполни ТЧ, выгрузи в mxl
|
|||
14
ДенисЧ
25.06.13
✎
14:46
|
(12) Где сказано, что запросы SQL, выполненные к сторонней базе, нарушают лицензию?
|
|||
15
Maxus43
25.06.13
✎
14:48
|
(14) //RS.Open("Select * from _Reference35", Connection);
сторонняя, ага...) |
|||
16
Maxus43
25.06.13
✎
14:49
|
хотя дальше поля не 1совские, ввёл в заблуждение значит, заметает следы
|
|||
17
rs_trade
25.06.13
✎
14:49
|
(12) 1C нарушает собственное лицензионное соглашение
|
|||
18
Yorik
25.06.13
✎
14:50
|
(12) да гонит он
Ведь есть же функции Open() или Execute() неуж то нету процедуры выгрузки в таблицу значений?? |
|||
19
Sorm
25.06.13
✎
14:52
|
(18) ADO должен знать про таблицу значений 1С?
|
|||
20
rs_trade
25.06.13
✎
14:52
|
(18) Создатели драйвера АДОДБ должны были позаботиться создании метода для перегрузки данных в структуру данных 1с-ки?
|
|||
21
Sorm
25.06.13
✎
14:54
|
(20) Ну а в принципе:):)... пора бы уж..
|
|||
22
Serginio1
25.06.13
✎
14:55
|
Создай на основании описания полей ТЗ. Вот семерочный вариант
Функция ЗаполнитьТзИзКоманды(Command) РекордСет=Command.Execute(); Тз=СоздатьОбъект("ТаблицаЗначений"); ХБ=РекордСет.Fields.Count-1; Сз=СоздатьОбъект("СписокЗначений"); Для сч=0 по ХБ Цикл Поле=РекордСет.Fields(сч); Name=Поле.Name; Сообщить(Name); Сз.ДобавитьЗначение(Name); Тз.НоваяКолонка(Name); КонецЦикла; Пока РекордСет.EOF = 0 Цикл Тз.НоваяСтрока(); НомСтр=Тз.НомерСтроки; Для сч=0 по ХБ Цикл Попытка Значение=РекордСет.Fields(сч).Value; Тз.УстановитьЗначение(НомСтр,Сч+1,Значение); Исключение Сообщить(ОписаниеОшибки()+" номер колонки "+ сч); КонецПопытки; КонецЦикла; РекордСет.MoveNext(); КонецЦикла; РекордСет.close(); возврат Тз КонецФункции |
|||
23
Yorik
25.06.13
✎
14:58
|
Я хочу сделать что то вроде
Функция ЗаполнитьТзИзКоманды(Command) РекордСет=Command.Execute(); Тз=СоздатьОбъект("ТаблицаЗначений"); ХБ=РекордСет.Fields.Count-1; // ТаблЗап = РекордСет.Выгрузить(); // РекордСет.close(); возврат Тз КонецФункции ВСЕ |
|||
24
ДенисЧ
25.06.13
✎
14:59
|
(23) Без проблем. Пиши письмо в Микрософт, чтобы они в следующей версии ADO вставили поддержку 1с...
|
|||
25
Yorik
25.06.13
✎
15:01
|
(24)...номер Билла Гейтса есть?
|
|||
26
Yorik
25.06.13
✎
15:03
|
Синтаксис помощник для SQL запросов где нибудь можно достать?
|
|||
27
rs_trade
25.06.13
✎
15:05
|
(26) В SSIS же есть. Есть еще сторонний неплохой SQL assistant называется.
|
|||
28
Serginio1
25.06.13
✎
15:05
|
(23) Тебе в 7 ку нужно. Там на 1С++
Функция ВыполнитьЗапрос(ConnectionString,ТексЗапроса) Экспорт Попытка рс = СоздатьОбъект("ODBCRecordset"); Исключение загрузитьвнешнююкомпоненту("1cpp.dll"); рс = СоздатьОбъект("ODBCRecordset"); КонецПопытки; Соединение=СоздатьОбъект("ODBCDatabase"); Если Соединение.Соединение(ConnectionString)=1 Тогда рс.УстБД(Соединение); Иначе База=Сред(Соединение.ConnectionString,Найти(Соединение.ConnectionString,"DATABASE")); Сообщить("Не удалось установить соединение:"+База); Возврат 0; КонецЕсли; тз=рс.ВыполнитьИнструкцию(ТексЗапроса); Возврат тз; КонецФункции |
|||
29
Serginio1
25.06.13
✎
15:10
|
(0) А чего не хочешь использовать Внешние источники данных
|
|||
30
shuhard
25.06.13
✎
15:12
|
(18)[неуж то нету процедуры выгрузки в таблицу значений??]
доктора в топик, срочно |
|||
31
ДенисЧ
25.06.13
✎
15:14
|
(28) в 8ке тоже можно так
ПодключитьВнешнююКомпоненту("GameWithFire.ADOUtils"); ADOUtils = Новый("AddIn.ADOUtils"); Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open("Provider=sqloledb;Server=MyServer;Database=MyDatabase;Trusted_Connection=yes;"); Recordset = Connection.Execute("select * from MyTable (nolock)"); ТЗ = ADOUtils.ADORecordsetToValueTable(Recordset); ТЗ.ВыбратьСтроку(); |
|||
32
Yorik
25.06.13
✎
15:16
|
(31) а где ее взять внешнюю компоненту? Просвятите люди добрые
|
|||
33
ДенисЧ
25.06.13
✎
15:17
|
(32) google://GameWithFire
первая ссылка |
|||
34
sda553
25.06.13
✎
15:18
|
Мне пришло в голову самое изящное решение
Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(стрПодключения); RS = Новый COMОбъект("ADODB.Recordset"); RS.Open("Select * from "+ПолеСтр1+" for xml auto, Connection); Пока RS.EOF() = 0 Цикл Данные =RS.Fields(0).Value; RS.MoveNext(); КонецЦикла; RS.Close(); Connection.Close(); //Вся таблица одним махом выгружена в переменную Данные |
|||
35
Serginio1
25.06.13
✎
15:21
|
(31) Согласен. В 7 ке проблема с Numeric поэтому проще использовать 1С++. Я её повсеместно использую. Для 0 вполне пойдет и вариант в 22. Под 8 ку его переписать не проблема.
|
|||
36
Yorik
25.06.13
✎
15:30
|
Алелуя, получилось спасибо. С подключением внешней компоненты))
|
|||
37
Yorik
25.06.13
✎
15:37
|
(31) Кстати а метод
ТЗ = ADOUtils.ADORecordsetToValueTable(Recordset); случайно не переборкой данных выполнен? Пока RS.EOF() = 0 Цикл RS.MoveNext(); КонецЦикла; ???? |
|||
38
ДенисЧ
25.06.13
✎
15:38
|
(37) А как иначе? АДО по-другому не умеет
|
|||
39
Yorik
25.06.13
✎
15:41
|
...блин, ладно))
|
|||
40
Yorik
27.06.13
✎
10:06
|
Здравствуйте еще раз!!!
У меня вопрос следующего характера, можно ли использовать имя сервера через IP адрес в параметре имя сервера?? ИмяСервера = "10.1.1.20"; ИмяПользователя = "ert"; Пароль = "123456"; ИмяБазы = "Base"; такого рода код... |
|||
41
ДенисЧ
27.06.13
✎
10:08
|
(40) я не против.
Или тебе нужна официальная справка? |
|||
42
Yorik
27.06.13
✎
10:11
|
фак, по ходу сам сервак чисто физически не видит
|
|||
43
Yorik
27.06.13
✎
10:13
|
...т е если я передам параметр строкой , этого будет достаточно?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |