|
v7: Прямой запрос к DBF базе через 1cpp.dll | ☑ | ||
---|---|---|---|---|
0
woha
07.01.13
✎
13:32
|
Помогите, пожалуйста. Битый час ищу как сделать запрос к ДБФ и никак.
То что сейчас имею: База = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN="""; Рез = База.Соединение(Соединение); //Запрос = База.СоздатьКоманду(); RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД(База); ТекстЗапроса = " |SELECT | Спр.ID as [Элемент $Справочник.Товары] |, $Спр.ИД as ИД |FROM | $Справочник.Товары as Спр |ORDER BY |$Спр.ИД DESС |"; //Запрос.Выполнить(ТекстЗапроса); //ТЗ = СоздатьОбъект("ТаблицаЗначений"); //RS.Отладка(1); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
1
zladenuw
07.01.13
✎
13:36
|
и что не получается ? что за ошибка ?
|
|||
2
zladenuw
07.01.13
✎
13:38
|
Запрос = База.СоздатьКоманду();
ТекстЗапроса = " |SELECT |* |FROM $Справочник."+"СТСостоянияОбъектов"+" as Спр where $Спр.КодВнешний=:ВыбКод"; Запрос.УстановитьТекстовыйПараметр("ВыбКод","55169095549987777"); ТЗ2 = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ2.ВыбратьСтроки(); Пока ТЗ2.ПолучитьСтроку()=1 Цикл Сообщить(ТЗ2.КодВнешний); Сообщить(ЗначениеИзСтрокиВнутр(ТЗ2.ВнутреннееПредставление)); Сообщить("Дата КПК - "+ТЗ2.ДатаКПК+", Дата Загрузки "+ТЗ2.ДатаКонтроль); Сообщить("----"); КонецЦикла; |
|||
3
spock
07.01.13
✎
13:38
|
(1)у него все не получается, даже не интересно, что за ошибка.
|
|||
4
МастерВопросов
07.01.13
✎
13:38
|
Эту статью читал?
http://www.1cpp.ru/forumfiles/Attachments/mod_002.zip Для DBF версии рекомендуется использовать объект “ OLEDBData”(для версии 1С++ 2.0.0.0 и выше) следующим образом: База = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN="""; Рез = База.Соединение(Соединение); Запрос = База.СоздатьКоманду(); А что делать, если на компьютере не установлен драйвер фокса? Дык, качать! |
|||
5
МастерВопросов
07.01.13
✎
13:39
|
(0) в базе никто монопольно не сидит?
|
|||
6
woha
07.01.13
✎
13:40
|
(4) драйвер установлен
|
|||
7
МастерВопросов
07.01.13
✎
13:41
|
(0) что за подозрительный реквизит?
"$Спр.ИД" |
|||
8
woha
07.01.13
✎
13:42
|
(7) есть такой реквизит.
|
|||
9
МастерВопросов
07.01.13
✎
13:42
|
(6) ты может объяснишь уже что у тебя не получается?
|
|||
10
woha
07.01.13
✎
13:43
|
(3) спасибо на добром слове.
|
|||
11
woha
07.01.13
✎
13:45
|
если база дбф нужно использовать "ODBCRecordset"?
|
|||
12
Cthulhu
07.01.13
✎
13:45
|
(8): о. синхронизируем базы данных по Id объектов данныых?..
|
|||
13
МастерВопросов
07.01.13
✎
13:47
|
(11) см. (1)(9)
|
|||
14
woha
07.01.13
✎
13:48
|
База = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN="""; Рез = База.Соединение(Соединение); Запрос = База.СоздатьКоманду(); ТекстЗапроса = " |SELECT | Спр.ID as [Элемент $Справочник.Товары] |, $Спр.ИД as ИДД |FROM | $Справочник.Товары as Спр |ORDER BY | $Спр.ИД DESС |"; ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); {Глобальный модуль(5849)}: FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword. |
|||
15
МастерВопросов
07.01.13
✎
13:50
|
(14) а если вместо
"as [Элемент $Справочник.Товары]" написать: "as Элемент" ошибка остается? |
|||
16
woha
07.01.13
✎
13:50
|
(8) ИД - числовой реквизит для связки с mySQL
|
|||
17
woha
07.01.13
✎
13:53
|
(15) Ответ тот же, что и в (14)
|
|||
18
zladenuw
07.01.13
✎
13:55
|
$Спр.ИД посмотри какое его имя.
Может это поможет Как получить Id реквизита справочника (fieldid) ? глМД = СоздатьОбъект("MetaDataWork"); ИДЮрАдрес = Прав(_IDToStr(глМД.ИДРеквизитаСправочника("ЮрЛица","ЮрАдрес")),4); |
|||
19
woha
07.01.13
✎
13:56
|
(18) Мне не надо ID 1С. Как его получить я знаю.
|
|||
20
woha
07.01.13
✎
13:59
|
Поменял на:
ТекстЗапроса = " |SELECT | $Спр.Норма as Норма |FROM | $Справочник.Товары as Спр |ORDER BY | $Спр.Норма DESС Но результат тот же. |
|||
21
МастерВопросов
07.01.13
✎
14:00
|
(17) может дело в этом?
========================== "Правда, не все имена метапарсер преобразовывает в поля таблиц. Есть исключения – это предопределенные имена: Для справочников ИД (Ссылка) ID" ================================== попробуй убрать строку про "$Спр.ИД" |
|||
22
zladenuw
07.01.13
✎
14:01
|
(20)
Возьми * и посмотри какие колонки ты получаешь. и харе гадать |
|||
23
woha
07.01.13
✎
14:04
|
(21) поле ИД поменял на Норма, но ошибка та же.
|
|||
24
МастерВопросов
07.01.13
✎
14:05
|
(23) ага, я уже поздно увидел.
Ну пробуй (22) .... |
|||
25
woha
07.01.13
✎
14:07
|
(22) Возвращает поля как в DD-файле
|
|||
26
woha
07.01.13
✎
14:08
|
(22) поля DBF
|
|||
27
МастерВопросов
07.01.13
✎
14:11
|
(25) а закеж запрос, который отработал без ошибок.
|
|||
28
woha
07.01.13
✎
14:11
|
База = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN="""; Рез = База.Соединение(Соединение); Запрос = База.СоздатьКоманду(); //RS = СоздатьОбъект("ODBCRecordset"); //RS.УстБД(Рез); ТекстЗапроса = " |SELECT | * |FROM | $Справочник.Товары as Спр |"; //Запрос.Выполнить(ТекстЗапроса); //ТЗ = СоздатьОбъект("ТаблицаЗначений"); //RS.Отладка(1); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
29
Попытка1С
07.01.13
✎
14:13
|
Нафига тебе все это?
Используй 1CPP.dll + 1sqlite.dll будь человеком. |
|||
30
МастерВопросов
07.01.13
✎
14:14
|
(28) аднака в нём нет сортировки и именно фразы "DESС"
|
|||
31
woha
07.01.13
✎
14:20
|
(29) Я могу обойтись и без этого. Хотелось что б побыстрей запросы выполнялись. А базу на SQL перевести не дают. Поиск документа по какому-нибудь реквизиту шапки запросом 1С это вообще жуть.
|
|||
32
Попытка1С
07.01.13
✎
14:22
|
(31) Ты не понял, на просвещайся
http://infostart.ru/public/15977/ + для дбф юзай класс ПрямойЗапрос, после перевода на скуль не надо будет ничего переписывать. |
|||
33
woha
07.01.13
✎
14:24
|
(32) Я все понял. Годами использую T-SQL на другой базе. Но он не работает с ДБФ
|
|||
34
woha
07.01.13
✎
14:25
|
(32) ToySQL
|
|||
35
Попытка1С
07.01.13
✎
14:27
|
(33) Мда.
|
|||
36
woha
07.01.13
✎
14:29
|
на форумах прочитал, что можно делать запросы к ДБФ и решил попробовать разогнать то, что изначально сделано тормозом (запросы 1С).
|
|||
37
Попытка1С
07.01.13
✎
14:30
|
(36) Я тебе еще раз говорю, ты не понял. toysql тут вообще никаким боком. Стукнись в асю расскажу как все сделать, только быстро давай.
|
|||
38
woha
07.01.13
✎
15:07
|
Проблему решил пока так:
ТекстЗапроса = " |SELECT | $Спр.ИД as ИДД |FROM | $Справочник.Товары as Спр |ORDER BY | $Спр.ИД |"; ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.Сортировать("ИДД -"); оказывается, обратной сортировки он не понимает. |
|||
39
woha
07.01.13
✎
15:11
|
(3) ну хоть что-то получилось. :)
|
|||
40
МастерВопросов
07.01.13
✎
15:58
|
(38) т.е. я был прав в (30)
|
|||
41
woha
07.01.13
✎
16:25
|
(40) Да.
|
|||
42
woha
07.01.13
✎
16:27
|
(40) с ТОР дело так же обстоит как DESC?
|
|||
43
woha
07.01.13
✎
16:30
|
хотя ТОР мне мало бы помог без DESC. мне надо было максимальное значение, а оно без DESC в последней строке.
|
|||
44
woha
07.01.13
✎
16:32
|
СПАСИБО ВСЕМ!!!
|
|||
45
woha
07.01.13
✎
16:33
|
и за критику тоже.
|
|||
46
kiruha
07.01.13
✎
16:52
|
>>оказывается, обратной сортировки он не понимает.
FAQ для 1С++ через фокс http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/15#24 в частности документация http://vfpx.codeplex.com/releases/view/10203 в частности сортироыка Детальный синтаксис рассматриваемой секции ORDER BY имеет следующий вид: [ORDER BY Order_Item [ASC | DESC] [, ...]] |
|||
47
kiruha
07.01.13
✎
16:54
|
Collating Sequence=MACHINE;
|
|||
48
woha
07.01.13
✎
17:29
|
(46) спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |