Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Проблема 1С и FireBird


Автор: SaschaL 20.2.2008, 18:41
Господа программеры, есть вопрос.

Есть программа стороннего разработчика, база этой программы крутится на СУБД FireBird. Возможно ли программно подключиться к базе данных СУБД FireBird, если возможно, может кто подскажет как это сделать, может кто уже сталкивался в такой ситуацией.

Заранее благодарю всех кто ответит!

Автор: Itsys 20.2.2008, 19:04
Есть внешняя компонента для работы с ODBC - а через нее и подключайся

Добавлено через 9 минут и 40 секунд
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=83&lid=2705

Автор: SaschaL 20.2.2008, 21:05
Спасибо за ответ попробую, правда все мои преждние попытки подцепиться через ODBC ни к чему не привели, в то время как Майкрософтский сервер нормально конектится!
Завтра попробую, поделюсь результатами!

Автор: Ch0bits 21.2.2008, 19:49
А через ADO тоже не получается?

Автор: AkelaSQL 22.2.2008, 09:42
Вот мой пример рабочего кода для 8-ки, если нужно, могу выложить для 7-ки, но там я использую компоненту 1С++

Код


Соединение = Новый COMОбъект("ADODB.Connection");
//DSN=FireBird;Driver={Firebird/InterBase(r) driver};Dbname=23-Video01:c:\Program Files\smdr-  2\db\smdrkey.fdb;CHARSET=NONE;PWD=000111;UID=ALEX;Client=gds32.dll

Соединение.ConnectionString = "DSN=FireBird;Driver={Firebird/InterBase(r) driver};Dbname=" +
    СокрЛП(Объект.ИмяСервера) + ":" + 
    СокрЛП(Объект.ИмяБазыДанных) + ";CHARSET=NONE;Uid=" +
    СокрЛП(Объект.ИмяПользователя) + ";Pwd=" + 
    СокрЛП(Объект.Пароль) + ";Client=gds32.dll";

Соединение.ConnectionTimeout = 60;
Соединение.CursorLocation = 3;
//Состояние("Попытка соединения с " + СокрЛП(Объект.ИмяСервера) + "...");
            
            Попытка
                Соединение.Open();
                //Состояние("Читаю данные с " + СокрЛП(Объект.ИмяСервера) + "...");
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
            
            ТекстЗапроса = "
            |Select
            |CARD as KodKart,
            |substr(upper(DT_EVENT), 1, 10) as datasub,
            |substr(upper(min(DT_EVENT)), 12, 19) as vhod,
            |substr(upper(max(DT_EVENT)), 12, 19) as vihod
            |from ARCH_SMDREVENT
            |where ((MARK = 0) or (MARK is null))
            |and CARD <> '0000000000000000'
            |group by CARD, substr(upper(DT_EVENT), 1, 10)
            |order by CARD
            |";

        Попытка
            // Выборка данных и перебор результата запроса 
            ВыборкаСтрокС = Соединение.Execute(ТекстЗапроса); 
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;


Автор: SaschaL 22.2.2008, 11:23
Спасибо! Буду признателен если выложите пример кода для 1с 7.7

Автор: AkelaSQL 22.2.2008, 13:58
Пример рабочего кода для 1С77 с использованием компоненты 1С++:

Код


Процедура Connect(Database,ServerName,Login,Password,ТипБД)
    
    Если ТипБД = Перечисление.ВидыБаз.SQL Тогда
        Состояние("Соединение с SQL Server...");
        ИдентСоедин = SQLServer.Соединение("Description=" + СокрЛП(Database) + ";DRIVER=SQL Server;SERVER=" + СокрЛП(ServerName) + ";UID=" + СокрЛП(Login) + ";PWD=" + СокрЛП(Password) + ";");
        //SQLServer.Соединение(Description=Database;DRIVER=SQL Server;SERVER=ServerName;UID=Login;PWD=Password;APP=ViewODBC Application;WSID=PROG2;Network=DBMSSOCN);
    Иначе  
        Состояние("Соединение с FireBird Server...");
        ИдентСоедин = SQLServer.Соединение("DSN=FireBird;Driver=Firebird/InterBase(r) driver;Dbname=" + СокрЛП(ServerName) + ":" + СокрЛП(Database) + ";CHARSET=NONE;PWD=" + СокрЛП(Password) + ";UID=" + СокрЛП(Login) + ";Client=gds32.dll;");
    КонецЕсли;
    
    Если ИдентСоедин = 0 Тогда
        Error = SQLServer.ПолучитьОписаниеОшибки(); // свойство управляет выводом ошибкой 
        Сообщить(Строка(Error), "!!!");
        СтатусВозврата(0);
        Возврат;
    Иначе
        Состояние("Соединились, однако... :)");
    КонецЕсли;
    
КонецПроцедуры //Connect
//*******************************************
Процедура Disconnect()
    Попытка
        SQLServer.Закрыть();
    Исключение
        Error = SQLServer.ПолучитьОписаниеОшибки(); // свойство управляет выводом ошибкой 
        Сообщить(ОписаниеОшибки() + РазделительСтрок + Строка(Error), "!!!");
        СтатусВозврата(0);
        Возврат;
    КонецПопытки;
    
КонецПроцедуры //Disconnect
//*******************************************

    Попытка
        // Создаем объект SQLServer
        SQLServer = СоздатьОбъект("ODBCDatabase");
        SQLServer.УстЗначениеТаймаута(10); // свойство определяет, то число секунд, которое мы будем пытается подключиться
        SQLServer.УстЗначениеТаймаутаЛогина(10); // свойство определяет, то число секунд, которое мы будем пытается подключиться
        БазаОмега = СоздатьОбъект("ODBCRecordSet");
    Исключение 
        Error = SQLServer.ПолучитьОписаниеОшибки(); // свойство управляет выводом ошибкой 
        Сообщить(ОписаниеОшибки() + РазделительСтрок + Строка(Error), "!!!");
        СтатусВозврата(0);
        Возврат;    
    КонецПопытки; 
    
        Connect(СокрЛП(БазаУРВ.БазаДанных),СокрЛП(БазаУРВ.Сервер),СокрЛП(БазаУРВ.Пользователь),СокрЛП(БазаУРВ.Пароль),БазаУРВ.ТипБазы);
        БазаОмега.УстБД(SQLServer);
        
        Если БазаУРВ.ТипБазы = Перечисление.ВидыБаз.SQL Тогда
            ТекстЗапроса = "
            |Select
            |KodKart,
            |convert(char(8), min(DataTime), 8) as vhod,
            |convert(char(8), max(DataTime), 8) as vihod
            |from " + СокрЛП(БазаУРВ.БазаДанных) + ".dbo.MyTemp
            |where DataTime >= '" + АмДата(Строка(ДатаДок)) + "'
            |and DataTime < '" + АмДата(Строка(ДатаДок+1)) + "'
            |group by KodKart
            |order by KodKart
            |";
        Иначе
            ТекстЗапроса = "
            |Select
            |CARD as KodKart,
            |substr(upper(min(DT_EVENT)), 12, 19) as vhod,
            |substr(upper(max(DT_EVENT)), 12, 19) as vihod
            |from ARCH_SMDREVENT
            |where DT_EVENT >= '" + АмДата(Строка(ДатаДок)) + "'
            |and DT_EVENT < '" + АмДата(Строка(ДатаДок+1)) + "'
            |and CARD <> '0000000000000000'
            |group by CARD
            |order by CARD
            |";
        КонецЕсли;
        
        //БазаОмега.Отладка(1);
        БазаОмега.Открыть(ТекстЗапроса);
        ТЗ_QueryResults = СоздатьОбъект("ТаблицаЗначений");
        БазаОмега.ПолучитьРезультатыВ_ТЗ(ТЗ_QueryResults,1);

            Disconnect();


Автор: SaschaL 22.2.2008, 18:37
Спасибо за пример попробую написать под свою конфигурацию.

Автор: prefer 25.3.2008, 08:24
приподниму чуток..
Скажите пожалуйста SaschaL, какие впечатления от 1с++ & firebird... 
Мне нужно писать из 7.7 в фаербёрд, какие могут быть подводные камни... заранее спс...

Автор: SaschaL 25.3.2008, 10:36
Добрый день, prefer! 
Если честно но 1С++ я только начал заниматься, просто работа по загрузке данных FireBird-а отодвинута пока на второй план.
Так что более вразумительного я вам сказать в данное время не могу, но подцепиться и загрузить нужные данные с FireBird-а у меня получилось, а по поводу занесения данных на сам FireBird-а у меня такой задачи не было, но думается что она тоже решаема, главное с сознанием дела к этому подойти.. smile 

Автор: prefer 25.3.2008, 13:19
Бобрый день) SaschaL, спс... а лучше через ADO! имхо) и ВК не нужны...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)