|
Секс вместе с Clation *.tps через ODBC | ☑ | ||
---|---|---|---|---|
0
jour
26.11.13
✎
11:40
|
Всем доброго времени суток, стоит задача получать данные из внешних таблиц *.tps
Единоразово уже умею получать данные путем конвертации таблиц в *.csv и дальше типовая загрузка из экселя, однако нужна постоянная связь с таблицами. Таблицы зашифрованы, у каждой свой пароль, поэтому будем подключаться не к директории а к конкретной таблице сразу, в настройках драйвера пароль уже прописан, поэтому надеюсь его не нужно еще раз повторять в строке соединения. Но где то я ошибаюсь, прошу хелп. &НаСервере Процедура ПолучитьДанные() Соединение = Новый COMОбъект("ADODB.Connection"); СтрокаСоединения = "DRIVER={SoftVelocity Topspeed driver (*.tps)}; Name = Cli:nm; DataBase=\\AVTOPROKAT\Dat\Clien; Extension = tps;"; Соединение.ConnectionString = (СтрокаСоединения); Попытка Соединение.Open(); Сообщить("База подключена!!!"); Таблица = Соединение.Open("select ::= Cli:nm FROM tablelist where groupby having"); Исключение Сообщить("Не могу подключиться к базе!!!"); КонецПопытки; КонецПроцедуры По выполнению получаю два сообщения - "База подключена!" и сразу же "Не могу подключиться к базе", т.е. Таблицу я не получаю. Вот это полный список команд для *.tps таблиц statement ::= CREATE create | DROP drop | SELECT select orderby | INSERT insert | DELETE delete | UPDATE update | passthroughSQL passthroughSQL ::= any statement supported by the backend create ::= TABLE tablename ( createcols ) | INDEX indexname ON tablename ( indexcolumns ) indexcolumns ::= indexcolumn | indexcolumn , indexcolumns indexcolumn ::= columnname asc drop ::= TABLE tablename | INDEX indexname select ::= selectcols FROM tablelist where groupby having delete ::= FROM tablename where insert ::= INTO tablename insertvals update ::= tablename SET setlist where setlist ::= set | setlist , set set ::= columnname = NULL | columnname = expression insertvals ::= ( columnlist ) VALUES ( valuelist ) | VALUES ( valuelist ) | ( columnlist ) VALUES ( SELECT select ) | VALUES ( SELECT select ) columnlist ::= columnname , columnlist | columnname valuelist ::= NULL , valuelist | expression , valuelist | expression | NULL selectcols ::= selectallcols * | selectallcols selectlist selectallcols ::= | ALL | DISTINCT where ::= | WHERE boolean having ::= | HAVING boolean boolean ::= and | and OR boolean and ::= not | not AND and not ::= comparison | NOT comparison comparison ::= ( boolean ) | colref IS NULL | colref IS NOT NULL | expression LIKE pattern | expression NOT LIKE pattern | expression IN ( valuelist ) | expression NOT IN ( valuelist ) | expression op expression | EXISTS ( SELECT select ) | expression op selectop ( SELECT select ) | expression IN ( SELECT select ) | expression NOT IN ( SELECT select ) | expression BETWEEN expression AND expression) | expression NOT BETWEEN expression AND expression) TopSpeed ODBC Interface — syntaxpattern ::= string | ? | USER expression ::= expression + times | expression - times | times times ::= times * neg | times / neg | neg neg ::= term | + term | - term term ::= ( expression ) | colref | simpleterm | aggterm | scalar scalar ::= scalarescape | scalarshorthand scalarescape ::= —*(VENDOR(MICROSOFT),PRODUCT(ODBC) FN fn )*— scalarshorthand ::= { FN fn } fn ::= functionname ( valuelist ) | functionname ( ) aggterm ::= COUNT ( * ) | AVG ( expression ) | MAX ( expression ) | MIN ( expression ) | SUM ( expression ) | COUNT ( expression ) simpleterm ::= string | realnumber | ? | USER | date | time | timestamp groupby ::= | GROUP BY groupbyterms groupbyterms ::= colref | colref , groupbyterms orderby ::= | ORDER BY orderbyterms orderbyterms ::= orderbyterm | orderbyterm , orderbyterms orderbyterm ::= colref asc | integer asc asc ::= | ASC | DESC colref ::= aliasname . columnname | columnname tablelist ::= tablelistitem , tablelist | tablelistitem tablelistitem ::= tableref | outerjoin outerjoin ::= ojescape | ojshorthand ojescape ::= —*(VENDOR(MICROSOFT),PRODUCT(ODBC) OJ oj )*— ojshorthand ::= { OJ oj } oj ::= tableref LEFT OUTER JOIN tableref ON boolean | tableref LEFT OUTER JOIN oj ON boolean |
|||
1
МихаилМ
26.11.13
✎
11:51
|
DataBase=\\AVTOPROKAT\Dat\Clien
нужен полседний слаш те DataBase=\\AVTOPROKAT\Dat\Clien\ |
|||
2
МихаилМ
26.11.13
✎
11:52
|
"select ::= Cli:nm FROM tablelist where groupby having"
бред какой то |
|||
3
jour
26.11.13
✎
12:02
|
(2) возможно и бред, как получить колонку "Cli:nm" ?
хотя конечно лучше получить всю таблицу, думаю это selectallcols ::= | ALL | DISTINCT но я не знаю как передавать эти строчки |
|||
4
МихаилМ
26.11.13
✎
12:06
|
(3)
как обычно. по стандарту sql92. select * from имятаблицы без tps объединения таблиц работают только внутренние через where. мне не удалось заставить работать "LEFT OUTER JOIN" |
|||
5
Mikeware
26.11.13
✎
12:10
|
Кларион жив?
|
|||
6
МихаилМ
26.11.13
✎
12:12
|
(5)
стал надстрой на мс скл |
|||
7
Mikeware
26.11.13
✎
12:14
|
(6) забавно. но если надстройка над мелкомягким - почему tps остался?
Эх, лет 20 его не видел.... даже 22 |
|||
8
МихаилМ
26.11.13
✎
12:15
|
(0)
вот программа , которая смогла работать более менее нормально с этим odbc драйвером http://alekseyrybakov.narod.ru/ViewODBC.html |
|||
9
МихаилМ
26.11.13
✎
12:16
|
(7)
наверно какие-то старые базы от 6 клариона. |
|||
10
jour
26.11.13
✎
12:31
|
(8) Такс.. программа запустилась, таблицу открыл, записи вижу, хорошо, осталось научиться писать запросы :)
|
|||
11
WildSery
26.11.13
✎
12:36
|
||||
12
WildSery
26.11.13
✎
12:37
|
или не, даже лучше вот такую поискать http://www.ozon.ru/context/detail/id/6577098/
|
|||
13
jour
26.11.13
✎
12:40
|
(12) Спасибо друг :)
|
|||
14
jour
26.11.13
✎
13:14
|
Что то не клеится
Процедура Подключиться() Соединение = Новый COMОбъект("ADODB.Connection"); Таблица = Новый COMОбъект("ADODB.Recordset"); СтрокаСоединения = "DRIVER={SoftVelocity Topspeed driver (*.tps)}; Name = Clarion; DataBase=\\AVTOPROKAT\Dat\Clien\; Extension = tps;"; Соединение.ConnectionString = СтрокаСоединения; Попытка Соединение.Open(); Сообщить("Соединение установлено!!!"); Таблица.Open("SELECT * FROM Clien", Соединение); Сообщить("База подключена!!!"); Исключение Сообщить("Не могу подключиться к базе!!!"); //Таблица.Close(); //Соединение.Close(); // КонецПопытки; КонецПроцедуры Таблицу не получаю, хотя в ViewODBC запросы нормально работают |
|||
15
МихаилМ
26.11.13
✎
13:24
|
(14)
зачем же Вы в попытку поместили две разные ситуации подключение к бд и извлечение данных. сделайте культурно разные методы подсключения получения данных создания типизированной тз на основе типов oledb (ado) заполнения тз отображения тз в тп. |
|||
16
МихаилМ
26.11.13
✎
13:28
|
еще
даты в кларе хранятся в виде целых чисел формула приведения 1800.12.28+число дней клары |
|||
17
jour
26.11.13
✎
13:31
|
(16) на счет дат я уже давно разобрался, там чуть сложнее чем вы написали
Функция ПреобразоватьВДату(Значение) Значение = СтрЗаменить(СокрЛП(Значение),",",""); Пока Число(СтрЗаменить(Значение," ","")) < 9999 ЦИКЛ Значение = Число(СтрЗаменить(Значение," ","")) * 10 КонецЦикла; Если Число(СтрЗаменить(Значение," ","")) > 99999 Тогда Возврат Неопределено Иначе Возврат Дата(1800,12,28) + Значение * 86400; КонецЕсли; КонецФункции |
|||
18
jour
26.11.13
✎
13:35
|
(15) Культурно я разделял, сначала сделал две функции, по логике вроде должно работать, но не работает. Стал искать проблему, в отладке заметил что в строке подключения к БД не сохраняется значение "Соединение.ConnectionString", устанавливается "Provider=MSDASQL.1;" после открытия.
Вторую функцию вообще по строчкам разделил Таблица = Новый COMОбъект("ADODB.Recordset"); Таблица.ActiveConnection = Соединение; Таблица.Source = "SELECT * FROM Clien"; Таблица.Open(); Но не пашет... |
|||
19
jour
26.11.13
✎
13:36
|
Проблема в том, что я пока не знаю как правильно должно быть, вот и мечусь
|
|||
20
МихаилМ
26.11.13
✎
13:39
|
(18)
у меня тоже както не подслючалась и тогда я тоже заметил пропажу. помогла тупо перезагрузка. но так было только раз после перезагрузки , когда все заработало не стал разбираться есть проража или нет. |
|||
21
МихаилМ
26.11.13
✎
13:51
|
попробуйте такую строку подключения
"DRIVER={SoftVelocity Topspeed driver (*.tps)};DBQ=\\AVTOPROKAT\Dat\Clien\; Extension = tps;"; вместо DataBase DBQ |
|||
22
МихаилМ
26.11.13
✎
13:52
|
кстати в программе (8)
можно подглядеть строку подключения |
|||
23
МихаилМ
26.11.13
✎
13:53
|
+(22)
для dsn источника |
|||
24
jour
26.11.13
✎
13:59
|
(23) А то. что таблицы запаролены - не может никак влиять ?
|
|||
25
МихаилМ
26.11.13
✎
14:03
|
(24)
не знаю . подсмотрите в строке поключения dsn, как написано в (22) |
|||
26
jour
26.11.13
✎
14:28
|
(25) А драйвер можете свой прислать ? Мой не настраивается никак, при попытки редактирования настроек пишет - "Архитектура драйвера и архитектура приложения не соответствуют друг другу"
|
|||
27
МихаилМ
26.11.13
✎
14:40
|
(26)
отправляте запрос в на email в ЛК |
|||
28
МихаилМ
26.11.13
✎
14:43
|
(26)
"Архитектура драйвера и архитектура приложения не соответствуют друг другу" если у Вас 64-битная ОС, то правильно пишет. Вы не тот dsn менеджер запускаете. в поиск. |
|||
29
jour
26.11.13
✎
14:59
|
(27) написал.
|
|||
30
jour
26.11.13
✎
15:51
|
(28) ОС 64-битная, однако одбс драйвера 32х стоят и работают
ваш драйвер как на вин 7 поставить ? |
|||
31
МихаилМ
26.11.13
✎
16:04
|
(30)
шаманским способом: в 32 битной ВМ с win XP запустил Process Monitor (PM), запустил setup в PM настроил фильтр. исполнил setup. проанализировал трассы PM и выяснил в какие папки и какие ветки реестра записываются. воспроизвел, применительно к 64 версии odbc ветке реестра и скопировал файлы. |
|||
32
МихаилМ
26.11.13
✎
16:06
|
+(31)
списки dll и ветки реестра не сохранил. |
|||
33
Злопчинский
26.11.13
✎
16:06
|
все таки я правильно проинтуичил, что не КлаТион, а Кларион.. ;-)
. а сколько в свое время было шуму по Btrieve (вроде так пишется) |
|||
34
jour
26.11.13
✎
17:15
|
Уже из платформы сделал подключение к внешнему источнику, соединение есть, в конфигураторе таблицы видит, но при выводе выдает
Ошибка ODBC. SQLSTATE: 42000 Номер ошибки: 10015 Описание: [SoftVelocity Inc.][TopSpeed ODBC Driver]Expected lexical element not found: FROM |
|||
35
МихаилМ
26.11.13
✎
17:19
|
(34)
исходите из того, что если Вы смогли подключиться и получить данные в программе (8) то сможете и в 1с из ADO. |
|||
36
МихаилМ
26.11.13
✎
17:22
|
(34)
нет времени и возможности проверять Ваш драйвер. но мой довольно глючный. И если у них "общие корни" то таблицы в 1с отбражаться (открваться) не будут, но запросы к данным выполняться будут. |
|||
37
jour
26.11.13
✎
17:35
|
(36) Лан, спасибо
|
|||
38
МихаилМ
26.11.13
✎
17:44
|
(0)
если файл , не содержащий большой коммерческой тайны могу проверить, будет ли он читаться. |
|||
39
ОдинСерый
26.11.13
✎
18:39
|
шаманить ничего не надо берите МС акцесс и делайте коннект оттуда к кларионовским бд. потом и своего 1С запросто зацепитесь в акцессовским база... или если у вас мс скуль тогда еще проще из акцесса кидает в скуль и там прямо отрабатываете своим 1С. акцесс можете просто сделать экзешник который будет кидать данные на скуль по нажатию.
и вообще тут масса способов для творчества. |
|||
40
МихаилМ
26.11.13
✎
18:51
|
(39)
Вы подсключались из акцесс к odbc источнику clarion ? |
|||
41
ОдинСерый
26.11.13
✎
19:00
|
(40) ну ты молодец :)))
мс акцесс подключается напрямую ко всем видам дбф-шек никакиз одбс не надо. ну может если не будет в списке конверторов в самом акцесс то ищите библиотечки , хотя в стандартном все должно быть хотя конечно хз я последние акцессы не знаю может и уже нет... ищи старые пакеты |
|||
42
ОдинСерый
26.11.13
✎
19:03
|
Совместимость Access со сторонними источниками данных[править | править исходный текст]
СУБД (Источник данных) Версия Access Драйвер Обновляемые запросы Файлы Excel все встроенный Нет SQLite Да MySQL 2000-2003 MyODBC v.3.51.X, 5.1.X Да PostgreSQL Да Firebird Да 1C v.7.7 (dbf) 2003 Visual FoxPro ODBC driver v.6.01.8629.01 Нет Paradox Oracle Текстовые файлы все встроенный Нет Таблицы html все встроенный Нет клариона нет... но он вообще стандартные файлы дбф |
|||
43
МихаилМ
26.11.13
✎
19:15
|
не припомню, что бы я с Вами на "ты" переходил.
вопрос про подключение - не праздный. тк поключится к кларион и прочитать данные проблема. втом числе из аксес. Не болтайте о том, с чем дело не имели. "клариона нет... но он вообще стандартные файлы дбф" - глупость . кларион не хранил данные в дбф. |
|||
44
Chai Nic
26.11.13
✎
19:25
|
(43) "кларион не хранил данные в дбф"
Некоторые путают кларион с клиппером |
|||
45
ОдинСерый
26.11.13
✎
19:30
|
Clarion и 1С читать надо на форуме иногда.
да я перепутал видимо кларион с чем-то из тех кто напрямую поддерживает форматы файлов xBase |
|||
46
Salimbek
26.11.13
✎
19:34
|
(45) И что по ссылке хорошего?
|
|||
47
ОдинСерый
26.11.13
✎
19:37
|
(46) направление движения для тс дает.
кларион наверно давно умер думаю все равно где-то в сети есть приблуды для цепляния его данных в другие выжившие СУБД. почему я акцесс привел в пример?! да потому что он был есть и будет, в отличие от остальные живших, умерших и трансформировашихся старых СУБД. |
|||
48
МихаилМ
26.11.13
✎
19:40
|
(47)
читате внимательно (0) "Единоразово уже умею получать данные путем конвертации таблиц в *.csv" нет задачи "епляния его данных в другие выжившие СУБД". |
|||
49
K-5
26.11.13
✎
19:57
|
а может скриптом это автоматизировать?
|
|||
50
K-5
26.11.13
✎
19:58
|
+(49) "Единоразово уже умею получать данные путем конвертации таблиц в *.csv"
|
|||
51
Капитан Смоллет
26.11.13
✎
22:27
|
(44) Кларион жив.
http://www.softvelocity.com/ |
|||
52
Капитан Смоллет
26.11.13
✎
22:38
|
||||
53
jour
27.11.13
✎
11:27
|
Заснуть сегодня не смог, закрываю глаза и вижу таблицы :)
для истории: Таблица = Новый ТаблицаЗначений(); Таблица.Колонки.Добавить("НаименованиеПолное",,"Наименование полное"); // и т.д. ConnectionString = "DSN=BodyType;DBQ=C:\Work\BodyType.tps\!;Description=BodyType;Extension=tps;EnvFile=C:\Work\1.env;Oem=Y;NullEmptyStr=Y;"; Connection = Новый COMОбъект("ADODB.Connection"); Command = Новый COMОбъект("ADODB.Command"); RecordSet = Новый COMОбъект("ADODB.RecordSet"); Попытка Connection.Open(СокрЛП(ConnectionString)); Command.ActiveConnection = Connection; Command.CommandText = "SELECT * FROM BodyType"; RecordSet = Command.Execute(); RecordSet.MoveFirst(); Пока RecordSet.EOF = Ложь Цикл Строка = Таблица.Добавить(); Строка.НаименованиеПолное = RecordSet.Fields(RecordSet.Fields.Item(0).Name).Value; RecordSet.MoveNext(); /// и т.д. КонецЦикла; таким образом вытаскиваются все записи. Дальше план такой, делаю регламентное задание для вытаскивания новых записей, все вытащенное запихиваю в промежуточную таблицу MSSQL и ее уже подключаю как внешний источник данных в 1С. Может советы дельные может дать ? сложностей умозрительно пока не вижу. |
|||
54
МихаилМ
27.11.13
✎
13:14
|
опять бред.
создайте dsn для подключения к базе, а не к файлу. и работайте с ним из ado. (53) впрочем если соединять таблицы не собираетесь - сойдет и подключение к таблице. RecordSet.Fields(RecordSet.Fields.Item(0).Name) тоже быдло код. могу еще более бредовый идею подать из мс скл сделать подключения к кларе затем подключится к мс скл. |
|||
55
jour
27.11.13
✎
14:12
|
(54) у меня одна из управленческих программ работает в этих таблицах, и сотрудники несколько раз пишут одно и тоже - сначала в эту старую, потом в 3 разные 1С (данные связаны но не одинаковые). Данных довольно много, одну и туже работу по четыре раза делать глупо, но необходимо, чтобы данные, имеющиеся в tps таблицах были доступны в нескольких 1С. Я согласен, что можно просто из dsn подключения брать данные, но мне где то нужно хранить историю, что я взял а что не взял, влазить в типовые 1С не хочется.
На счет быдло кода.. покажите пример хорошего :) |
|||
56
jour
27.11.13
✎
14:16
|
(54) а как из МС СКЛ подключиться к кларе ????
|
|||
57
МихаилМ
27.11.13
✎
14:46
|
(55)
правильно RecordSet.Fields(0) по поводу синхронизации: все равно равно нужно учитывать не только новые данные, но и измененные. так что придется сравнивать таблицы текущую и с копией для выявления новых и измененных (56) вечером (в ~22 00) покажу. сейчас нет времени разбираться. |
|||
58
МихаилМ
28.11.13
✎
11:22
|
(56)
реализуется через OPENDATASOURCE только на сервере должно быть разрешение его использования |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |