Имя: Пароль:
1C
1C 7.7
v7: 1CPP SELECT
0 DES
 
13.09.12
14:54
Подскажите примерчиком, как выбрать (типа SELECT * FROM Справочник.Абоненты) из справочника  (база-DBF)
по ODBC VFP
1 ДенисЧ
 
13.09.12
14:54
а на родном форуме не смотрел? ТАм этого добра, как...
2 DES
 
13.09.12
14:55
нету примера
не идет  в общем, в частности понятно
3 DES
 
13.09.12
14:55
ИБ=СоздатьОбъект("ODBCDataBase");
   ИБ.ПрисоединитьИБ(КаталогИБ());
   рс=СоздатьОбъект("ODBCRecordset");
   рс.УстБД(ИБ);
   ТекстЗапроса="SELECT FROM Справочник.Абоненты";
   Результат=рс.ВыполнитьИнструкцию(ТекстЗапроса);
6 ДенисЧ
 
13.09.12
14:56
SELECT * FROM $Справочник.Абоненты
7 ДенисЧ
 
13.09.12
14:57
наконец-то :-)
8 DES
 
13.09.12
14:58
{D:\1C\_TBOX.ERT(19)}: Ошибка соединения: State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данную функцию
9 DES
 
13.09.12
14:58
не подключается
10 mista2012-09-11
 
13.09.12
14:58
ДБФ=СоздатьОбъект("XBase");
   ДБФ.ОткрытьФайл(ИмяФайлаЗагрузки);
   ДБФ.КодоваяСтраница(0);
   ДБФ.Первая();
   Пока ДБФ.ВКонце()=0 Цикл
       
       ВсегоСтрок=ВсегоСтрок+1;
       
       ДатаВыгрузки = ДБФ.DATE_OF;  
       //*** обработка даты
       ДатаВыгрузки=Дата(Сред(ДатаВыгрузки,7,2)+"."+Сред(ДатаВыгрузки,5,2)+"."+Сред(ДатаВыгрузки,1,4));
       
       ПосЕМИТ     = ДБФ.POS_EMIT;
       ПосИД     = ДБФ.POS_ID;
       ПОСимя    = СокрЛП(ДБФ.POS_NAME);
       КлиентИД  = ДБФ.CLNT_ID;
       КлиентТип = ДБФ.CLNT_TYPE;
       КлиентИмя = ДБФ.CLNT_NAME;
       
       ТопливоИД  =ДБФ.SRV_ID;
       ТопливоИмя =ДБФ.SRV_NAME;
       Количество =ДБФ.AMOUNT;
       Цена       =ДБФ.PRICE;  
       Сумма      =ДБФ.SUMPRICE;
       
       ТД.НоваяСтрока();
       
       ТД.Дата  = ДатаВыгрузки;
       ТД.Склад = ПОСимя;      //**********************************************************
       ТД.СкладЕмит = ПосЕМИТ;
       
       ТД.КодОсн=КлиентИД;     //*** ПРЕОБРАЗОВАТЬ
       ТД.КодТов=ТопливоИД;    //*** ПРЕОБРАЗОВАТЬ
       ТД.Объем=(-1)*Количество;    //*** ПРЕОБРАЗОВАТЬ
       //ТД.Цена =Цена;
       ТД.Сумма=(-1)*Сумма;         //*** ПРЕОБРАЗОВАТЬ  
       
       ТД.Цена = Цена;
       
       Сообщить("Дата: "+ДатаВыгрузки+"     "+ПосЕМИТ+"*****"+ПОСимя+"***"+КлиентИД+"***"+КлиентТип+"***"+КлиентИмя+"-----"+ТопливоИД+". . . "+ТопливоИмя+" кол-во:"+Количество+" цена "+Цена+" сумма "+Сумма);
       
       
       ДБФ.Следующая();
   КонецЦикла;
11 Mikeware
 
13.09.12
14:58
(7)
-Дяденька, а хотите я вам политический анекдот расскажу?
-- мальчикт, ты что!? я же милиционер!!
- Ничего страшного, я вам его три раза расскажу!!!
©
12 DES
 
13.09.12
15:01
(10) это не из этой оперы
13 Ёпрст
 
13.09.12
15:01
тоже что ли поучаствовать ?
14 Ёпрст
 
13.09.12
15:04
ОлеДБ = СоздатьОбъект("OLEDBData");
   Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
   Рез = ОлеДБ.Соединение(Соединение);
   Запрос = ОлеДБ.СоздатьКоманду();
   Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
   Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
   Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
   Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");// Отключили блокировки
   Запрос = ОлеДБ.СоздатьКоманду();
   Запрос.ВыполнитьИнструкцию("select * from $Справочник.Абоненты").ВыбратьСтроку();
15 DES
 
13.09.12
15:06
не по оле
16 Ёпрст
 
13.09.12
15:07
(15) это не оле
17 Ёпрст
 
13.09.12
15:08
еще так можно:

Попытка
   
   база = СоздатьОбъект("SQLiteBase");
   Исключение
       ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
       база = СоздатьОбъект("SQLiteBase");
   КонецПопытки;
   база.Открыть(":memory:");
   запрос = база.НовыйЗапрос();    
   запрос.ВыполнитьЗапрос("select * from [Справочник.Абоненты]").ВыбратьСтроку();
18 DES
 
13.09.12
15:09
Запрос.ВыполнитьИнструкцию("select * from $Справочник.Абоненты").ВыбратьСтроку();
{D:\1C\_TBOX.ERT(41)}: FAILED! ICommandText::Execute(): Cannot open file d:\1c\l\sc13.dbf.
19 Ёпрст
 
13.09.12
15:12
20 Ёпрст
 
13.09.12
15:12
+19, либо (17)
21 DES
 
13.09.12
15:15
не могу найти 1sqlite.dll
ни скачать
22 DES
 
13.09.12
15:20
(18) победил
нужно немонопольно заходить
23 Ёпрст
 
13.09.12
15:22
http://snegopat.ru/downloads/1sqlite/
тока не качай последний, в нём ошибки
24 Ёпрст
 
13.09.12
15:22
(22) см. (19)
25 DES
 
13.09.12
15:31
тот нада 1sqlite_1023.zip ?
26 Ёпрст
 
13.09.12
15:32
(25) лучше 1.0.2.4
27 Ёпрст
 
13.09.12
15:33
28 DES
 
13.09.12
15:35
THX
29 DES
 
13.09.12
15:48
select * from [Справочник.Абоненты] as Ab  WHERE Ab.Descr Like 'Иванов*'

Like работает ?
30 DES
 
13.09.12
15:50
гы, работает
31 Ёпрст
 
13.09.12
16:04
тока лучше '%иванов%'
32 DES
 
13.09.12
16:11
бАльшое спасибо
33 Ёпрст
 
13.09.12
16:20
34 DES
 
13.09.12
16:25
как параметр в sql  передать ?
35 Ёпрст
 
13.09.12
16:29
(34)
в фоксе УстановиитьТекстовыйПараметр
в скульлайте Подставлять, или УстановитьПараметр для параметрического запроса..
+ уложить можно списки во временную тз и там и там.
36 DES
 
13.09.12
16:36
Запрос.УстановитьТекстовыйПараметр("ВыбАдр", Ищем);
{Документ.ПриемНаличныхПлатежей.Форма.Модуль(273)}: Поле агрегатного объекта не обнаружено (УстановитьТекстовыйПараметр)
37 DES
 
13.09.12
16:41
Запрос.Подставлять("ВыбАдрес", Ищем); // так работает
38 Ёпрст
 
13.09.12
16:44
(37) дык разный же синтаксис у объектов..
39 Ёпрст
 
13.09.12
16:45
вообще, к скульлайту есть дока в chm, для фокса подкодят почти все методы объекта одбс, часть есть тут

http://www.1cpp.ru/docum/icpp/html/ODBC.html
часть тут

http://www.1cpp.ru/docum/icpp/html/oledb.html
40 DES
 
13.09.12
16:51
что можно получить после
Запрос.ВыполнитьЗапрос("SELECT * FROM [Справочник.Абоненты]").ВыбратьСтроку()

какие поля  и как ?
41 Ёпрст
 
13.09.12
16:54
(40) ? все поля справочника..
правда, без типизации
:)
42 Ёпрст
 
13.09.12
16:54
вообще, * - как правило для запросов с exists имхо, актуальна
43 Ёпрст
 
13.09.12
16:55
ну или для count там, например.
44 Ёпрст
 
13.09.12
16:55
всё остальное, нужно ручонками перечислять в селект листе, а в 1с-ине, еще и приводить к нужному типу.
45 DES
 
13.09.12
16:55
Запрос.ПолучитьЗначение("Descr") - чето не фурычить

после .Выбратьстроку()
46 DES
 
13.09.12
16:56
меня интересует выбранная в ТЗ строка
47 Ёпрст
 
13.09.12
16:56
(45) :))

ТЗ = Запрос.ВыполнитьЗапрос("SELECT * FROM [Справочник.Абоненты]");

так понятнее ?
на выходе - таблица значений..
можно и в список значений и в индексированную тз.
48 DES
 
13.09.12
16:57
ну так  понятно, а так Запрос.ВыполнитьЗапрос("SELECT * FROM [Справочник.Абоненты]").ВыбратьСтроку()
?
49 DES
 
13.09.12
16:59
что можно из Запрос. выудить ?
я же как бы еще выбрал строку  дополнительно.
как ее почухать ?
50 Ёпрст
 
13.09.12
17:00
:)))

да блин,  Запрос.ВыполнитьЗапрос возвращает в качестве результата Таблицу значений, дальше делай с ней что хочешь, хочешь - строку выбирай в ней, метод такой есть у ТЗ - ВыбратьСтроку()..
:)
51 DES
 
13.09.12
17:01
я в курсе про ТЗ.
меня интересует что можно получить без явной ТЗ
52 DES
 
13.09.12
17:02
могу выдрать значение поля выбранной строки ?
53 Ёпрст
 
13.09.12
17:02
можешь, так еще

ТЗ = Запрос.ВыполнитьЗапрос("SELECT * FROM [Справочник.Абоненты]");

ТЗ.выбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
 Сообщить(ТЗ.Descr);
КонецЦикла
54 Ёпрст
 
13.09.12
17:04
Я не совсем догоняю, что ты хочешь..

ЗЫ: в фоксе или в запросе к скулю, можно еще через рекордсет обойти записи, последовательно
55 Ёпрст
 
13.09.12
17:08
+54 используя методы След() Пред() в НачалоВыборки() и т.д.
56 DES
 
13.09.12
17:08
да нет, как в ТЗ я знаю.

я хочу понять что я еще могу выдрать из строки
Запрос.ВыполнитьЗапрос("SELECT * FROM [Справочник.Абоненты]").ВыбратьСтроку()
только из нее.

так как я Выбрал в ТЗ строку, то могу ли я ее получить?

как получить нужные мне данные я знаю, я спрашиваю только это.
57 DES
 
13.09.12
17:09
например :)
Запрос.ТекущийЭлемент()
или
Запрос.CODE
или
Запрос.ПолучитьЗначение("CODE")
58 Ёпрст
 
13.09.12
17:11
(56)
ВыбратьСтроку(<?>,,);
Синтаксис:
ВыбратьСтроку(<Строка>,<Заголовок>,<Таймаут>)
Назначение:
Открыть окно для интерактивного выбора строки в таблице значений.
Возвращает число: 1 - если выбор произведен (нажата кнопка ОК); 0 - если выбор не произведен (нажата кнопка ''ОТМЕНА''); -1 (минус единица) - закончилось время <Таймаут> ожидания отклика пользователя.
Параметры:
<Строка> - необязательный параметр. Идентификатор переменной, куда помещается значение - номер выбранной строки. При вызове метода здесь можно передавать значение начального номера строки.
<Заголовок> - необязательный параметр. Строковое выражение, значение которого отображается в заголовке диалогового окна. Может использоваться для подсказки пользователю.
<Таймаут> - необязательный параметр. Числовое выражение, значение которого задает время ожидания системы (в секундах) на отклик пользователя. Если не задано, то время ожидания бесконечно.
59 DES
 
13.09.12
17:17
т.е.

Запрос.ВыполнитьЗапрос("SELECT * FROM [Справочник.Абоненты]").ВыбратьСтроку(номСтр, "Выбирай",60);

номСтр - от какой ТЗ ?
60 Ёпрст
 
13.09.12
17:19
еще раз, метод ВыполнитьЗапрос возвращает таблицу значений, к ней применимы все методы таблицы значений, ей можно присвоить переменной, которая станет таблицей значений, в этой таблице значений можно выбрать строку.
Что еще рассказать про таблицу значений ?
61 Mikeware
 
13.09.12
17:24
(60) продай ему СП.
62 Ёпрст
 
13.09.12
17:26
(61) блин, ДенисЧ все скупил, теперь вот, перепродаёт, барыга
63 DES
 
13.09.12
17:56
(60) Я в курсе что возращает метод.
меня интересует какие еще методы можно применить к Запрос после того как к нему применент метод ВыбратьСтроку().

З.Ы. про работу с ТЗ я в курсе.
64 Ёпрст
 
13.09.12
18:07
(63) При чем тут запрос ????????????????????????

метод ВыбратьСтроку примёнен к Т-А-Б-Л-И-Ц-Е З-Н-А-Ч-Е-Н-И-Й!
65 ЧашкаЧая
 
13.09.12
18:09
Во вложении первого поста очень толковый хелп для новичка по прямым запросам. Чтобы въехать самое то.
http://www.1cpp.ru/forum/YaBB.pl?num=1148874473
66 ЧашкаЧая
 
13.09.12
18:12
+ (65) А еще лучше, почитать хелп, и использовать клас ПрямойЗапрос http://www.1cpp.ru/forum/YaBB.pl?num=1273512019 - практически полный аналог запросов для снеговика под клюшки, не нужно постоянно переключаться чтобы набрать ключевые слова на английском.
67 DES
 
13.09.12
18:45
(64)  к какой ТЗ ?
Имя!!??
68 Ёпрст
 
13.09.12
18:55
ноу комментс, как говорится.
не я пас с этой ветки
69 DES
 
13.09.12
19:06
ну и на том спс ;)
70 Злопчинский
 
13.09.12
20:24
Ёпрст, не волнуйся! ты нужен родине!
71 КонецЦикла
 
13.09.12
20:33
Это, наверное, восьмерочник
Епрст, не волнуйся

ТЗ.ВыбратьСтроку() - достаточно, и вопросов меньше будет
Основная теорема систематики: Новые системы плодят новые проблемы.